如何通过子主题functions.php正确调整WooCommerce主商店页面描述的显示位置
如何通过子主题functions.php正确调整WooCommerce主商店页面描述的显示位置
我明白你现在的困扰——想把WooCommerce主商店页面的描述从顶部移到产品下方,用子主题的functions.php实现,但之前的代码没生效,导致描述重复显示,还不想用CSS隐藏影响SEO。咱们来一步步解决这个问题。
问题出在哪?
你之前把remove_action放在了add_shop_page_description函数里,而这个函数是绑定在woocommerce_after_main_content钩子上的。但WooCommerce默认的商店描述是在更早执行的woocommerce_archive_description钩子里输出的,等你的移除代码运行时,顶部的描述已经被打印出来了,所以根本没起到移除的作用,自然就出现了上下重复的情况。
正确的解决方案
咱们要换个思路:先在足够早的时机移除默认的描述输出动作,再在产品下方的钩子上添加自定义的描述输出。直接把以下代码放到子主题的functions.php文件里即可:
// 移除默认的商店页面描述输出(在初始化阶段执行,确保早于默认输出) add_action( 'init', 'remove_default_shop_description' ); function remove_default_shop_description() { // 移除分类存档的描述输出(避免影响产品分类页) remove_action( 'woocommerce_archive_description', 'woocommerce_taxonomy_archive_description', 10 ); // 移除主商店页面的默认描述输出 remove_action( 'woocommerce_archive_description', 'woocommerce_product_archive_description', 10 ); } // 在产品列表下方添加商店页面描述 add_action( 'woocommerce_after_main_content', 'add_shop_description_below_products' ); function add_shop_description_below_products() { // 只针对主商店页面执行 if ( is_shop() ) { // 用WooCommerce推荐的最新函数获取商店页面ID $shop_page_id = wc_get_page_id( 'shop' ); // 获取商店页面的内容(描述) $shop_description = get_the_content( null, false, $shop_page_id ); // 只有当描述不为空时才输出 if ( ! empty( $shop_description ) ) { echo '<div class="woocommerce-shop-description">' . apply_filters( 'the_content', $shop_description ) . '</div>'; } } }
代码关键点说明
- 把移除动作绑定到
init钩子:这个钩子执行时间足够早,能在默认描述输出前就取消对应的动作,彻底避免顶部显示描述。 - 替换旧函数:用
wc_get_page_id替代过时的woocommerce_get_page_id,这是WooCommerce官方推荐的写法,兼容性更好。 - 空值判断:添加
! empty( $shop_description )的判断,避免商店页面没有设置描述时输出空的HTML容器。 - 自定义CSS类:给描述容器加了
woocommerce-shop-description类,方便你后续根据需要调整样式,不用额外找选择器。
如果你的商店页面同时也是某个产品分类的存档页,可以再微调is_shop()的判断条件,但绝大多数情况下这个判断已经足够准确了。
备注:内容来源于stack exchange,提问作者Connor
相关产品推荐
相关产品推荐

