zurück

Duplikate bei Paginierung im Bricks Builder mit FacetWP und WP Grid Builder beheben

Das Problem verstehen

Bei der Nutzung des Bricks-Builders kann es vorkommen, dass Inhalte doppelt in einem Loop erscheinen, besonders wenn die Sortierung auf “menu_order” eingestellt ist. Dieses Problem tritt oft in Verbindung mit der “Mehr laden” oder “Durchblättern” Funktion auf. Lass uns genauer betrachten, warum das passiert und wie wir es beheben können.

Die Ursache

Wenn der Sortierwert für mehrere Beiträge gleich ist (zum Beispiel 0), kann die Datenbank keine zuverlässig identische Reihenfolge festlegen. Bei jeder Abfrage der Beiträge entsteht quasi eine zufällige Reihenfolge der Beiträge mit gleichem Wert. Dadurch können auf Seite eins und zwei deines Loops auch gleiche Inhalte auftauchen.

FacetWP hat diesen Fehler bereits hier dokumentiert: https://facetwp.com/how-to-prevent-duplicate-results/.
Der Support des WP Grid Builders hat uns dieses Verhalten ebenfalls bestätigt.

Die Lösung: Einführung einer sekundären Sortierung

Um dieses Problem zu lösen, müssen wir ein zweites Attribut für die Sortierung hinzufügen. Hier ist ein Beispiel, wie das funktioniert:

Sortierung nach menu_order:
– Post “a” menu_order = 1
– Post “c” menu_order = 2
– Post “b” menu_order = 2
Beiträge “C” und “B” könnten zufällig sortiert werden.

Sortierung nach menu_order UND title:
– Post “a” menu_order = 1
– Post “b” menu_order = 2
– Post “c” menu_order = 2
Jetzt wird bei gleicher menu_order nach dem Titel sortiert. Beitrag “B” wird also immer vor “C” erscheinen.

Mehrere Attribute im Bricksbuilder nicht möglich

Leider erlaubt die Oberfläche des Bricks-Builders nicht, mehrere Attribute für die Sortierung festzulegen. Wir müssen daher etwas eigenen Code verwenden:

/**
 * If the menu_order attribute is used for sorting and the value is the same for multiple posts,
 * the order of the posts is not deterministic and can lead to duplicates when paginating.
 * This function fixes this by adding a secondary "title" attribute.
 */
add_filter('bricks/posts/query_vars', function(array $query_vars, array $settings, string $element_id) {
    if (!empty($query_vars['orderby']) && $query_vars['orderby'] === 'menu_order') {
        // Modify the 'orderby' parameter to include another parameter
        $query_vars['orderby'] = array(
            // Use the existing 'order' if set, otherwise default to "ASC" for menu_order
            'menu_order' => $query_vars['order'] ?? "ASC",
            // Use the same order for title, ensuring consistent sorting
            'title' => $query_vars['order'] ?? "ASC" 
        );
    }
    return $query_vars;
}, 10, 3);

Füge diesen Code in deine functions.php Datei ein. Er modifiziert die WP_Query-Argumente für alle Loops, bei denen nach dem menu_order-Attribut sortiert wird, und fügt den Titel als sekundäres Sortierattribut hinzu.

Der Filter ist in der Bricks Academy dokumentiert. Er kann für diverse Anpassungen genutzt werden.

Durch die Implementierung dieser Lösung stellst du sicher, dass die Paginierung in deiner mit Bricks erstellten WordPress-Seite konsistent und ohne Duplikate funktioniert.

Hinterlassen Sie den ersten Kommentar

Noch nicht genug? Dazu passend:

Legen wir los!