J'ai besoin d'afficher des archives d'articles personnalisées sur une page au format suivant:
J'ai donc deux fonctions à faire, qui sont censées être appelées à la suite:
function show_monthly_archive( $post_type ) {
$current_year_args = array(
'type' => 'monthly',
'limit' => '12',
'format' => 'html',
'before' => '',
'after' => '',
'show_post_count' => false,
'echo' => 1,
'order' => 'DESC',
'post_type' => $post_type
);
echo '<ul>';
wp_get_archives( $current_year_args );
echo '</ul>';
}
function show_yearly_archive( $post_type ) {
$previous_years_args = array(
'type' => 'yearly',
'limit' => '',
'format' => 'html',
'before' => '',
'after' => '',
'show_post_count' => false,
'echo' => 1,
'order' => 'DESC',
'post_type' => $post_type
);
echo '<ul>';
wp_get_archives( $previous_years_args );
echo '</ul>';
}
Ensuite, je dois le filtrer de sorte que la première fonction n’affiche que les archives de l’année en cours et que la seconde n’affiche pas l’année en cours.
La façon dont cela aurait pu être fait:
add_filter( 'getarchives_where', 'filter_monthly_archives', 10, 2 );
function filter_monthly_archives($text, $r) {
return $text . " AND YEAR(post_date) = YEAR (CURRENT_DATE)";
}
Et pour les archives annuelles, nous remplaçons " AND YEAR(post_date) = YEAR (CURRENT_DATE)" with " AND YEAR(post_date) < YEAR (CURRENT_DATE)"
Cependant, le filtre s'applique globalement et, lorsque je l'applique, il affecte les deux filtres.
Existe-t-il un moyen de contourner ce problème (appliquer un filtre spécifique pour un appel wp_get_archives spécifique) ou un autre moyen d'obtenir la sortie des archives comme décrit ci-dessus?
Utiliser un paramètre personnalisé, appelons-le wpse__current_year
, qui acceptera deux valeurs, true
( inclut l’année en cours ) et false
( exclut l'année en cours ). Permet d'intégrer cela
function show_monthly_archive( $post_type )
{
$current_year_args = array(
'type' => 'monthly',
'limit' => '12',
'format' => 'html',
'before' => '',
'after' => '',
'show_post_count' => false,
'echo' => 1,
'order' => 'DESC',
'post_type' => $post_type,
'wpse__current_year' => true
);
echo '<ul>';
wp_get_archives( $current_year_args );
echo '</ul>';
}
function show_yearly_archive( $post_type )
{
$previous_years_args = array(
'type' => 'yearly',
'limit' => '',
'format' => 'html',
'before' => '',
'after' => '',
'show_post_count' => false,
'echo' => 1,
'order' => 'DESC',
'post_type' => $post_type,
'wpse__current_year' => false
);
echo '<ul>';
wp_get_archives( $previous_years_args );
echo '</ul>';
}
Nous pouvons maintenant modifier notre filtre en conséquence
add_filter( 'getarchives_where', 'filter_monthly_archives', 10, 2 );
function filter_monthly_archives( $text, $r )
{
// Check if our custom parameter is set, if not, bail early
if ( !isset( $r['wpse__current_year'] ) )
return $text;
// If wpse__current_year is set to true
if ( true === $r['wpse__current_year'] )
return $text . " AND YEAR(post_date) = YEAR (CURRENT_DATE)";
// If wpse__current_year is set to false
if ( false === $r['wpse__current_year'] )
return $text . " AND YEAR(post_date) < YEAR (CURRENT_DATE)";
return $text;
}