自定义post_type - 更改posts_per_page - 无法正常工作

时间:2016-10-10 20:56:27

标签: php arrays wordpress pagination custom-post-type

我正在努力使我的自定义post_type将在我的Wordpress网站X主页上的分页循环输出X个帖子。但是,它不起作用。

这是我的代码;

<?php if ( get_query_var( 'paged' ) ) { $paged = get_query_var( 'paged' ); } else if ( get_query_var( 'page' ) ) { $paged = get_query_var( 'page' ); } else { $paged = 1; }
    $my_query = new WP_Query ( array (
        'post_type' => array ( 'reviews', 'blogtours', 'interviews', 'post' ),
        'posts_per_page'      => array( '1', '5', '0', '0' ),
        'paged'               => $paged, ) );
    while ( $my_query->have_posts() ) : $my_query->the_post(); ?>

我设置采访&#39;和&#39;发布&#39;现在为0因为他们还没有。我甚至尝试删除它们,认为你无法将post_per_page设置为0并且也没有工作(从posts_per_page和post_type中删除它们)。

到目前为止,唯一有用的是我改变了;

'posts_per_page'      => array( '1', '5', '0', '0' ),

'posts_per_page'      => 3,

举个例子。然后,它显示3个帖子,但一般来自所有post_types,这是我不想要的。我希望能够从单个post_type中选择它。因为&#34; blogtours&#34; post_type比其他任何东西都要多得多,如果我不把它限制在一个较小的数字,其他post_types将永远不会被看到(除非你去头版,但我每天都会做很多帖子所以即使这是不可行的。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

根据我研究的内容,您无法获得posts_per_page的数组。它必须是一个数字。你试图将所有这些帖子转储到相同的Feed或不同的页面?如果是不同的页面,则应将查询分开。每页帖子将限制所有帖子仅显示查询总数3。无论如何,它基本上只会抓住3。如果您将不同帖子上的每个查询分开,则可以按照您希望的方式单独设置每页的帖子。然后我会有一个单独的数组,你将所有不同的帖子推入,然后被送到你的主页。那有意义吗?查询每个帖子类型,以便限制从数据库中获得的帖子数量,然后将它们推送到所有帖子的主数组中。

以下是您的四个单独查询,但请确保我拥有您想要的正确posts_per_page。

    $post_reviews = get_posts(
        'post_type'      => 'reviews',
        'post_status'    => 'publish',
        'posts_per_page' => 5
    );
    $post_blogtours = get_posts(
        'post_type'      => 'blogtours',
        'post_status'    => 'publish',
        'posts_per_page' => 3
    );
    $post_interviews = get_posts(
        'post_type'      => 'interviews',
        'post_status'    => 'publish',
        'posts_per_page' => 3
    );
    $post_post = get_posts(
        'post_type'      => 'post',
        'post_status'    => 'publish',
        'posts_per_page' => 5
    );

    // Below is where you merge all four arrays
    $all_posts = array_merge($post_reviews, $post_blogtours, $post_interviews, $post_post);

   // Sort through the posts, this might need modification based on your data in the array
    function sortFunction( $a, $b ) {
        return strtotime($a["date"]) - strtotime($b["date"]);
    }
    usort($all_posts, "sortFunction");

    // Here is your loop through each post
    foreach ($all_posts as $post) {
        echo $post;
    }