【问题标题】:Adding nl2br to my Wordpress custom Meta Box将 nl2br 添加到我的 Wordpress 自定义元框
【发布时间】:2010-01-05 16:42:43
【问题描述】:

好的,让我看看我能不能解释清楚。在 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 );
}

谢谢,任何帮助都可以。

【问题讨论】:

  • 您的具体问题是什么?如何使用 nl2br() 或在代码中的何处添加?
  • 我的问题是在我的代码中我应该在哪里添加这个让 wordpress 识别换行符。抱歉,如果它令人困惑

标签: php wordpress line-breaks


【解决方案1】:

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

【讨论】:

  • 我会在下一个项目中尝试...感谢您的回复。
【解决方案2】:

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

【讨论】:

  • 谢谢!我快疯了……就这么简单。
  • 最后一个问题。例如,当我不止一次更新我的帖子时,如果进行了编辑,它会不断在第二个摘录中添加 linebeaks。我可以让它只适用于帖子一次吗?
  • 在将摘录插入文本区域时,使用str_replace('&lt;br /&gt;', "\n", wp_specialchars( get_post_meta( $object-&gt;ID, 'Second Excerpt', true ), 1 )) 将换行标记转回换行。现在听起来好像在摘录中插入了换行标记,并且在保存时会以某种方式将其弄乱。
  • 好吧,这并不是真的搞砸了。例如:这是示例文本
    - 这是正确的将
    的添加限制为一次。
  • 您在
    之后添加了一个换行符,这是添加新
    标记的唯一原因。没有看到页面,很难说为什么会发生这种情况。
【解决方案3】:

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

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

【讨论】:

  • 我不确定我得到你 Gipetto 了吗?这个解决方案实际上可以很好地满足我们的需要,但是如果您认为有更好的方法,请您描述一下。谢谢!
  • 您正在将修改后的数据保存到数据库中。只需将原始数据保存为用户输入即可。这样,当用户回来编辑文本时,他们就不必与内容中的
    元素抗衡。由于
    仅对正确的前端输出是必需的,因此我只在前端输出内容时应用 nl2br 函数。这不是绝对的,但它是我已经习惯的做法。从长远来看,它似乎更容易让用户只在需要显示它时才显示它。
  • 另外,通过使用 wordpress 内置的 wpautop 功能,您将获得比 nl2br 更好的输出。
【解决方案4】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    相关资源
    最近更新 更多