在WordPress文本编辑器中添加返回值时,有没有一种方法可以阻止WordPress自动插入<br>标签。并使其易于阅读。

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

[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>标签,这会弄乱我的版式页面。

评论

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

请在这里查看我的答案:wordpress.stackexchange.com/questions/55782/…

#1 楼

shea的答案在许多情况下都不理想:上面的代码会删除
,在很多情况下,它被认为是“黑客入侵内核”,因为这正在改变WP的默认内核行为-例如,这种情况不会在ThemeForest中通过br />
据我所知,您的简码主要存在问题。解决此问题的正确方法不是更改默认行为(修改内核),而是仅过滤内容。因此,只需添加一个过滤器,然后在变量中传递要过滤的Shotrcode数组,如下所示:不会包含<br>, <p>等内容,但是内容的其他部分(例如,用户创建的WP编辑器中的标准文本)仍将具有WP的全部功能。

参考文献: >
the_content WP过滤器
正则表达式“翻译器”
加入PHP函数
preg_replace PHP函数


评论


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

– Arefin2k
2015年11月2日,下午6:03

@Borek这很棒,似乎工作得很好(+1),但是要改善您的答案,您可以解释一下它在做什么?从外观上看,它正在删除近one_third和team_member短代码中的


标记,但是我不确定(我的REGEX技能肯定不符合要求)。您能概述一下对我们有什么作用,现在我们可以为其他短代码配置它了吗?

– dKen
16-2-17在11:26



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

– Borek
16-2-17在19:52



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

–融合
17年8月7日在22:54

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




– MarsAndBack
18年8月6日在22:21



#2 楼

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

创建(插入<p>标签)并删除其他<br>标签,您可以改用以下代码:此代码。

#3 楼

安装插件“别乱搞我的标记”。

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

还有一个选项在整个网站上进行。

#4 楼

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

我使用TinyMCE。在文本编辑器的设置下,我未选中“保存时停止删除“

”和“
”标签,并在HTML编辑器中显示它们”。为我工作。

#5 楼

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

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

echo do_shortcode($post->post_content);

#6 楼

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


#7 楼

此功能仅删除短代码的<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');


评论


它还会影响所有未将[和]用作短代码调用的一部分的情况。

– fuxia♦
19年1月26日在8:02

#8 楼

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

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


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

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

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



5)最后在实时网站上预览它


这里的窍门是不要为该特定页面切换回[可视编辑器],然后为[p]或[br]自动追加不会再发生了。


#9 楼

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