停止WordPress自动添加<br>标记以发布内容


26

<br>在WordPress文本编辑器中添加返回值时,有没有一种方法可以阻止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>在帖子内容中添加不可见标签,这将使我的页面布局混乱。


您要删除所有地方的标记,还是仅删除那些短代码?
2014年

请在这里看到我的回答:wordpress.stackexchange.com/questions/55782/...
Chiedo

Answers:


25

在许多情况下,乳木果的答案并不理想:

  • 您不想从<br>, <p>etc中剥离所有内容。您希望将其作为WP Visual Composer的默认行为,以上代码将删除该行为
  • 在许多情况下,它被认为是“ hacking the core”,因为这正在改变WP的默认核心行为-例如,这种情况不会在ThemeForest上传递

如我所见,您的短代码主要存在问题。解决此问题的正确方法不是更改默认行为(修改内核),而是仅过滤内容。因此,只需添加一个过滤器,然后在变量中传递要过滤的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的全部功能。

参考文献:

  1. the_content WP过滤器
  2. 正则表达式“翻译”
  3. 加入PHP功能
  4. preg_replace PHP函数

在我的项目中效果很好。太棒了,太棒了,很棒,太棒了……..太好了!
arefin2k 2015年

@Borek这很棒,似乎工作得很好(+1),但是要改善您的答案,您可以解释一下它在做什么?从外观上看,它是从码和短码中删除<p><br>标记的,但是我不确定(我的REGEX技能绝对不算白手起家)。您能否概述一下它对我们的作用,现在我们可以为其他短代码配置它了? one_thirdteam_member
dKen '16

@dKen正是您编写的内容。除了正则表达式外,它非常简单,因为内容由内置的WP过滤器the_content填充。我们只需要通过函数指定要过滤的内容(块)和如何过滤(rep)的内容即可。我添加了参考,因此您可以通过检出每个函数和过滤器来更好地理解这一点。至于添加更多的短代码,您只需要扩展$ block数组,只需向其添加短代码名称即可,例如join("|",array("one_third", "team_member", "next_one", "another_one", "one_more"));
Borek

……专业开发人员说,做得很好。正在投票。
Fusion17年

仅供参考,这仅在查看页面时有效。但是,在编辑器中,您很可能仍会像往常一样看到不需要的<p>和<br>。
MarsAndBack

13

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

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

如果您想保留自动生成文字的功能(插入<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' );

如果不确定将代码放在哪里,请参见此链接


3

安装插件“ Do n't Muck My Markup”。

它将在每个页面上添加一个复选框选项,以禁止自动插入<p><br>标签。

还可以在整个站点范围内进行此操作。


1

可能是文本编辑器弄得一团糟。这是我所做的:

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


0

do_shortcode()如果您没有任何其他需要过滤器的内容,则您可以简单地使用内容中仅有的所有代码。

我不知道上下文,但是如果您处于循环中:

echo do_shortcode($post->post_content);


0

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

为此,我使用了代码片段插件(让您轻松添加任意要运行的PHP片段)来为[html][/html]短代码创建一个片段。此短代码的优点在于它与toggle-wpautop插件兼容,可让您禁用在整个帖子上自动插入<br><p>标签。您可以使用混合搭配。

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);

0

此函数仅删除短代码的<p>and <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');

它还会影响在所有的情况下[,并]没有用作简码呼叫的一部分。
fuxia

0

对于不熟悉代码hack或不想使用插件的用户,可以执行此操作。

1)从WP页面复制所有当前代码(文本编辑器) 在此处输入图片说明

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

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

4)点击位于同一WP页面右侧的[UPDATE]按钮以发布页面

在此处输入图片说明

5)最后在直播网站上预览

这里的窍门是不要为这个特定页面切换回[visual editor],然后不再自动为[p]或[br]追加内容。


-3

一个非常简单的解决方案:不要在wordpress编辑器中使用换行符。是的,新行可以澄清。但是,在这种情况下,仍然没有可以理解的中断。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.