it-swarm.dev

L'impaginazione è rotta e ho bisogno di aiuto per risolverlo

Sto riscontrando un problema con l'impaginazione su un sito su cui sto lavorando. Il client ha notato che nelle pagine delle sue categorie, l'impaginazione non funziona dopo page 1. Quello che intendo è che su pages 2 e in seguito i post non vengono più visualizzati dal ciclo di WordPress. Mi stavo chiedendo perché questo era e come posso risolvere il problema?

Ecco il mio codice di pagina del modello per le pagine delle categorie:

<?php
get_header();?>
<div class="section blog">
    <div class="container">
        <div class="row">
            <div class="col-xs-12 col-md-8">
                <div class="share">
                        <span>Share:</span>
                        <a href="#" target="_blank">
                            <span class="fa-stack fa-lg">
                                <i class="fa fa-circle fa-stack-2x"></i>
                                <i class="fa fa-Twitter fa-stack-1x"></i>
                            </span>
                        </a>
                        <a href="#" target="_blank">
                            <span class="fa-stack fa-lg">
                                <i class="fa fa-circle fa-stack-2x"></i>
                                <i class="fa fa-facebook fa-stack-1x"></i>
                            </span>
                        </a>
                        <a href="#" target="_blank">
                            <span class="fa-stack fa-lg">
                                <i class="fa fa-circle fa-stack-2x"></i>
                                <i class="fa fa-linkedin fa-stack-1x"></i>
                            </span>
                        </a>
                </div>
                        <?php

                            $link = $_SERVER[HTTP_Host] . $_SERVER[REQUEST_URI];
                            $link_array = explode('/',$link);
                            $page = $link_array[count($link_array)-2];

                            $paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;

                            $args = array(
                            'post_type' => 'post',
                            'posts_per_page' => 4,
                            'paged' => $paged,
                            'category_name' => $page
                            );

                            $post_query = new WP_Query( $args );

                            if($post_query->have_posts() ) {
                                while($post_query->have_posts() ) {
                                    $post_query->the_post();
                                    $image = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'single-post-thumbnail' );
                                    if($image[0] == ''){
                                        $image[0] = get_template_directory_uri() . '/img/placeholder-blog.jpg';
                                    }
                        ?>

                <article>
                    <div class="post">
                        <div class="row">
                            <div class="col-xs-12 col-md-12">
                                <div class="head">  
                                    <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
                                    <span><?php the_time('F j, Y'); ?> by <?php echo get_the_author(); ?> | <a href="<?php the_permalink(); ?>">Leave a Comment</a></span>
                                </div>
                            </div>
                        </div>
                        <div class="row">
                            <div class="col-xs-12 col-md-3 feature-image">
                                <img src="<?php echo $image[0]; ?>" alt="">
                            </div>
                            <div class="col-xs-12 col-md-9">
                                <p><?php $content = get_the_content(); echo mb_strimwidth($content, 0, 400, '...'); ?></p>
                            </div>
                        </div>
                        <div class="row">
                            <div class="col-xs-12 col-md-12">
                                <div class="category">
                                    <p>
                                        Filed Under: 
                                        <?php
                                            $category = get_the_category();
                                            foreach($category as $key=>$cat){
                                                echo '<a href="' . get_site_url() . '/blog/' . $cat->slug . '">' . $cat->name . '</a>';
                                                if(($key+1) != count($category)){
                                                    echo ', ';
                                                }
                                            }
                                        ?>
                                    </p>
                                </div>
                            </div>
                        </div>
                    </div>
                </article>
                <hr>
                        <?php
                                }
                            }
                        ?>


                        <div class="section nav text-center">
                            <!-- pagination here -->
                            <?php
                                if (function_exists(custom_pagination)) {
                                custom_pagination($custom_query->max_num_pages,"",$paged);
                                }
                            ?>

                        </div>


            </div>
            <div class="col-xs-12 col-md-4">
                <?php include('inc/sidebar.php'); ?>
            </div>
        </div>
    </div>
</div>
<?php 
include('inc/connect.php');
get_footer(); 
?>

C'è anche una funzione personalizzata incorporata in functions.php per la paginazione che forse contiene anche un problema:

function custom_pagination($numpages = '', $pagerange = '', $paged='') {

  if (empty($pagerange)) {
    $pagerange = 2;
  }

  /**
   * This first part of our function is a fallback
   * for custom pagination inside a regular loop that
   * uses the global $paged and global $wp_query variables.
   * 
   * It's good because we can now override default pagination
   * in our theme, and use this function in default quries
   * and custom queries.
   */
  global $paged;
  if (empty($paged)) {
    $paged = 1;
  }
  if ($numpages == '') {
    global $wp_query;
    $numpages = $wp_query->max_num_pages;
    if(!$numpages) {
        $numpages = 1;
    }
  }

  /** 
   * We construct the pagination arguments to enter into our paginate_links
   * function. 
   */
  $pagination_args = array(
    'base'            => get_pagenum_link(1) . '%_%',
    'format'          => 'page/%#%',
    'total'           => $numpages,
    'current'         => $paged,
    'show_all'        => False,
    'end_size'        => 1,
    'mid_size'        => $pagerange,
    'prev_next'       => True,
    'prev_text'       => __('<i class="fa fa-angle-left"></i>'),
    'next_text'       => __('<i class="fa fa-angle-right"></i>'),
    'type'            => 'plain',
    'add_args'        => false,
    'add_fragment'    => ''
  );

  $paginate_links = paginate_links($pagination_args);

  if ($paginate_links) {
    echo "<nav class='custom-pagination'>";
      echo $paginate_links;
    echo "</nav>";
  }

}

Ecco alcuni esempi dal vivo di tali:

https://www.staceybarr.com/measure-up/category/podcast/page/2/
https://www.staceybarr.com/measure-up/category/podcast/page/1/

Tutto sembra corretto per me ma purtroppo c'è ancora un problema, mi stavo chiedendo se potrei ottenere un aiuto con questo? Qualsiasi aiuto è molto apprezzato!

1
NeoLobster

Non sono sicuro del motivo per cui la prima pagina funziona, ma la seconda no, anche se questo potrebbe essere un suggerimento per il problema. Verso il basso della pagina del modello di categoria hai il seguente:

if (function_exists(custom_pagination)) {
    custom_pagination($custom_query->max_num_pages,"",$paged);
}

Se rivedi quanto sopra, c'è una variabile chiamata $custom_query. Sembra che sia una query di WordPress che dovrebbe essere in grado di avere un elemento max_numb_pages al suo interno. Il problema è che $custom_query non esiste in nessun altro posto nella pagina e non sembra essere globale. Dovresti cambiarlo per riflettere la tua query sulla pagina, $post_query. Il codice aggiornato sarà simile a questo:

if (function_exists(custom_pagination)) {
    custom_pagination($post_query->max_num_pages,"",$paged);
}

Questo dovrebbe dire all'impaginazione che ci sono un certo numero di pagine e possibilmente rendere il link corretto.

Inoltre, ti consiglierei print_r l'output di $link, $link_array, $page e $paged per determinare se tutte queste variabili stanno emettendo la risposta corretta.

$link = $_SERVER[HTTP_Host] . $_SERVER[REQUEST_URI];
$link_array = explode('/',$link);
$page = $link_array[count($link_array)-2];

$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;

$args = array(
'post_type' => 'post',
'posts_per_page' => 4,
'paged' => $paged,
'category_name' => $page
);

print_r($link);
print_r($link_array);
print_r($page);
print_r($paged);
print_r($args);

Nel caso di $args, assicurati che stia dicendo a WordPress la pagina corretta nell'attributo paged.

2
Tom