0

我正在尝试在我的主题的 function.php 文件中创建以下函数,并通过我的 taxonomy.php 文件调用它

query_brands_geo('dealers', 'publish', '1', $taxtype, $geo, $brands);

所有变量都在 taxonomy.php 中设置。

如果我将它直接放在我的 taxonomy.php 文件中,则以下查询非常有效。为了使这项工作成为一项功能,我缺少什么?

作为一个函数,对于 2-6 重复的参数,我得到了这个错误语句:

警告:query_brands_geo() 缺少参数 2

function query_brands_geo($posttype, $poststatus, $paidvalue, $taxtype, $geo, $brands) {
    /* Custom Query for a brand/geo combination to display dealers with a certain brand and geography */
    //Query only for brands/geography combo and paid dealers

    $wp_query = new WP_Query();

     $args = array(
       'post_type' => '$posttype',
       'post_status' => array($poststatus),
       'orderby' => 'rand', 
       'posts_per_page' => 30,
       'meta_query' => array(
           array(
               'key' => 'wpcf-paid',
               'value' => array($paidvalue),
               'compare' => 'IN',
           )
       ),
        'tax_query' => array(
            'relation' => 'AND',
                array(
                    'taxonomy' => $taxtype,
                    'field' => 'slug',
                    'terms' => $geo
                ),
                array(
                    'taxonomy' => 'brands',
                    'field' => 'slug',
                    'terms' => $brands
                )

            )

        );
    $wp_query->query($args);

}
add_action( 'after_setup_theme', 'query_brands_geo' );
4

4 回答 4

0

你说你想使用你放在functions.php中的这个函数,并让它在你的taxonomy.php文件中执行。是的,但是您发布的代码表明您正在将其作为操作执行(功能代码后跟 : add_action(...)。所以你在那里所做的就是你把你的函数挂在了after_setup_theme钩子上。因此,您(我想)放置在 taxonomy.php 中的调用不会执行该功能,它实际上是在主题设置后由 WP 自动执行的,当do_action('after_setup_theme'...)由 WordPress 执行时!在这种情况下,只传递了一个参数,因此您会收到错误消息:缺少参数 2... 所以取出该add_action(...)行,将您的函数保留在 functions.php 中,然后通常在 taxonomy.php 中调用它。它应该工作。

于 2012-12-14T23:18:13.767 回答
0

你需要从你的函数中返回一些东西,所以在函数代码的末尾改变它:

$wp_query->query($args);

有了这个 :

$result = $wp_query->query($args);
wp_reset_query();
return $result;

并在 taxonomy.php 中适当地调用它,知道函数的结果对象,当这样调用时:

$myquery = query_brands_geo($arg1, $arg2, ...); // Etc.

将是一个查询结果对象,因此您必须循环遍历它等(请参阅其他地方的 WordPress 代码与循环)。

于 2012-12-15T11:02:33.863 回答
0

好的,我进行了测试,它的工作原理如下:更正您的功能代码,如下所示:

function query_brands_geo($posttype, $poststatus, $paidvalue, $taxtype, $geo, $brands) {
/* Custom Query for a brand/geo combination to display dealers with a certain brand and geography */
//Query only for brands/geography combo and paid dealers

 $args = array(
   'post_type' => '$posttype',
   'post_status' => array($poststatus),
   'orderby' => 'rand', 
   'posts_per_page' => 30,
   'meta_query' => array(
       array(
           'key' => 'wpcf-paid',
           'value' => array($paidvalue),
           'compare' => 'IN',
       )
   ),
    'tax_query' => array(
        'relation' => 'AND',
            array(
                'taxonomy' => $taxtype,
                'field' => 'slug',
                'terms' => $geo
            ),
            array(
                'taxonomy' => 'brands',
                'field' => 'slug',
                'terms' => $brands
            )

        )

    );
query_posts($args);

}

然后在 taxonomy.php 中,如下所示:

query_brands_geo('post', 'published', ..., ..., ...);
while ( have_posts() ) : the_post(); 

the_content(); // Etc.

endwhile; // end of the loop.
于 2012-12-17T08:03:11.600 回答
0

我刚刚在 WP 网站上对此进行了测试,它可以工作,所以如果你尊重相同的逻辑,它也应该适合你:

            function query_brands_geo($posttype, $poststatus) {
              $args = array(
               'post_type' => $posttype,
               'post_status' => array($poststatus) 
                );
                $result = new WP_Query($args);
                wp_reset_query();
                return $result;
            }

            $result = query_brands_geo('post', 'published');
            while ( $result->have_posts() ) : $result->the_post(); 
                the_content();
            endwhile; // end of the loop. 
于 2012-12-18T19:51:51.247 回答