在theme的function.php文件中设置Wordpress函数

时间:2012-12-14 21:41:36

标签: function wordpress-theming wordpress

我正在尝试在我的主题的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 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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代码)。

答案 2 :(得分: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.

答案 3 :(得分: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.