Добавление nl2br в мой WordPress пользовательский Meta Box - PullRequest
2 голосов
/ 05 января 2010

Хорошо, давайте посмотрим, смогу ли я объяснить это правильно. В WordPress у нас есть поле для вставки выдержки. Нам нужно добавить второй отрывок. Вместо того, чтобы вручную добавлять настраиваемое поле к каждому сообщению, я поместил функцию автоматического добавления настраиваемого поля в виде мета-поля на странице сообщения администратора.

Хорошо, это проблема, с которой у меня работает эта функция, за исключением того факта, что при вводе в это поле она теряет разрывы строк. Поэтому, когда наши авторы работают над этим полем, чтобы сохранить форматирование блока текста, я должен вручную добавить
в конец абзаца.

Вот мой код:

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

Спасибо, и любая помощь поможет.

Ответы [ 4 ]

4 голосов
/ 01 ноября 2010

Использование функции wpautop в шаблоне внешнего интерфейса. Как:

<?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 } ?>
3 голосов
/ 05 января 2010

Просто добавьте эту строку после $new_meta_value = ...:

$new_meta_value = nl2br($new_meta_value);

И вместо сравнения ваших значений с '' лучше использовать empty(). Также некоторые сравнения не нужны. Таким образом, добавить / обновить / удалить часть вашей функции сохранения можно записать так:

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

Обратите внимание, что всегда желательно использовать фигурные скобки, даже если ваш оператор имеет длину только одну строку. Это улучшает удобочитаемость и не мешает, если / когда вам нужно добавить еще одну строку в предложение if.

1 голос
/ 09 января 2010

Не изменяйте данные, сохраненные в базе данных. Сохраните именно то, что вводит пользователь. Вместо этого измените контент, когда вам нужно его отобразить. Таким образом, когда пользователь возвращается, чтобы отредактировать поле, отредактируйте то, что он вставил, а не то, что вы сделали с его контентом.

Используйте wpautop, чтобы сделать тот же перевод текста, который WordPress применяет к необработанному контенту, введенному в поле пост-контента, и делать это, когда контент запрашивается для отображения.

0 голосов
/ 05 января 2010

Хорошо, я нашел другое решение моей проблемы. Спасибо Тату за то, что мой мозг заработал. Для тех, кто ищет решение, это то, что я сделал:

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