Número de páginas - vários tipos de postagem (personalizados)

4

Minha consulta de arquivo contém um posts_per_page personalizado, order, orderby, post_type e paged (via wp-pageNavi).

array (
    'order' => 'DESC',
    'orderby' => 'title',
    'paged' => 1,
    'post_type' => Array (
        'post',
        'cust_article',
    ),
    'posts_per_page' => 15,
);

Meu post_type contém 'post' e 'cust_article'.
Eu tenho 1 'post' e 65 'cust_article'. posts_per_page está atualmente definido como 5 em admin.

Meu problema é que a quantidade máxima de páginas é limitada pela quantidade de páginas "postadas". Como tenho apenas um 'post', as páginas são limitadas a 1, mesmo que eu tenha todas as páginas exibidas (5 páginas, posts_per_page configuradas como 15), páginas diferentes da página 1 retornarão 404.
Criando um segundo 'post' e configurando o posts_per_page para 1 permite acesso à segunda página, as páginas seguintes também retornarão 404.

Estou usando a mesma consulta para meus arquivos post_type personalizados, com um único post_type. Adicionar um segundo à consulta cria o mesmo erro.

Eu sei que a paginação é limitada pela quantidade de postagens e a opção definida posts_per_page. 5 ppp e 21 posts = > máximo de 5 páginas
Postagens teóricas de 2 post_types devem estender a contagem de posts. 5ppp e 21 posts + 12 posts = > max 7 páginas

    
por AlexG 30.05.2016 / 14:41

1 resposta

3

O Milo está certo, você deve usar pre_get_posts em vez de chamar uma segunda consulta no carregamento. Isso tornará a paginação muito mais fácil. Qualquer que seja a sessão orderby que você estiver usando, ela ainda deve estar acessível no gancho. O código para fazer isso é bastante simples também, ficaria assim:

/**
 * Modify the query before it gets loaded
 *
 * @param WP_Query Object $query
 *
 * @return void
 */
function wpse_228230( $query ) {

    if( $query->is_admin ) {
        return;
    }

    // Your archive conditional here
    if( is_post_type_archive() ) {
        $query->set( 'post_type', array( 'post', 'cust_article' ) );
        $query->set( 'posts_per_page', 15 );
        $query->set( 'orderby', array( 'title' => 'DESC' ) );
    }

}
add_action( 'pre_get_posts', 'wpse_228230' );

Isso modificará a consulta principal antes que ela atinja o banco de dados. Caso contrário, o WordPress obterá a consulta natural, acessará seu WP_Query personalizado e executará ping no banco de dados novamente, o que é desnecessário.

    
por Howdy_McGee 03.05.2017 / 17:20