在整个商店中替换<div id =“content”>

时间:2017-10-17 21:08:06

标签: woocommerce

我正在寻找删除<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之前定义它,但它也没有用。

我必须在这里遗漏一些东西。

1 个答案:

答案 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>';
}