WooCommerce的Shop页面虽然有固定格式,依然可以在编辑器中输入内容,输入shortcode时会强制执行wpautop,导致shortcode输出带上很多p和br标签,其自带shortcode亦无法幸免,使用WC 2.2.4时发现了这个问题。

问题描述

例如在商店页面使用featured_products shortcode,产生的结果如下图所示,箭头所指的位置是强制将换行符转换成p导致的副作用,空的a标签。

extra-p-tags

尽管这不会百分之百导致样式问题,但能避免还是避免之。

原因

woocommerce的店铺页面最开始会输出一段描述性文字,相当于文章的内容。一般输出内容使用the_content()函数,而woocommerce却直接硬编码了wpautop,于是shortcode里只要有换行就会被影响,一般的remove_filter方法无法解决。

wc-wpautp

解决

既然wpautop无法跳过,那只能把shortcode中会让wpautop起作用的因素去掉,即删除换行符。

通常shortcode结尾会返回一段字符串

...
return $output;

在返回前先删除换行符和多余空格,就能避免这个问题

...
return str_replace(array("\r\n", "\r", "\n", "\t", '  ', '    ', '    '), '', $output);

13条留言

    1. 你说像淘宝那样的购买记录吗?肯定能实现,但我没见过现成的代码。

      1. 是啊,我想把这个商品的所有购买记录显示出来,一时不知道该如何实现

        1. 用自定义查询可以返回结果,sql语句参考Reports下面的Sales by product
          然后在产品也增加一个新的tab显示结果就行了

  1. 嗨,WOO中文教程,参考资料真是少之又少,都没系统性。多希望有个教程,有好好系统介绍下模版这块!

    为什么不是模版标签化!哭~~

    1. 看官方文档就行吧,woocommerce模版跟wordpress模版一样,大部分是标签化的,只是有些会搀和一些php代码段,这东西看多了就会了。

  2. 应该有中文翻译的,只是wordpress 4.0以后中文翻译需要去后台设置常规里选站点语言。
    数据库是要升级一下,订单图标没了是啥意思?

    1. 就是订单前面不是有一个处理中,完成,取消的小icon么。全都没了。。我还是暂时先老老实实的用老版本的吧。。新的升级以后主题也不支持了,等于要全部换了。。貌似博主Alipay For WooCommerce 1.3.1不再支持woo2.1.1了么?升级以后报错了。。

      1. 看症状是你主题不支持新版woocommerce,这问题我也遇到了,插件嘛,好吧,我确实发懒了没去测旧版,wc每次升级各种变,支持的怪累的。你遇到啥报错了,我看看好改不。

        1. 嗯。所以说我不换了,希望老版本不要爆什么漏洞。。。支付插件的问题是:alipay-for-woocommerce/class-wc-alipay.php on line 216 点击支付或者后台woo设置都会报错。。麻烦博主了!

          1. 我已经改了,你更新到1.3.2就好了。其实就是woocommerce2.2把log存储位置给变了,我没去检查它用的那个函数,刚才看了下,好吧写着since2.2,2.1铁定要报function未定义的错误了。

          2. 真是快啊!辛苦博主了,感谢!

  3. 请教下博主Woo2.2.4到底升级了些啥,之前用2.2.11挺好的,升级以后不但汉化没了,还提示说我主题模版过时,还要升级什么数据,订单图标也没了,搞的一塌糊涂的。。。是在闹哪样。。?

评论功能已关闭