Domanda

Va bene fammi vedere se riesco a spiegarmi questo diritto. In wordpress abbiamo una casella per inserire un estratto. Abbiamo bisogno di aggiungere una seconda scatola estratto. Invece di aggiungere manualmente un campo personalizzato per ogni post ho posto una funzione per aggiungere automaticamente un campo personalizzato nella forma di una scatola di Meta nella pagina di amministrazione posta.

Va bene così questo è il problema che sto avendo questa funzione sta lavorando a parte il fatto che tutto ciò che si entra in questo campo si perde è interruzioni di riga. Così, quando i nostri scrittori sono contrubuting a questo campo al fine di mantenere la formattazione del blocco di testo devo aggiungere manualmente
alla fine del paragrafo.

Qui è il mio codice:

function my_create_post_meta_box() {
    add_meta_box( 'my-meta-box', 'Second Excerpt', 'my_post_meta_box', 'post', 'normal', 'high' );
}

function my_post_meta_box( $object, $box ) { ?>
<p>
    <label for="second-excerpt">
        <strong>Second Excerpt With Images for Post List Page</strong>
    </label>
    <textarea name="second-excerpt" id="second-excerpt" cols="60" rows="4" tabindex="30" style="width: 97%;" wrap="hard"><?php echo wp_specialchars( get_post_meta( $object->ID, 'Second Excerpt', true ), 1 ); ?></textarea>
    <input type="hidden" name="my_meta_box_nonce" value="<?php echo wp_create_nonce( plugin_basename( __FILE__ ) ); ?>" />
</p>
<?php
}

function my_save_post_meta_box( $post_id, $post ) {

    if ( !wp_verify_nonce( $_POST['my_meta_box_nonce'], plugin_basename( __FILE__ ) ) )
        return $post_id;

    if ( !current_user_can( 'edit_post', $post_id ) )
        return $post_id;

    $meta_value = get_post_meta( $post_id, 'Second Excerpt', true );
    $new_meta_value = stripslashes( $_POST['second-excerpt'] );

    if ( $new_meta_value && '' == $meta_value )
        add_post_meta( $post_id, 'Second Excerpt', $new_meta_value, true );

    elseif ( $new_meta_value != $meta_value )
        update_post_meta( $post_id, 'Second Excerpt', $new_meta_value );

    elseif ( '' == $new_meta_value && $meta_value )
        delete_post_meta( $post_id, 'Second Excerpt', $meta_value );
}

Grazie e qualsiasi aiuto farebbe.

È stato utile?

Soluzione 4

Ok ho trovato un'altra soluzione al mio problema. Grazie Tatu per ottenere il mio workin cervello. Per coloro che sono alla ricerca di una soluzione questo è quello che ho fatto:

$new_meta_value = "<p>" . implode( "</p>\n\n<p>", preg_split( '/\n(?:\s*\n)+/', $new_meta_value ) ) . "</p>";

Altri suggerimenti

Utilizzare wpautop funzione modello frontend. Come:

<?php $yourvalue =  get_post_meta($post->ID, "yourvalue", true);   
  if ($yourvalue != ""){ ?>
   <dt>Consult&oacute;rio:</dt>
   <dd><?php echo wpautop( $consultorio, $br = 1 ); ?></dd>
<?php } ?>

Basta aggiungere questa riga dopo $new_meta_value = ...:

$new_meta_value = nl2br($new_meta_value);

E invece di confrontare i valori di '', è meglio usare empty(). Anche alcuni dei confronti sono necessari. Così, l'add / aggiornamento / cancellare parte della vostra funzione di risparmio può essere scritta in questo modo:

if(empty($meta_value)) {
    add_post_meta( $post_id, 'Second Excerpt', $new_meta_value, true );
} elseif(empty($new_meta_value)) {
    delete_post_meta( $post_id, 'Second Excerpt', $meta_value );
} else {
    update_post_meta( $post_id, 'Second Excerpt', $new_meta_value );
}

Si noti che è sempre consigliabile utilizzare le parentesi graffe, anche se la sua dichiarazione è lungo solo una riga. Migliora la leggibilità e non si complicare le cose se / quando si deve aggiungere un'altra riga alla clausola if.

Non modificare i dati salvati nel database. Salvare esattamente ciò che l'utente entra. Invece di modificare il contenuto quando si ha bisogno per visualizzarlo. In questo modo quando l'utente torna a modificare il campo di modifica quello che hanno messo in, non ciò che avete fatto del loro contenuto.

Utilizza wpautop a fare la stessa traduzione sul testo che WordPress si applica al contenuto grezzo immesso nel campo post-contenuti e farlo quando viene richiesto il contenuto per la visualizzazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top