WP_Query in functions.php

时间:2012-06-25 作者:perpetualstudent

我有一些代码要转换成函数。它工作得很好,直到我将其包装到所述函数中:

    $args = array(
        \'posts_per_page\'    =>  -1,
        \'post_type\'         =>  \'asset\',
        \'category_name\'     =>  $cat
    );
    $cat_query = new WP_Query( $args );
    $matching_category_ids = array();       
    while ( $cat_query->have_posts() ) : $cat_query->the_post();
        array_push($matching_category_ids, $post->ID);
    endwhile;
函数如下所示:

function grab_ids_in_category($cat) {
    //stuff from above here
    return $matching_category_ids;
}
我做错了什么?

2 个回复
最合适的回答,由SO网友:EAMann 整理而成

很简单,您正在寻址$post 脱离上下文

当您运行标准WordPress循环时,WP将加载一个全局$post 具有当前查询结果的变量。这包括ID、title、content、post meta等。循环函数将引用此全局变量以实际提供数据。

取常规函数get_the_ID() 例如:

function get_the_ID() {
    global $post;
    return $post->ID;
}
您的代码在函数之外可以正常工作,因为在它上面的代码中,您可能global正在调整$post 变量所以你直接参考$post->ID 作品

但是,当您将此代码包装到函数中时,您不是在引用$post 作为一个全球性的$post->ID 不会返回任何内容,因为本地$post 未定义。

而不是引用$post->ID 直接使用正则循环函数get_the_ID():

while ( $cat_query->have_posts() ) : $cat_query->the_post();
    array_post( $matching_category_ids, get_the_ID() );
endwhile;

SO网友:Pontus Abrahamsson

必须将全局变量$post添加到函数中,如下所示:

function grab_ids_in_category($cat) {

    global $post;

    $args = array(
        \'posts_per_page\'    =>  -1,
        \'post_type\'         =>  \'asset\',
        \'category_name\'     =>  $cat
    );

    $cat_query = new WP_Query( $args );

    $matching_category_ids = array();

    while ( $cat_query->have_posts() ) : $cat_query->the_post();
        array_push($matching_category_ids, $post->ID);
    endwhile;

    return $matching_category_ids;

}

// echo the Query and pass a category name 
echo grab_ids_in_category(\'category_name\');

结束

相关推荐

Functions.php Problem

当我在函数顶部添加第3-19行时。php,然后尝试更新图像。phpI get the error \"Warning: Cannot modify header information - headers already sent\" when I try to update my image.php.第3-19行的代码为“我的图像库”创建自定义的下一个/上一个链接,并将最后一个链接重定向到“更多库”页面。我的代码可以在这里看到:http://pastebin.com/Yen04t2z