使用自定义页面模板将参数传递给挂钩函数

时间:2016-10-09 作者:Muhammad Muazzam

基于this 我尝试将以下代码编写为:

Custom Page template:

    /*
 Template Name: product_filter
     */
    get_header();
    do_action( \'pre_get_posts\', \'COOLING\');

Functions.php

add_action(\'pre_get_posts\',\'shop_filter_cat\',10,1);

 function shop_filter_cat($query, $arg) {
    if (!is_admin() && is_post_type_archive( \'product\' ) && $query->is_main_query()) {
       $query->set(\'tax_query\', array(
                    array (\'taxonomy\' => \'product_cat\',
                                       \'field\' => \'slug\',
                                        \'terms\' => $arg
                                 )
                     )
       );   
    }
 }
但我得到以下警告:

警告:在E:\\xampp\\htdocs\\wordpress\\wp includes\\plugin中调用的shop\\u filter\\u cat()缺少参数2。php位于第600行,在E:\\xampp\\htdocs\\wordpress\\wp content\\themes\\storefront\\functions中定义。php在线56

和错误:

致命错误:未捕获错误:对成员函数的调用是E:\\xampp\\htdocs\\wordpress\\wp content\\plugins\\woodcommerce\\includes\\wc弃用函数中字符串上的\\u main\\u query()。php:677堆栈跟踪:#0 E:\\xampp\\htdocs\\wordpress\\wp includes\\plugin。php(524):wc\\u shop\\u order\\u status\\u backwards\\u compatibility(“COOLING”)\\1 E:\\xampp\\htdocs\\wordpress\\wp content\\themes\\storefront\\testing。php(6):do\\u action(\'pre\\u get\\u posts\',\'COOLING\')\\2 E:\\xampp\\htdocs\\wordpress\\wp includes\\template loader。php(75):包括(\'E:\\xampp\\htdocs…\')\\3 E:\\xampp\\htdocs\\wordpress\\wp blog header。php(19):require\\u once(\'E:\\xampp\\htdocs…\')\\4 E:\\xampp\\htdocs\\wordpress\\index。php(17):在E:\\xampp\\htdocs\\wordpress\\wp content\\plugins\\woodcommerce\\includes\\wc弃用函数中抛出的require(\'E:\\xampp\\htdocs…\')\\5{main}。php在线677

1 个回复
SO网友:mmm

你打错电话了add_action
最后的参数必须从1更改为2

add_action(\'pre_get_posts\',\'shop_filter_cat\',10,2);

相关推荐

Wodpress XML Import hooks

要将来自给定远程站点的帖子合并到给定类别下的一个站点中,我如何挂接导入插件以保存给定类别的帖子:给出的示例:接收方站点具有类别auto 我想从(例如)导入所有帖子auto.com 在下面this category. 如果远程帖子有另一个类别auto 添加为子级。应该下载内部帖子图片,更新帖子内的所有链接,因此我已经找到了一个核心方法,下面是我尝试的方法,但我认为这可以变得更简单<?php if (!class_exists(\'Wp_Http\')) in