zurück

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

Bei der Nutzung des Bricksbuilders kann es vorkommen, dass Inhalte doppelt in einem Loop erscheinen, wenn die Sortierung auf “menu_order” gestellt ist.

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

Wenn in einer Auflistung doppelte Beiträge erscheinen, oft in Verbindung mit der “Mehr Laden” bzw. “Durchblättern” Funktion, liegt dies fast immer an der Sortierreihenfolge der Beiträge, die durch das “orderby”-Argument der Abfrage bestimmt wird. Der Bricksbuilder erlaubt es nur einen einzigen Wert festzulegen

Ist der Wert für mehrere Posts gleich, ist die Datenbank nicht in der Lage eine verlässlich gleiche Reihenfolge festzulegen. Bei jeder Abfrage der Posts entsteht quasi eine zufällige Reihenfolge der Posts mit gleichem Wert. Dadurch können auf Seite eins und zwei deines Loops auch gleiche Inhalte auftauchen.

Die Lösung ist ein zweites Attribut nach dem Sortiert werden soll

Es gibt mehrere Szenarien, die dies verursachen können, aber kurz gesagt besteht die Lösung darin, eine sekundäre, ausweichende Sortierreihenfolge hinzuzufügen. Es bietet sich an zum Beispiel den Titel alls Fallback zu nutzen, wenn der ursprüngliche Wert gleich ist. Beispiel:

Sortierung nach menu_order:
– Post “a” menu_order = 1
– Post “c” menu_order = 2
– Post “b” menu_order = 2
Problematisch ist hier, das post “c” und “b” zufällig sortiert werden können.

Sortierung nach menu_order und title:
– Post “a” menu_order = 1
– Post “b” menu_order = 2
– Post “c” menu_order = 2
Bei gleicher menu_order wird nach dem Titel sortiert. Post “b” wird also immer an zweiter Stelle auftauchen.

Mehrere Attribute im Bricksbuilder nicht möglich

Die Oberfläche des Bricksbuilders erlaubt es leider nicht, mehrere Attribute für die Sortierung festzulegen. Wir kommen also nicht drumherum, etwas eigenen Code zu nutzen:

/**
 * If the menu_order attribute us 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') {
        $query_vars['orderby'] = 'menu_order title';
    }
    return $query_vars;
}, 10, 3);

Dieser Code kann in die functions.php eingefügt werden. Er verändert die WP_Query Argumente für alle Loops bei denen nach dem menu_order Attribut sortiert wird und fügt ein weiteres Attribut, nämlich den Titel hinzu.

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

Hinterlassen Sie den ersten Kommentar

Legen wir los!