将nl2br添加到我的Wordpress自定义Meta Box中

时间:2010-01-05 16:42:43

标签: php wordpress line-breaks

好的,让我看看我是否可以解释这一点。在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 个答案:

答案 0 :(得分:4)

在前端模板上使用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 } ?>

答案 1 :(得分:3)

只需在$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子句中添加另一行时,它会提高可读性并且不会搞砸。

答案 2 :(得分:1)

不要修改保存到数据库的数据。准确保存用户输入的内容。而是在需要显示内容时修改内容。这样,当用户返回编辑字段时,编辑他们放入的内容,而不是您对其内容所做的内容。

使用wpautop对WordPress应用于后内容字段中输入的原始内容的文本执行相同的翻译,并在请求显示内容时执行此操作。

答案 3 :(得分:0)

好的,我找到了解决问题的另一种方法。谢谢Tatu让我的大脑工作。对于那些正在寻找解决方案的人来说,这就是我所做的:

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