Frage

Okay, lassen Sie mich sehen, ob ich das richtig erklären kann. In Wordpress haben wir ein Feld einen Ausschnitt einzufügen. Wir brauchen einen zweiten Ausschnitt Feld hinzuzufügen. Anstatt manuell ein benutzerdefiniertes Feld zu jedem Beitrag hinzugefügt habe ich eine Funktion gelegt, um automatisch ein benutzerdefiniertes Feld in Form einer Meta-Box auf der Admin-Post-Seite hinzufügen.

Okay, so ist dies das Problem, dass ich diese Funktion habe funktioniert außer der Tatsache, dass das, was Sie dieses Feld eingeben hinein es Zeilenumbrüche verliert. Also, wenn unsere Autoren auf diesem Gebiet sind, um contrubuting Formatierung des Textblock zu halten, muss ich manuell
bis zum Ende des Absatzes hinzuzufügen.

Hier ist mein Code:

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 );
}

Danke und jede Hilfe tun würde.

War es hilfreich?

Lösung 4

Okay, ich habe eine andere Lösung für mein Problem gefunden. Danke Tatu für mein Gehirn Workin bekommen. Für diejenigen, die diese für eine Lösung suchen, ist das, was ich getan habe:

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

Andere Tipps

Mit wpautop Funktion auf Frontend-Template. Wie:

<?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 } ?>

Fügen Sie einfach diese Zeile nach $new_meta_value = ...:

$new_meta_value = nl2br($new_meta_value);

Und anstatt Ihre Werte im Vergleich zu '', ist es besser empty() zu verwenden. Auch sind einige der Vergleiche nicht benötigt. Somit wird das Add / update / delete Teil Ihrer Sparfunktion kann wie folgt geschrieben werden:

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 );
}

Beachten Sie, dass es immer ratsam ist geschweiften Klammern zu verwenden, auch wenn Sie Ihre Aussage nur eine Zeile lang ist. Es verbessert die Lesbarkeit und nicht durcheinander zu bringen, wenn / wenn Sie eine andere Zeile in die if-Klausel hinzuzufügen haben.

Sie die Daten nicht ändern in der Datenbank gespeichert. Speichern Sie genau das, was der Benutzer eingibt. Anstatt den Inhalt ändern, wenn Sie es angezeigt werden müssen. Auf diese Weise, wenn der Benutzer zurückkommt, das Feld zu bearbeiten, um die bearbeiten, was sie in setzen, nicht das, was Sie von ihrem Inhalt gemacht haben.

wpautop Verwenden Sie die gleiche Übersetzung auf Ihrem Text zu tun, die Wordpress auf den rohen Inhalt in dem Post-Inhaltsfeld eingegeben gilt und es tun, wenn der Inhalt für die Anzeige angefordert wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top