Как получить post и добавить навигационную ссылку post для WordPress?

#php #wordpress

#php #wordpress

Вопрос:

Недавно я создал пользовательскую страницу, используя PHP в WordPress. Я попытался отфильтровать все сообщения по определенному тегу. Вот мой PHP-код для получения post и вставки его в div:

 <div class="container">
        <div class="row box">
            <?php
            $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
            $args = array(
                'post_type' => 'post',
                'post_status' => 'publish',
                'tag' => 'artikelseriesomb2020',
                'posts_per_page' => 10,
                'paged' => $paged,
            );
            $arr_posts = new WP_Query($args);

            if ($arr_posts->have_posts()) :

                while ($arr_posts->have_posts()) :
                    $arr_posts->the_post();
                    $url = wp_get_attachment_url(get_post_thumbnail_id($arr_post->ID), 'large');
            ?>
                    <div class="col-mt-4" style="padding:10px;">
                        <div class="card" style="width: 18rem;">
                            <img class="card-img-top" data-no-lazy="1" src="<?php echo $url; ?>" alt="Card image cap">
                            <div class="card-body">
                                <h5 class="card-title"><?php the_title(); ?></h5>
                                <p class="card-text"><?php the_excerpt(); ?></p>
                                <a href="<?php the_permalink(); ?>" class="btn btn-primary">BACA SELENGKAPNYA</a>
                            </div>
                        </div>
                    </div>
            <?php
                endwhile;
            endif;
            ?>
        </div>
    </div>
  

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

 <?php posts_nav_link(); ?>
  

Но он не отображает никакой навигационной ссылки. Что-то не так с моим кодом? Пожалуйста, помогите мне.

Ответ №1:

Пожалуйста, попробуйте этот код, он может вам помочь! поместите ее внутрь IF и после endwhile.

 echo '<div class="post_pagination">';
$total_pages = $arr_posts->max_num_pages;

if ($total_pages > 1){

    $current_page = max(1, get_query_var('paged'));

    echo paginate_links(array(
        'base' => get_pagenum_link(1) . '%_%',
        'format' => '/page/%#%',
        'current' => $current_page,
        'total' => $total_pages,
        'prev_text'    => __('« prev'),
        'next_text'    => __('next »'),
    ));
}
echo '</div>';
wp_reset_postdata()
  

Комментарии:

1. Добро пожаловать в Stack Overflow. Спасибо за вклад, но, пожалуйста, обратите внимание, что ответы только с кодом не приветствуются, потому что они не объясняют, как это решает проблему. Если вы отредактируете свой ответ, чтобы объяснить, что делает этот код и как он отвечает на вопрос, это было бы более полезно для OP, а также для других пользователей с подобными проблемами в будущем.

Ответ №2:

Я нашел решение.

Это довольно просто!

Сначала я использую эту функцию для генерации разбивки на страницы:

 <?php
function pagination_bar()
{
    global $my_query;

    $total_pages = $my_query->max_num_pages;

    if ($total_pages > 1) {
        $current_page = max(1, get_query_var('paged'));

        echo paginate_links(array(
            'base' => get_pagenum_link(1) . '%_%',
            'format' => '/page/%#%',
            'current' => $current_page,
            'total' => $total_pages,
        ));
    }
}
?>
  

Затем я вызываю функцию:

 <?php
        if (have_posts()) :
            pagination_bar();
        endif;
        ?>
  

Вот и все.