web-dev-qa-db-fra.com

Problème de pagination de modèle de catégorie personnalisée

J'ai personnalisé le modèle de catégorie de mon thème pour afficher les catégories enfants de la catégorie actuelle au lieu des publications. Tout fonctionne correctement à l'exception de l'erreur suivante: Fatal error: Call to undefined function codilight_lite_custom_paginate() in...

Je pourrais supprimer la fonction du modèle, mais si possible, j'aimerais la conserver afin de pouvoir paginer les résultats pour les catégories comportant un grand nombre de catégories enfants.

Est-il possible de modifier la fonction pour qu'elle fonctionne avec le modèle personnalisé?

Voici la fonction:

if ( ! function_exists( 'codilight_lite_custom_paginate' ) ) :
/**
 * Retrieve paginated link for archive post pages.
 */
function codilight_lite_custom_paginate() {
    global $wp_query;
    $total_pages = $wp_query->max_num_pages;
    $big         = 999999999;
    $translated  = __( 'Page', 'codilight-lite' );

    if ($total_pages > 1){
        $current_page = max(1, get_query_var('paged'));
        echo '<div class="ft-paginate">';
        echo paginate_links(array(
            'base'               => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
            'format'             => '?paged=%#%',
            'prev_next'          => True,
            'prev_text'          => '<i class="fa fa-angle-left"></i>',
            'next_text'          => '<i class="fa fa-angle-right"></i>',
            'current'            => $current_page,
            'total'              => $total_pages,
            'before_page_number' => '<span class="screen-reader-text">'.$translated.' </span>'
        ));
        //echo '<span class="total-pages">Page '. $current_page .' of '. $total_pages .'</span>';
        printf( '<span class="total-pages">'. esc_html__( 'Page %1$s of %2$s', 'codilight-lite' ) .'</span>', $current_page, $total_pages );
        echo '</div>';
    }
}
endif;

... et voici mon modèle de catégorie personnalisé:

<?php
/**
 * Category Template: Custom
 */

get_header(); ?>
    <div id="content" class="site-content container <?php echo codilight_lite_sidebar_position(); ?>">
        <div class="content-inside">
            <div id="primary" class="content-area">
                <main id="main" class="site-main" role="main">
<?php 
        $cat = get_category( get_query_var( 'cat' ) );
        $cat_id = $cat->cat_ID;
        $child_categories=get_categories(
        array( 
        'parent' => $cat_id,
        // Uncomment the below line if you want empty category to appear on the list. 
        // 'hide_empty'   => 0
    )
); 
        if (!empty($child_categories)) : $count = 0; ?>

                    <header class="page-header">
                        <?php
                            the_archive_title( '<h1 class="page-title">', '</h1>' );
                            the_archive_description( '<div class="taxonomy-description">', '</div>' );
                        ?>
                    </header><!-- .page-header -->

                    <?php
                        echo '<div class="block1 block1_grid">';
                        echo '<div class="row">';

                    foreach ( $child_categories as $child ){ $count++;
                    include( locate_template( 'template-parts/content-grid.php' ) );

                    if ( $count % 2 == 0 ) {
                                echo '</div>';
                                echo '<div class="row">';
                    }
                    }
                        echo '</div>';
                        echo '</div>';
                    ?>

                <?php else : ?>

                    <?php get_template_part( 'template-parts/content', 'none' ); ?>

                <?php endif; ?>

                </main><!-- #main -->
            </div><!-- #primary -->

<?php get_sidebar(); ?>
<?php get_footer(); ?>
1
jrcollins

Bien, modifier cette fonction codilight_lite_custom_paginate() n’est pas une bonne option. Si elle est modifiée, cela pourrait causer des problèmes sur d’autres pages. Donc, si vous voulez paginer votre boucle archive.php de catégorie enfant foreach, supprimez la fonction codilight_lite_custom_paginate() et personnalisez votre page archive.php comme ci-dessous -

<?php
/**
 * Category Template: Custom
 */

get_header(); ?>
<div id="content" class="site-content container <?php echo codilight_lite_sidebar_position(); ?>">
    <div class="content-inside">
    <div id="primary" class="content-area">
        <main id="main" class="site-main" role="main">
            <?php
            $cat = get_category( get_query_var( 'cat' ) );
            $cat_id = $cat->cat_ID;
            $child_categories=get_categories(
                array(
                    'parent' => $cat_id,
                    // Uncomment the below line if you want empty category to appear on the list.
                    'hide_empty'   => 0
                )
            );

            // Variables for pagination
            $page = isset($_GET['page'])?intval($_GET['page']-1):0;
            $per_page_cat_num = 10;
            $number_of_pages = intval(count($child_categories)/$per_page_cat_num)+1;

            if (!empty($child_categories)) : $count = 0; ?>

                <header class="page-header">
                    <?php
                    the_archive_title( '<h1 class="page-title">', '</h1>' );
                    the_archive_description( '<div class="taxonomy-description">', '</div>' );
                    ?>
                </header><!-- .page-header -->
                <?php
                echo '<div class="block1 block1_grid">';
                echo '<div class="row">';

                foreach ( array_slice($child_categories, $page*$per_page_cat_num, $per_page_cat_num) as $child ){
                    $count++;
                    include( locate_template( 'loop-templates/content-grid.php' ) );

                    if ( $count % 2 == 0 ) {
                        echo '</div>';
                        echo '<div class="row">';
                    }
                }
                echo '</div>';
                echo '</div>';
                ?>

            <?php else : ?>

                <?php get_template_part( 'template-parts/content', 'none' ); ?>

            <?php endif; ?>

            <!-- Pagination HTML starts here. Style it how ever you want -->
            <ul id='paginator'>
                <?php
                for( $i=1; $i<$number_of_pages; $i++){?>
                    <li><a href='./?page=<?php echo $i ?>'><?php echo $i ?></a></li>
                <?php } ?>
            </ul>
            <!-- Pagination HTML ends here -->

        </main><!-- #main -->
    </div><!-- #primary -->

<?php get_sidebar(); ?>
<?php get_footer(); ?>

Ici, $per_page_cat_num contient le nombre de catégories enfant que vous souhaitez afficher par page. Je l'ai assigné par défaut à 10. Changez-le en tant que votre contexte.

1
CodeMascot