2

好的,让我看看我是否可以正确解释这一点。在 wordpress 中,我们有一个框可以插入摘录。我们需要添加第二个摘录框。我没有在每个帖子中手动添加自定义字段,而是在管理帖子页面上放置了一个以 Meta 框的形式自动添加自定义字段的功能。

好的,这就是我正在使用此功能的问题,除了您输入此字段的任何内容都会丢失它的换行符。因此,当我们的作者为了保持文本块的格式而对该字段进行贡献时,我必须手动添加
到段落的末尾。

这是我的代码:

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 回答 4

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 } ?>
于 2010-11-01T10:09:17.100 回答
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 子句中添加另一行时,它提高了可读性并且不会搞砸。

于 2010-01-05T17:01:43.857 回答
1

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

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

于 2010-01-09T06:23:20.460 回答
0

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

$new_meta_value = "<p>" . implode( "</p>\n\n<p>", preg_split( '/\n(?:\s*\n)+/', $new_meta_value ) ) . "</p>";
于 2010-01-05T19:56:39.240 回答