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(); ?>
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.