个性化阅读
专注于IT技术分析

无法使用remove_action()从wordpress WooCommerce钩子中删除函数

使用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, 更高的标签将不起作用, 更少的标签将不起作用?我认为删除动作优先级只需较高, 以便在创建动作后调用它。

现在页面上的一个元素我无法弄清楚它是如何插入到主题中的, 而使用另一个绅士函数列出了我能够隔离的所有钩子和函数…

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 />&gt;&gt;&gt;&gt;&gt;\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功能。我尝试提高优先级数字, 降低优先级数字, 但没有优先级数字。改用’wp_head’操作。

任何人都可以提出为什么这可能无法正常工作以及我可以尝试的其他任何方法…

谢谢你的时间。


#1


运行remove_action之后, 将添加” venedor_single_product_links”操作。

我的建议是找出在何处添加此操作。

删除操作时使用的优​​先级必须与添加操作时的优先级相同。如果你已经发现该操作添加了40, 则必须使用40将其删除。

操作和过滤器存储在数组中。数组的格式为[‘hook’] [‘priority’] [‘function’]。这允许在具有不同优先级的单个挂钩上多次使用同一动作。这是remove_filter的相关片段(与remove_action相同):

unset( $GLOBALS['wp_filter'][ $tag ][ $priority ][ $function_to_remove ]

当你运行remove_action时, 你将从全局过滤器数组中取消设置该函数。如果未指定正确的优先级, 则将尝试取消设置不存在的数组元素。

这并不意味着你要替换的任何操作都必须具有40的优先级。add_action的优先级可以是你想要的任何值。

赞(0)
未经允许不得转载:srcmini » 无法使用remove_action()从wordpress WooCommerce钩子中删除函数

评论 抢沙发

评论前必须登录!