Ich verwende WordPress und muss auf der Suchseite die Anzahl der Beiträge innerhalb der Kategorie erfassen und neben dem Namen anzeigen. Wie so
Kat. 1 (3) Kat. 2 (1) Kat. 3 (18) ….
Derzeit verwende ich die get_categories()
Funktionen, die Ihnen ein Objekt geben und mit dem Sie die Zählung erfassen $cat->count()
. Dies erfasst die Gesamtzahl der Posts innerhalb des Begriffs, aber ich muss diese Anzahl nur aus dem Post innerhalb der aktuellen Abfrage abrufen. ich benutze pre_get_posts
um die Abfrage zu aktualisieren. Kennt jemand eine Möglichkeit, dies zu tun?
Hier ist mein aktueller Codeblock
foreach ( get_categories() as $cat ) {
if ( $cat->parent === 0 ) {
$checked = ( in_array( $cat->slug, $check ) ) ? 'checked' : '';
printf( '<input id="%1$s" %4$s type="checkbox" name="category[%1$s]"><label for="%1$s" >%2$s ( %3$d )</label><br>',
$cat->slug,
$cat->name,
$cat->count,
$checked
);
}
}
Hier ist mein pre_get_posts
Aktion:
add_action( 'pre_get_posts', 'breed_search_query' );
function breed_search_query( $query ) {
$cats = ( isset( $_GET['category'] ) ) ? implode( ',', array_keys( $_GET['category'] ) ) : null;
$search = ( isset( $_GET['s'] ) ) ? sanitize_text_field( $_GET['s'] ) : null;
if ( ! is_admin() && $query->is_main_query() && is_search() ) {
$query->set( 'post_type', 'post' );
$query->set( 'posts_per_page', 8 );
$query->set( 's', $search );
$query->set( 'category_name', $cats );
}
}
Schöne und interessante Frage muss man sagen. Leider wirst du das nicht zum Laufen bekommen get_categories
also brauchen Sie hier einen anderen Ansatz.
So werden wir es machen:
-
Erstellen Sie eine sehr schlanke benutzerdefinierte Abfrage, um alle Beitrags-IDs von allen Beiträgen zu erhalten, die der Abfrage entsprechen
-
Holen Sie sich alle Kategorien, die an einen Beitrag angehängt sind
-
Durchlaufen Sie alle Posts und die Kategorien innerhalb der Posts und erstellen Sie ein Array mit den Kategorienamen als Schlüssel und Post-IDs als Werte
-
Durchlaufen Sie dieses neue Array und zeigen Sie den Kategorienamen an und zählen und zeigen Sie auch die Anzahl der Beiträge für diesen bestimmten Schlüssel (Kategorie) an.
DER CODE:
(HINWEIS: Der folgende Code ist ungetestet und benötigt aufgrund der neuen Array-Syntax mindestens PHP 5.4+ ([]
))
$cats = ( isset( $_GET['category'] ) ) ? implode( ',', array_keys( $_GET['category'] ) ) : null;
$search = ( isset( $_GET['s'] ) ) ? sanitize_text_field( $_GET['s'] ) : null;
$args = [
'post_type' => 'post',
'nopaging' => true, // Gets all posts
's' => $search,
'category_name' => $cats,
'fields' => 'ids', // Makes the query extremely lean, excellent for performance, only get post ID's
];
$q = get_posts( $args );
// Define our $category_array which will hold the category name/post ID's array
$category_array = [];
// Define our $category_info array which will hold the category name as key and the object as value
$category_info = [];
foreach ( $q as $post ) {
// Get the categories attached to a post
$categories = get_the_category( $post );
foreach ( $categories as $category ) {
// Create our array which will hold the category name as key and post ID's as values
$category_array[$category->name][] = $post;
// Create an array to hold the category objects. Use names as keys and objects as values
$category_info[$category->name] = $category;
} // endforeach $categories
} // endforeach $wp_query->posts
wp_reset_postdata();
// Sort the array keys alphabetical. You can change or remove this as necessary
ksort( $category_array );
foreach ( $category_array as $k=>$v ) {
$category_slug = $category_info[$k]->slug;
$category_parent = $category_info[$k]->parent;
$checked = ( in_array( $category_slug, $check ) ) ? 'checked' : ''; // Just make sure that $check is defined somewhere
// Build our string
printf ( '<input id="%1$s" %4$s type="checkbox" name="category[%1$s]"><label for="%1$s" >%2$s ( %3$d )</label><br>', // I have not modified anything in this line
$category_slug, // Holds the category slug
$k, // Holds the category name
count( $v ), // Counts and return the post count
$checked
);
} // endforeach $category_array
Meine Antwort wird nicht funktionieren, ich muss ein paar Anpassungen daran vornehmen. Das kann ich jetzt leider nicht. Werde das etwas später untersuchen. Werde euch auf dem Laufenden halten. Fügen Sie in der Zwischenzeit Ihre hinzu
pre_get_posts
Aktion, nach der Sie die Suchanfrage filtern, das ist wichtig für meine Antwort– Pieter Goosen
22. Juli 2015 um 7:19 Uhr
Völlig verstehen. Danke für deinen Beitrag.
– Juan Rangel
22. Juli 2015 um 16:44 Uhr
Ich bin damit beschäftigt, alles zu sortieren. Ich warte nur auf deine
pre_get_posts
Aktion– Pieter Goosen
22. Juli 2015 um 16:51 Uhr
Habe gerade meine Frage aktualisiert. Danke für Ihre Hilfe.
– Juan Rangel
22. Juli 2015 um 16:59 Uhr
OK, ich werde das jetzt einbauen, um die Anzahl zu korrigieren 😉
– Pieter Goosen
22. Juli 2015 um 17:00 Uhr