Mehrere Filter für wp_get_archive

Ich muss benutzerdefinierte Post-Archive auf einer Seite im folgenden Format anzeigen:

  • Monatlich – Gruppiert nach Monat für das aktuelle Jahr.
  • Jährlich – gruppiert nach Jahr und Monat für alle vorherigen Jahre

Ich habe also zwei functionen, die nacheinander aufgerufen werden sollten:

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 '
    '; wp_get_archives( $current_year_args ); echo '
'; } 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 '
    '; wp_get_archives( $previous_years_args ); echo '
'; }

Dann muss ich es filtern, so dass die erste function nur Archive für das aktuelle Jahr anzeigt und die zweite function nicht das aktuelle Jahr anzeigt.

So könnte es gemacht worden sein:

 add_filter( 'getarchives_where', 'filter_monthly_archives', 10, 2 ); function filter_monthly_archives($text, $r) { return $text . " AND YEAR(post_date) = YEAR (CURRENT_DATE)"; } 

Und für das jährliche Archiv ersetzen wir " AND YEAR(post_date) = YEAR (CURRENT_DATE)" with " AND YEAR(post_date) < YEAR (CURRENT_DATE)"

Der Filter wird jedoch global angewendet, und wenn ich ihn anwende, wirkt sich dies auf beide Filter aus.

Gibt es eine Möglichkeit, dies zu umgehen (einen bestimmten Filter für einen bestimmten wp_get_archives-Aufruf anzuwenden) oder eine andere Möglichkeit, wie oben beschrieben die Archivausgabe zu erreichen?

Solutions Collecting From Web of "Mehrere Filter für wp_get_archive"

Nutzen Sie den benutzerdefinierten Parameter, nennen wpse__current_year ihn wpse__current_year , der zwei Werte akzeptiert, true ( schließt das aktuelle Jahr ein ) und false ( schließt das aktuelle Jahr aus ). Lasst uns das übernehmen

 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 '
    '; wp_get_archives( $current_year_args ); echo '
'; } 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 '
    '; wp_get_archives( $previous_years_args ); echo '
'; }

Wir können nun unseren Filter entsprechend modifizieren

 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; }