it-swarm.com.de

Sollte category.php und The Loop verwendet werden, wenn die Abfrage anpassbar sein muss?

Ich möchte, dass der Benutzer die Beiträge sortieren und filtern kann, wenn er eine Kategorie anzeigt. Die richtige Art, eine Kategorieseite zu erstellen, ist die Verwendung von category (- {id}/{slug}). Php, aber wenn Sie dies verwenden, wird automatisch eine Schleife erstellt, unabhängig davon, nach welcher Methode ich die Beiträge sortiere und filtere eine andere Schleife.

In diesem Fall sollte ich eine Datei ohne den Namen category (- {id}/{slug}). Php erstellen und sie irgendwie mit den Kategorien verknüpfen, oder es wäre besser, einfach zu ignorieren, dass zwei Schleifen erstellt werden, egal was und einer von ihnen wird nicht verwendet?

Auch in diesem Fall wird die Schleife erneut verwendet, aber mit der geänderten Abfrage effizienter als get_posts ()?

6
Nadroev

Ja, die Schleife und eine bestimmte Kategorieschablone sollten verwendet werden, auch wenn Sie die Abfrage anpassen möchten. Warum?:

  1. Auch mit einer benutzerdefinierten Seite wird die Hauptabfrage ausgeführt. Mit einer benutzerdefinierten Seite umgehen Sie die Hauptabfrage also nicht wirklich, sondern ersetzen sie nur durch eine andere Abfrage.

  2. Die Hauptabfrage selbst ist anpassbar.

  3. Wenn Sie vom Standardverhalten von WordPress abweichen, wird es für Sie schwierig, dieses Verhalten in Zukunft beizubehalten, insbesondere für andere Entwickler, falls in Zukunft jemand anderes Ihre Arbeit übernimmt.

So ändern Sie die Hauptabfrage:

Glücklicherweise ist WordPress extrem anpassbar, dh die Hauptabfrage (die Schleife) ist auch anpassbar. Sie können den pre_get_posts Aktions-Hook oder query_posts() -Funktion verwenden, um die Hauptabfrage zu ändern. Es wird jedoch empfohlen, den Hook pre_get_posts zu verwenden.

Angenommen, Sie möchten die Reihenfolge der Beiträge in einer Kategorie basierend auf der aufsteigenden Reihenfolge des Datums ändern. Dazu können Sie den folgenden CODE in der functions.php-Datei Ihres Themas verwenden:

add_action( 'pre_get_posts', 'wpse258109_customize_category_query' );
function wpse258109_customize_category_query( $query ) {
    if( ! is_admin() && $query->is_main_query()  && $query->is_category( 'your-category-slug' ) ) {
        // get the orderby value from where ever you want and set in the main query
        $query->set( 'orderby', array( 'date' => 'ASC' ) );
    }
}

Dieser CODE ändert das Standardverhalten der Hauptabfrage und Ihre Kategoriebeiträge für die Archivseite your-category-slug werden in aufsteigender Reihenfolge geladen. Natürlich können Sie diese Hauptabfrage wie jede andere benutzerdefinierte Abfrage mit der Klasse WP_Query ändern.

5
Fayaz

Erstens: Großartig, dass Sie über eine verschwendete Abfrage nachdenken! :)

Zweitens: WP führt immer eine Hauptabfrage aus, egal was Sie tun. Sie können diese Abfrage jedoch ändern, anstatt sie zu ignorieren und eine sekundäre Schleife zu erstellen. Dies kann mit dem pre get posts hook geschehen.

2
kraftner