Woocommerce pre_get_posts导致问题

时间:2014-12-18 08:26:48

标签: php wordpress woocommerce

我手边有一个问题。我在主题的functions.php中使用add_action('pre_get_posts','test_hook')并在产品页面中调用它:do_action('pre_get_posts');

问题在于,当我调用该动作时,会调用挂钩到pre_get_posts的其他函数,并且出现以下错误:Call to a member function is_main_query() on a non-object in wc-deprecated-functions.php

我查了那段代码,看起来像是:

add_action( 'pre_get_posts', 'wc_shop_order_status_backwards_compatibility' );
function wc_shop_order_status_backwards_compatibility( $q ) {
   if ( $q->is_main_query() ) {
      return;
   }
//...and it goes on
}

我需要在不影响这些功能的情况下勾选我的功能,但我真的不知道如何。如果我评论这个函数,另一个挂钩到pre_get_posts的函数会返回相同的错误。

PS:我的功能是空的。我看到它的方式,即使没有创建我自己的钩子,只能通过调用该页面内的钩子(archive_products.php)来创建此错误。

1 个答案:

答案 0 :(得分:2)

你不应该在你的页面上调用do_action('pre_get_posts') ...它会在创建查询变量对象之后但在运行实际查询之前自动调用。有关快速说明,请参阅the documentation

更多上下文:需要明确调用核心WordPress Actions的任何内容(并且不会使用do_action()调用它们)。虽然在模板中调用wp_head();之类的内容,但这实际上是wp_head() function,而不是action

WordPress有时令人困惑,因为它复制了动作,钩子和函数的名称。