Добавление nl2br в мой пользовательский мета-блок Wordpress
-
18-09-2019 - |
Вопрос
Хорошо, позвольте мне посмотреть, смогу ли я объяснить это правильно.В 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
Хорошо, я нашел другое решение моей проблемы.Спасибо Тату, что заставили мой мозг работать.Для тех, кто ищет решение, я сделал следующее:
$new_meta_value = "<p>" . implode( "</p>\n\n<p>", preg_split( '/\n(?:\s*\n)+/', $new_meta_value ) ) . "</p>";
Другие советы
Используйте функцию wpautop в шаблоне внешнего интерфейса.Нравиться:
<?php $yourvalue = get_post_meta($post->ID, "yourvalue", true);
if ($yourvalue != ""){ ?>
<dt>Consultório:</dt>
<dd><?php echo wpautop( $consultorio, $br = 1 ); ?></dd>
<?php } ?>
Просто добавьте эту строку после $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.
Не изменяйте данные, сохраненные в базе данных.Сохраняйте именно то, что вводит пользователь.Вместо этого измените контент, когда вам нужно его отобразить.Таким образом, когда пользователь возвращается, чтобы редактировать поле, редактируйте то, что он ввел, а не то, что вы сделали из его содержимого.
Использовать wpautop
выполнить тот же перевод вашего текста, который WordPress применяет к необработанному контенту, введенному в поле пост-контента, и делать это, когда контент запрашивается для отображения.