停止WordPress自动向帖子内容添加<br>标签

时间:2014-01-16 作者:mvaneijgen

有没有办法阻止WordPress自动插入<br> 在WordPress文本编辑器中添加返回时的标记。

我希望它的行为更像一个代码编辑器,在那里我可以按照我喜欢的方式构造代码并使其易于阅读。

我在编辑器中使用的代码是:

[one_third][team_member image_url="team_member.jpg" name="Laser vision" role="WordPress Designer"][custom_button url="#"]For more information[/custom_button][/team_member][/one_third][one_third][team_member image_url="team_member.jpg" name="Laser vision" role="WordPress Designer"][custom_button url="#"]For more information[/custom_button][/team_member][/one_third][one_third][team_member image_url="team_member.jpg" name="Laser vision" role="WordPress Designer"][custom_button url="#"]For more information[/custom_button][/team_member][/one_third]
我想这样构造它,以便更容易阅读和编辑:

[one_third]
[team_member image_url="team_member.jpg" name="Laser vision" role="WordPress Designer"]
[custom_button url="#"]For more information[/custom_button]
[/team_member]
[/one_third]

[one_third]
[team_member image_url="team_member.jpg" name="Laser vision" role="WordPress Designer"]
[custom_button url="#"]For more information[/custom_button]
[/team_member]
[/one_third]

[one_third]
[team_member image_url="team_member.jpg" name="Laser vision" role="WordPress Designer"]
[custom_button url="#"]For more information[/custom_button]
[/team_member]
[/one_third]
然而,当这样做时,将出现不可见<br> 添加到帖子内容的标签会扰乱我的页面布局。

8 个回复
SO网友:Borek

shea的答案并不理想,因为在许多情况下:

你不想剥夺一切<br>, <p> 等等。您希望将其作为WP visual composer的默认行为,上面的代码将删除它。在许多情况下,它被视为“入侵核心”,因为这正在改变WP的默认核心行为-例如,这样的事情不会在之前传递,因为我可以看到您主要与短代码有关。正确的方法不是改变默认行为(破解核心),而是过滤内容。因此,只需添加一个过滤器,并在一个变量pass中通过一个要按如下方式过滤的shotrcode数组:

function the_content_filter($content) {
    $block = join("|",array("one_third", "team_member"));
    $rep = preg_replace("/(<p>)?\\[($block)(\\s[^\\]]+)?\\](<\\/p>|<br \\/>)?/","[$2$3]",$content);
    $rep = preg_replace("/(<p>)?\\[\\/($block)](<\\/p>|<br \\/>)?/","[/$2]",$rep);
return $rep;
}
add_filter("the_content", "the_content_filter");
内部内容将被过滤,因此您的短代码将不受<br>, <p> 但内容的其他部分(例如用户创建的WP编辑器中的标准文本)仍将具有WP的全部功能。

References:

  1. the_content WP filter
  2. Regex "translator"
  3. join PHP function
  4. preg_replace PHP function

SO网友:shea

这个wpautop() 函数添加<p><br> 标记内容以保留换行符。如果您希望自己添加这些标记,则可以删除将此功能应用于帖子内容的过滤器:

remove_filter( \'the_content\', \'wpautop\' );
remove_filter( \'the_excerpt\', \'wpautop\' );
如果您想保持自动创建Paragraph(插入<p> 标签),只需删除额外的<br> 标记,您可以改用此代码:

remove_filter( \'the_content\', \'wpautop\' );
remove_filter( \'the_excerpt\', \'wpautop\' );

function wpse_wpautop_nobr( $content ) {
    return wpautop( $content, false );
}

add_filter( \'the_content\', \'wpse_wpautop_nobr\' );
add_filter( \'the_excerpt\', \'wpse_wpautop_nobr\' );
请参见this link 如果您不确定将此代码放在何处。

SO网友:Brent Baccala

安装插件“不要弄脏我的标记”。

它会在每个页面中添加一个复选框选项,禁用自动插入<p><br> 标签。

还有一个选项可以在整个站点范围内执行此操作。

SO网友:Svein E. Slotte Pedersen

可能是文本编辑器造成了混乱。这就是我所做的:

我使用TinyMCE。在文本编辑器的设置下,我取消选中了“停止删除”<;p>“和”<;br/>“保存时标记并在HTML编辑器中显示它们”。为我工作。

SO网友:Simon

也许你可以用do_shortcode() 如果您的内容中只有短代码,只要您没有任何其他需要过滤器的内容。

我不知道上下文,但如果你在循环中:

echo do_shortcode($post->post_content);

SO网友:Greg

Borek的答案不适用于我的用例,即编写原始HTML。

为此,我使用了Code Snippets 插件(允许您轻松添加运行的任意PHP代码段),以创建[html][/html] 短代码。这个短代码的酷之处在于它与toggle-wpautop 允许您禁用自动插入的插件<br><p> 整个帖子上的标签。您可以使用任意一种,mix&;火柴

function html_shorttag_filter($content) {
  // Based on: https://wordpress.org/plugins/lct-temporary-wpautop-disable-shortcode/
  $new_content = \'\';
  $pieces = preg_split(\'/(\\[html\\].*?\\[\\/html\\])/is\', $content, -1, PREG_SPLIT_DELIM_CAPTURE);
  // don\'t interfere with plugin that disables wpautop on the entire page
  // see: https://plugins.svn.wordpress.org/toggle-wpautop/tags/1.2.2/toggle-wpautop.php
  $autop_disabled = get_post_meta(get_the_ID(), \'_lp_disable_wpautop\', true);
  foreach ($pieces as $piece) {
    if (preg_match( \'/\\[html\\](.*?)\\[\\/html\\]/is\', $piece, $matches)) {
      $new_content .= $matches[1];
    } else {
      $new_content .= $autop_disabled ? $piece : wpautop($piece);
    }
  }
  // remove the wpautop filter, but only do it if the other plugin won\'t do it for us
  if (!$autop_disabled) {
    remove_filter(\'the_content\', \'wpautop\');
    remove_filter(\'the_excerpt\', \'wpautop\');
  }
  return $new_content;
}
// idea to use 9 is from: https://plugins.svn.wordpress.org/wpautop-control/trunk/wpautop-control.php
add_filter(\'the_content\', \'html_shorttag_filter\', 9);
add_filter(\'the_excerpt\', \'html_shorttag_filter\', 9);

SO网友:Burhan Nasir

此函数仅删除<p><br> 短代码的标记。

function bnd_fix_shortcodes_extra_line_break( $content ){
  $array = array (
    \'<p>[\'    => \'[\',
    \']</p>\'   => \']\',
    \']<br />\' => \']\'
  );
  $content = strtr( $content, $array );
  return $content;
}
add_filter(\'the_content\', \'bnd_fix_shortcodes_extra_line_break\');

SO网友:HO LI Pin

对于那些不熟悉代码破解或不想使用插件的人,您可以这样做。

1) 从WP页面复制所有当前代码(文本编辑器)enter image description here

2) 然后粘贴到记事本并继续编辑(添加短代码、html代码或css代码)

3) 将粘贴从记事本复制到WP页面上的同一屏幕(文本编辑器)

4) 点击位于相同WP页面右侧的[更新]按钮发布页面

enter image description here

5) 最终在现场预览

这里的诀窍是,对于这个特定的页面,不要切换回[视觉编辑器],然后自动附加到[p]或[br]将不再发生。

结束

相关推荐

撤消定义(‘UPLOADS’,‘’.‘FILES’);以重指向“wp-Content/Uploads”文件夹

是否可以通过使用将“wp content/uploads”设置为使用不同的文件夹define( \'UPLOADS\', \'\'.\'files\' ); 我已经永久有效地更改了所有路径,如果是这样的话,我如何撤消它,使其指向“wp内容/上传”?我认为只要把define( \'UPLOADS\', \'\'.\'files\' ); 我会解决一个问题,我上传到WP的文件不想下载,因为URL不是文件的正确路径。