WordPress

pre get posts – Paginacja nie działa po stronie 3 na stronie archiwum kategorii

  • 23 stycznia, 2019
  • 5 min read
pre get posts – Paginacja nie działa po stronie 3 na stronie archiwum kategorii


Mam niestandardowy typ postu „pokaż” iw ramach tego niestandardowego typu postu skonfigurowałem taksonomię/kategorię o nazwie „miejsce”, która ma dwie opcje „miejsce-jeden” i „miejsce-dwa” (ślimaki). Na dwóch skonfigurowanych przeze mnie stronach archiwum, z których każda pokazuje wszystkie posty z „miejsca-pierwszego” lub „miejsca-dwa”, paginacja nie działa poza stroną 3. Używam numerowanej paginacji i wizualnie wyświetla poprawny numer stron powinno być (biorąc pod uwagę to, co ustawiłem posty na stronę), jednak jeśli klikniesz coś powyżej „3”, otrzymuję 404.

Co próbowałem i nie zadziałało:

  • resetowanie linków bezpośrednich
  • zmiana maksymalnej liczby postów na stronę bezpośrednio przez pulpit nawigacyjny wp
  • pozbycie się mojego niestandardowego zapytania i użycie pre_get_posts (uwaga: wszystkie moje badania wskazują na to, że jest to ścieżka do rozwiązania mojego problemu, więc zakładam, że może zadziałać i po prostu nieprawidłowo koduję funkcję w functions.php lub w inny sposób). Jeśli użycie pre_get_posts w functions.php jest rzeczywiście rozwiązaniem, czy muszę dodawać coś nowego do moich plików szablonów problematycznych stron archiwum, poza standardową pętlą wp? (i oczywiście pozbycie się niestandardowego zapytania).
Warto przeczytać!  Rozwiązywanie problemów z nieprawidłowym błędem linków bezpośrednich w WordPress

Powtarzam, wszystko działa idealnie, z wyjątkiem faktu, że paginacja po stronie 3 daje 404.

Ostatnia uwaga, paginacja działa doskonale na stronie archiwum dla tego niestandardowego postu jako całości. Problem występuje tylko na stronach archiwum dla „miejsca-1” i „miejsca-dwa”.

WP_Query

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

 $args = array (
         'post_type' => 'show',
         'posts_per_page' => 3,
         'paged' => $paged,
         'meta_key'  => 'show_date',
         'order' => 'ASC',
         'orderby' => 'meta_value',

     'tax_query' => array(
        array(
            'taxonomy' => 'venue',
            'field' => 'slug',
            'terms' => 'venue-one'
        )
    ),       

            'meta_query' => array(
        array(
            'key'   => 'show_date',
            'compare' => '>=',
            'value'   => $today
    ),
),
        );
$the_query = new WP_Query($args);
?> 

Pętla

<?php if ($the_query->have_posts() ): while ($the_query->have_posts() ) :$the_query->the_post(); $fields = (object) get_fields(); ?>

Funkcja paginacji (w functions.php)

function pagination_bar_venue( $custom_query ) {

$total_pages = $custom_query->max_num_pages;
$big = 999999999; // need an unlikely integer

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

    echo paginate_links(array(
        'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
        'format' => '?paged=%#%',
        'current' => $current_page,
        'total' => $total_pages,
    ));
  }
}

Wywołanie paginacji w szablonie

 <div class="pagination-shows"> 
    <?php pagination_bar_venue($the_query); ?>
 </div>

EDIT + KILKA DOBRYCH WIADOMOŚCI
Wszystko działa z poniższą funkcją pre_get_posts, ale… linki do paginacji nie pojawiają się teraz pod postami. Żeby było jasne, poniższy kod zadziałał i teraz mogę zobaczyć posty poza stroną 3 (aż do dowolnej strony, na której znajdują się posty, wszystko działa idealnie, jeśli wpiszę adres URL). Jednak po wdrożeniu linki do fizycznego kliknięcia numerów stron zniknęły. Jak mogę przekazać zmienną $ paged poniżej, aby wyświetlała się kopia zapasowa? czy jest inny problem?

  // get taxonomy posts
function get_tax_posts( $query ) {
// Make sure this only fires when we want it too
  if( !is_admin() && $query->is_main_query() && $query->is_tax('venue')) {

    // If so, modify the order variables
    $query->set('post_type', 'show' );
    $query->set('posts_per_page', '3'  );
    $query->set( 'meta_key', 'show_date' );
    $query->set( 'order', 'ASC' );
    $query->set( 'orderby', 'meta_value' );
    $meta_query[] = array(
                array(
               'key' => 'show_date',
               'value' => current_time('Ymd'),
               'compare' => '>=',
                 ),
                 );
    $query->set('meta_query',array( $meta_query ) );

       $taxquery = array(
        array(
             'taxonomy' => 'venue',
             'field' => 'slug',
             'terms' => 'venue-one',
        )
    );
    $query->set( 'tax_query', $taxquery );        
  }  
}
add_action('pre_get_posts', 'get_tax_posts', 9999);

Ok, teraz paginacja została naprawiona, ale zauważyłem inny problem. Jeśli chodzi o paginację, wymieniłem poniżej:

<?php pagination_bar_venue($the_query);?>

Z:

<?php the_posts_pagination();?>

a teraz działa również paginacja.

Warto przeczytać!  Błąd 404 Admin-ajax.php — WordPress Development Stack Exchange

Wydaje mi się, że nowy problem, który się dzieje, opiera się na priorytecie haka. Jak wspomniano powyżej, mam (2) taksonomie, aby to aktywować, więc zrobiłem 2 oddzielne funkcje w funkcjach php, jedną dla miejsca-1 (kod powyżej), a następnie drugą dla miejsca-dwa (oczywiście z inną nazwą funkcji). Wygląda na to, że nie możesz mieć obu działających. Jedynym, który zadziała, jest ten z wyższym numerem priorytetu haka. Czy jest na to poprawka? Dzięki

EDYCJA – Myślę, że problem polegał na tym, że moje nazwy funkcji były zbyt podobne, nie były dokładne, ale bliskie poza kilkoma literami. Zmieniłem je tak, by nie były do ​​siebie podobne i teraz wydaje się, że wszystko działa!


Źródło