Пагинация для WP_Query
Вместо дефолтной галереи WordPress делается такой сбор и вывод attachment'ов типа image данной страницы или записи. Если их больше некоторого числа, то образуется пагинация. Если вызов галереи имеет место на странице (page), то пагинация работает. Если вызов галереи на записи (post), то не работает: сами ссылки формируются, то при клике на них никуда не переходишь, остаёшься на той же странице.
Код:
function new_gallery( $output, $attr ) { $ids_from_gallery_sortcode = explode(',', $attr['ids']); $current_page_id = get_queried_object_id(); $paged = get_query_var('paged') ? get_query_var('paged') : 1; $args = array ( 'post_parent' => $current_page_id, 'post__in' => $ids_from_gallery_sortcode, 'post_type' => 'attachment', 'post_mime_type' => 'image', 'post_status' => 'inherit', 'posts_per_page' => 4, 'orderby' => 'post__in', 'paged' => $paged, ); $query = new WP_Query; $attachments = $query->query( $args ); //// Preparing Pagination output $paginate_links_args = array( 'base' => str_replace( 999999999, '%#%', esc_url( get_pagenum_link( 999999999 ) ) ), //'base' => get_permalink( $query->post_parent ) . '%_%', 'total' => $query->max_num_pages, 'current' => max( 1, get_query_var( 'paged' ) ), 'format' => 'page/%#%/', 'show_all' => false, 'type' => 'plain', 'end_size' => 2, 'mid_size' => 2, 'prev_next' => true, 'prev_text' => sprintf( '<span class="arrow_left">«</span>' ), 'next_text' => sprintf( '<span class="arrow_right">»</span>' ), 'add_args' => false, 'add_fragment' => '', ); // // Тут вывод HTML кода галереи с помощью foreach // Примечание: пагинация выводится в виде: paginate_links( $paginate_links_args ) // wp_reset_postdata(); } add_filter('post_gallery', 'new_gallery', 10, 2);
Есть какое-то решение? Не плагин, естественно.
Получается заставить работать пагинацию и при вызове галереи на записи (post). С помощью:
Соответственно, нужно изменить и 'format' на 'page-%#%/'
Но никак не получается сделать так, чтобы URL получался в виде domain.com/page/page/2/
Можно page-2, str-2, str=2, как угодно, но только не page/2/
Так что получается, что адресом страницы, образующейся при пагинации при вызове галереи на странице (page), вообще нельзя(?) управлять. А адресом страницы, образующейся при пагинации при вызове галереи на записи (post), можно, но с ограничением. Что означает, что адреса страниц, образующихся при пагинации, будут всегда разные, в зависимости от того, где вызов галереи, на page или на post.
Нашёл вариант ( https://wordpress.stackexchange.com/questions/185600/pagination-not-working#answer-390794 ), который как будто решает, но это, в принципе, уход от "каноничной" paginate_links() и неясно насколько это будет долговременно maintainable.
Но неужели нет чего-то более человеческого?