Контролировать, сколько сообщений отображаются в Wordpress - PullRequest
0 голосов
/ 25 апреля 2019

Есть ли способ контролировать количество отображаемых сообщений для пользовательского типа сообщений в Wordpress, используя только functions.php?Мой запрос не работает для "posts_per_page".

    <?php
        $paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;


            $query_args = array(
                'posts_per_page' => 8,
                'paged' => $paged
                                );
            $query = new WP_Query( $query_args );
            if ( have_posts() ) : while ( have_posts() ) : the_post();
            $terms = get_the_terms($post->ID, 'workscat');
            $nameTerm = $terms[0]->name;
            $thumbnail = wp_get_attachment_url(get_post_thumbnail_id($post->ID), 'gallery-thumb');
            if(empty($thumbnail)){ $thumbnail = APP_URL . "images/works/no-image.jpg";}

?>

Ответы [ 2 ]

2 голосов
/ 25 апреля 2019

Всякий раз, когда вы работаете с пользовательскими типами постов, и ваш запрос ничего не возвращает, но вы чувствуете, что все сделали правильно ... перейдите и сбросьте постоянные ссылки, посетив Настройки >> Постоянные ссылки. Выберите По умолчанию нажмите Сохранить изменения , затем переключите его обратно на Имя публикации и нажмите Сохранить изменения еще раз.

Кроме того, вы можете изменить свой основной запрос и просто сделать так, чтобы ваш шаблон архива возвращал результаты, без необходимости нового объекта WP_Query.

Я бы использовал хук pre_get_posts в вашем случае, и я бы отфильтровал основной запрос. Добавьте следующий код в ваши functions.php

function set_posts_per_page_for_custom_cpt( $query ) {
    if ( !is_admin() && $query->is_main_query() && is_post_type_archive( 'CustomPostType' ) ) 
    {
       $query->set( 'posts_per_page', '10' );
     }
   }
  add_action( 'pre_get_posts', 'set_posts_per_page_for_custom_cpt' );

Поместите этот код в файл functions.php.

Надеюсь, это поможет

1 голос
/ 26 апреля 2019

Вы можете использовать действие pre_get_posts, чтобы сделать это в вашем function.php, и ниже приведен рабочий код для него

<?php
function my_cptui_change_posts_per_page( $query ) {
    if ( is_admin() || ! $query->is_main_query() ) {
       return;
    }

    if ( is_post_type_archive( 'posttype1' ) ) {
       $query->set( 'posts_per_page', 8 );
    }

    if ( is_post_type_archive( 'posttype2' ) ) {
       $query->set( 'posts_per_page', 12 );
    }
    //$query->is_category('mycategoryname')  remove this if you want for all taxonomy categories
    if ( $query->is_tax('mytaxonomyname') || $query->is_category('mycategoryname') ) {
        set_query_var('posts_per_page', 15);
    }

}
add_filter( 'pre_get_posts', 'my_cptui_change_posts_per_page' );

Примечание: (Если это не работает, перейдите в настройки - постоянные ссылки и сброс постоянных ссылок)

Проверено и хорошо работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...