使用WooCommerce构建电子商务网站。我试图通过从默认钩子中删除函数并将它们插入到另一个中来修改主题布局(因此它们出现在页面的不同部分。
我已成功删除了一个功能并将其插入另一个挂钩...
remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_meta', 40);
add_action('woocommerce_below_single_product_display', 'woocommerce_template_single_meta', 40);
除了我不理解的是,我必须使用优先级标签40,任何更高的优先级标签,以及更少的工作能力之外,我才能找到它。我认为删除操作优先级只需要更高的数字,以便在创建操作后调用它。
现在页面上的一个元素我无法弄清楚它是如何插入主题的,使用另一个绅士的功能列出了我能够隔离它的所有钩子和功能... < / p>
function list_hooked_functions($tag='woocommerce_single_product_summary'){
global $wp_filter;
if ($tag) {
$hook[$tag]=$wp_filter[$tag];
if (!is_array($hook[$tag])) {
trigger_error("Nothing found for '$tag' hook", E_USER_WARNING);
return;
}
}
else {
$hook=$wp_filter;
ksort($hook);
}
echo '<pre>';
foreach($hook as $tag => $priority){
echo "<br />>>>>>\t<strong>$tag</strong><br />";
ksort($priority);
foreach($priority as $priority => $function){
echo $priority;
foreach($function as $name => $properties) echo "\t$name<br />";
}
}
echo '</pre>';
return;
}
这个函数返回的是......
我隔离了需要从钩子中删除的功能。所以我在我的functions.php
中有这个add_action('init', function(){
remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_meta', 40);
remove_action('woocommerce_single_product_summary', 'venedor_single_product_links', 3135);
add_action('woocommerce_below_single_product_display', 'woocommerce_template_single_meta', 40);
add_action('woocommerce_below_single_product_display', 'venedor_single_product_links', 40);
}, 9000);
我无法删除该venedor_single_product_links功能。我试过提高优先级数,降低优先级,没有优先级。使用&#39; wp_head&#39;而不是行动。
任何人都可以建议为什么这可能不起作用以及我可以尝试的其他任何事情......
感谢您的时间。
答案 0 :(得分:3)
&ve; venedor_single_product_links&#39;运行remove_action
后正在添加操作。
我的建议是找出这个动作的添加位置。
删除操作时使用的优先级必须与添加时的优先级相同。如果操作添加了40,正如您已经发现的那样,则必须使用40删除它。
操作和过滤器存储在数组中。数组的格式为['hook']['priority']['function']
。这允许在具有不同优先级的单个钩子上多次使用相同的动作。这是remove_filter
的相关摘录(与remove_action
相同):
unset( $GLOBALS['wp_filter'][ $tag ][ $priority ][ $function_to_remove ]
当您运行remove_action
时,您将从全局过滤器数组中取消设置该功能。如果您没有指定正确的优先级,那么您将尝试取消设置不存在的数组元素。
这并不意味着你替换它的任何行动必须优先级为40. add_action
的优先级可以是你喜欢的任何内容。