Как установить post_per_page на шаблон страницы категории пользовательских сообщений? - PullRequest
0 голосов
/ 23 мая 2019

Я создал собственный шаблон для страницы категории сообщений, содержащей настраиваемые поля сообщений.Это страница «События», где я прячу последние сообщения (event_date_end).Проблема в том, что post_per_page не работает.Я думаю, что это несколько унаследовано от темы, которая составляет до 8 сообщений.Я хочу отобразить все сообщения (кроме прошлых событий).

/*
Events Category Template
*/

// get posts
$posts = array(
    'posts_per_page'    => -1,
    'post_type'         => 'post',
    'post_status'       => 'publish',
    'orderby'           => 'meta_value',
    'meta_key'          => "event_date_end",
    'meta_compare'      => '>=',  
    'meta_value'        => date("Ymd"),
    'orderby'           => 'meta_value_num',
    'order'             => 'ASC',
 );

$posts=get_posts($posts);

get_header(); ?>

<div id="main-content">
    <div class="container">
        <h1 class="cat-title"><?php echo single_cat_title(); ?></h1>
        <div id="content-area" class="clearfix">
            <div id="left-area">
            <?php
            if ( have_posts() ) : while ( have_posts() ) : the_post();
            ?>
                    <!-- Divi Library for Events-->
                    <?php echo do_shortcode('[et_pb_section global_module="2564"][/et_pb_section]');?> 
            <?php
                    endwhile;

                    if ( function_exists( 'wp_pagenavi' ) )
                        wp_pagenavi();
            //      else
            //          get_template_part( 'includes/navigation', 'index' );
            //  else :
            //      get_template_part( 'includes/no-results', 'index' );
                endif;
            ?>
            </div> <!-- #left-area -->

            <?php get_sidebar(); ?>
        </div> <!-- #content-area -->
    </div> <!-- .container -->
</div> <!-- #main-content -->

<?php

get_footer();

Я также попытался добавить приведенный ниже код в functions.php, который работал, но он не скрывает прошлые события (фактически добавляет пустые записи ввнизу):

// Increase limit of posts on Events/Agenda pages
add_filter('pre_get_posts', 'posts_in_category');

function posts_in_category($query){
    if ($query->is_category) {
        if (is_category('agenda')) {
            $query->set('posts_per_archive_page', -1);
        }

        if (is_category('agenda-fr')){
            $query->set('posts_per_archive_page', -1);
        }
    }

}

1 Ответ

0 голосов
/ 23 мая 2019

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

Попробуйте это небольшое исправление:

if ( count($posts) > 0 ) : foreach ( $posts as $post ) : setup_postdata( $post );
// Your code here
endforeach; endif;

Таким образом, вы настраиваете цикл для использования сообщений из запроса get_posts().

После завершения цикла вы можете сбросить глобальные данные публикации, чтобы снова использовать исходный запрос публикации с помощью wp_reset_postdata(); Как правило, рекомендуется добавлять это после завершения пользовательского цикла.

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