在functions.php中使用WP_Query只返回一个结果

时间:2015-05-19 12:06:17

标签: wordpress

我在我的functions.php文件中编写了一个函数,该函数运行一个新的WP_Query类,根据其元键/值在我的自定义页面模板上获取一些子页面。它有点工作,但它只返回一个结果 - 我知道还有更多,因为我将查询在特定页面上正常运行之后才将其转换为函数。它返回了所有正确的结果,但由于我可能需要在几个页面中使用此功能,所以我决定将其转换为函数。

这是我的功能代码......

function contact_profiles($args) {

    global $post;

    $output = "";

    $the_query = new WP_Query( $args );

    while ( $the_query->have_posts() ) : $the_query->the_post();

        $output = '<div class="staff-member">'                              
        .'<a href="' . get_the_permalink() . '" title="Get in touch with ' . get_the_title() . '">' . get_the_post_thumbnail() . '</a>'
        .'<h2 class="name"><a href="' . get_the_permalink() . '" title="Get in touch with ' . get_the_title() . '">' . get_the_title() . '</a></h2>'
        .'<h3 class="job-role">' . get_post_meta( $post->ID, 'job_role', true ) . '</h3>'
        .'</div>';

    endwhile;

    wp_reset_postdata();

    return $output;
}

以下是我在自定义页面模板中调用它的方法......

    $myarray = array('meta_key' => 'job_area', 'meta_value' => 'Online', 'post_type' => 'page',);

    echo contact_profiles($myarray);

我做了一些我不应该做的事吗?是global $post位导致问题,因为我不确定我应该从函数文件中调用它。

1 个答案:

答案 0 :(得分:4)

最有可能的是,您在后端阅读部分将每页的帖子设置为1。如果没有自定义值传递给自定义查询,则默认选项get_option( 'posts_per_page' )将用作posts_per_page参数的值。

您的解决方案是明确将posts_per_page设置为所需的金额或-1以获取所有帖子

修改

我之前错过了,你的连接错了。

$output = '<div class="staff-member">'

应该是

$output .= '<div class="staff-member">'

以下是您的代码的更新版本

function contact_profiles($args) 
{

    $output = "";

    $the_query = new WP_Query( $args );

    while ( $the_query->have_posts() ) : $the_query->the_post();

        $output .= '<div class="staff-member">'                             
        .'<a href="' . get_the_permalink() . '" title="Get in touch with ' . get_the_title() . '">' . get_the_post_thumbnail() . '</a>'
        .'<h2 class="name"><a href="' . get_the_permalink() . '" title="Get in touch with ' . get_the_title() . '">' . get_the_title() . '</a></h2>'
        .'<h3 class="job-role">' . get_post_meta( $post->ID, 'job_role', true ) . '</h3>'
        .'</div>';

    endwhile;

    wp_reset_postdata();

    return $output;
}