WordPress

Jak dodać paginację do pętli postów w niestandardowej karcie BuddyPress

  • 22 listopada, 2017
  • 3 min read
Jak dodać paginację do pętli postów w niestandardowej karcie BuddyPress


Stworzyłem nową kartę o nazwie „Wideo” na stronie profilu BuddyPress. Ta karta zawiera wszystkie posty wideo dodane przez tego użytkownika. Problem polega na tym, że pokazuje tylko 12 pierwszych postów, a paginacja się nie wyświetla. Próbowałem dołączyć kod paginacji dostarczony przez motyw, ale bezskutecznie.

Uwagi:

  • Używam motywu o nazwie „VideoTube”

  • Pętla postów do podziału na strony pochodzi z niestandardowego typu postu o nazwie „wideo”

  • Oryginalny kod paginacji dostarczony przez motyw to <?php do_action( 'mars_pagination', null );?>

  • Poniższy kod jest pobierany z mojego pliku functions.php w folderze motywu potomnego.

Z góry dziękuję za wszelką pomoc 😀

Kod:

    <?php function my_videos_screen_content() { 
?>
<div class="container">
        <div class="row">
        <div class="col-sm-8">
            <div class="row video-section meta-maxwidth-230">
<?php 

$args = array(
    'post_type'         => array( 'video' ),
    'author'            => bp_displayed_user_id(),
    'posts_per_page'    => get_option( 'posts_per_page' )
    );

$author_videos = new WP_Query( $args );

if ( $author_videos->have_posts() ) : while ( $author_videos->have_posts() ) : $author_videos->the_post();
    get_template_part( 'loop', 'video' );
    endwhile; ?>
    </div>
    <?php do_action( 'mars_pagination', null );?>
    <?php wp_reset_postdata();
    endif; ?>
        </div>
    </div>
</div>
</div>  
    <?php }

Więc wymyśliłem, jak pokazać paginację za pomocą następującego kodu. Problem polega na tym, że kiedy klikam następną stronę, przenosi mnie do strony 404. Ale kiedy ręcznie odwiedzam niestandardowy adres URL, wyświetla się poprawnie druga strona, oto oba przykłady:

Warto przeczytać!  Dlaczego moje stojące biurko jest jedną z moich tajnych broni (ponad 9 lat użytkowania)

Wersja 404:

To jest struktura adresu URL generowana przez ten kod stronicowania

www.website.com/members/username/my-videos/page/2/

Wersja robocza:

To jest ręczny adres URL, który okazał się działać

www.website.com/members/nazwa_uzytkownika/my-videos/?page=2

Pytanie brzmi, jak sprawić, by działało z pierwszą wersją (/page/2/)

KOD:

    <?php function my_videos_screen_content() { 
echo 'We are currently working on this section, some content may not appear properly. Thank you for your patience.'; ?>
<div class="container">
        <div class="row">
        <div class="col-sm-8">
            <div class="row video-section meta-maxwidth-230">
<?php 

$custom_query_args = array(
    'post_type'         => 'video',
    'author'            => bp_displayed_user_id(),
    'posts_per_page'    => get_option( 'posts_per_page' )
    );

$custom_query_args['paged'] = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;

$custom_query = new WP_Query( $custom_query_args );

$temp_query = $wp_query;
$wp_query   = NULL;
$wp_query   = $custom_query;

if ( $custom_query->have_posts() ) : while ( $custom_query->have_posts() ) : $custom_query->the_post();
    get_template_part( 'loop', 'video' );
    endwhile; ?>
    </div>
    <?php endif; 
    wp_reset_postdata(); ?>

    <?php // Custom query loop pagination
    previous_posts_link( 'Newer Videos' );
    next_posts_link( 'Older Videos', $custom_query->max_num_pages );?>

    <?php // Reset main query object
    $wp_query = NULL;
    $wp_query = $temp_query; ?>

        </div>
    </div><!-- /.row -->
</div>
</div><!-- /.container -->   


Źródło