我正在寻找删除<div id="content"><div class="woocommerce">
包装容器并将其替换为与我网站其余部分匹配的更合适的标记。
我首先尝试了行动:
remove_action( 'woocommerce_before_main_content', 'woocommerce_output_content_wrapper', 20);
remove_action( 'woocommerce_after_main_content', 'woocommerce_output_content_wrapper_end', 20);
function WOO_before_main_content( $woocommerce_output_content_wrapper ) {
echo '<main class="woocommerce">';
}
function WOO_after_main_content( $woocommerce_output_content_wrapper ) {
echo '</main>';
}
// Use <main> instead, much better.
add_action('woocommerce_after_main_content', 'WOO_after_main_content', 5);
add_action( 'woocommerce_before_main_content', 'WOO_before_main_content', 5);
这似乎适用于某些页面(如类别或产品页面),但帐户/登录和购物车等其他页面保持不变。
然后我尝试将模板文件复制到我的主题中并在那里更新HTML。
woocommerce/global/wrapper-start.php
woocommerce/global/wrapper-end.php
同样,结果相同。知道为什么我无法在整个商店中全局控制包装器吗?
更新
在进行更多研究时,hook guide列出的woocommerce_before_main_content
动作仅由archive-product.php, single-product.php
调用。所以我猜不是每一页?这有点让我感到困惑,因为网上的每个帖子都说使用它来编辑包装HTML元素。也许最近发生了一些变化?
搜索整个Woocommerce插件目录,global/wrapper-start.php
是唯一包含id="content"
的内容,因此它必须来自那里。同样,尝试将此模板覆盖到我的主题 woocommerce / global / wrapper-start.php 不起作用。
因此,追踪到更远的地方,woocommerce_output_content_wrapper()
中的wc-template-functions.php
函数是唯一加载包装器启动模板的函数。我已经尝试在我的functions.php文件中在Woocommerce之前定义它,但它也没有用。
我必须在这里遗漏一些东西。
答案 0 :(得分:0)
您需要删除与添加的操作具有相同优先级的操作。在您的代码中,您使用20作为优先级,但WooCommerce将其添加为10。
// First remove default wrapper
remove_action( 'woocommerce_before_main_content', 'woocommerce_output_content_wrapper', 10);
remove_action( 'woocommerce_after_main_content', 'woocommerce_output_content_wrapper_end', 10);
// Then add new wrappers
add_action('woocommerce_before_main_content', 'my_theme_wrapper_start', 10);
add_action('woocommerce_after_main_content', 'my_theme_wrapper_end', 10);
function my_theme_wrapper_start() {
echo '<main class="woocommerce">';
}
function my_theme_wrapper_end() {
echo '</main>';
}