Woocommerce – Ändern der Reihenfolge der Upsell-Produkte

Probleme mit der Website eines Kunden haben.

Wir haben ein Produkt mit vier Upsell-Produkten verknüpft, und sie werden auf der Website angezeigt. Das einzige Problem ist, dass diese Produkte auf der Seite in scheinbar zufälliger Reihenfolge aufgelistet sind (IE, keine Korrelation zwischen IDs, Postdaten, Namen usw.).

Was wir wollen, ist, dass diese Produkte angezeigt werden, wie sie im Backend eingegeben werden.

Dies ist derzeit der Code, den wir derzeit erstellen (soweit ich weiß, ist dies Vanilla WC, mit einem Zusatz, den ich hervorheben werde.)

get_upsells(); if ( sizeof( $upsells ) == 0 ) return; $meta_query = WC()->query->get_meta_query(); $args = array( 'post_type' => 'product', 'ignore_sticky_posts' => 1, 'no_found_rows' => 1, 'posts_per_page' => $posts_per_page, 'orderby' => 'post__in', 'order' => 'asc', 'post__in' => $upsells, 'post__not_in' => array( $product->id ), 'meta_query' => $meta_query ); $products = new WP_Query( $args ); $woocommerce_loop['columns'] = $columns; if ( $products->have_posts() ) : ?> 

have_posts() ) : $products->the_post(); ?>
<?php endif; wp_reset_postdata();

Es scheint, dass die Abfrage, die von dieser Abfrage ausgeführt wird, falsch ist. (Ich bin nicht sehr versiert in den Wegen von SQL, noch in der Struktur der WP-database)

Diese Argumente erzeugen derzeit diese SQL-Abfrage

 $args = array( 'post_type' => 'product', 'ignore_sticky_posts' => 1, 'no_found_rows' => 1, 'posts_per_page' => $posts_per_page, 'orderby' => 'post__in', 'order' => 'asc', 'post__in' => $upsells, 'post__not_in' => array( $product->id ), 'meta_query' => $meta_query ); 

SELECT wp_posts.ID FROM wp_posts INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) WHERE 1=1 AND wp_posts.ID IN (8487,8522,8478,11028) AND ( ( wp_postmeta.meta_key = '_visibility' AND wp_postmeta.meta_value IN ('visible','catalog') ) ) AND wp_posts.post_type = 'product' AND (wp_posts.post_status = 'publish') GROUP BY wp_posts.ID ORDER BY wp_posts.menu_order, FIELD( wp_posts.ID, 8487,8522,8478,11028 ) LIMIT 0, 100

Bis jetzt versucht

  • Ändern von 'orderby' zu 'post__in' und 'menu_order'
  • Ändern der 'order' in 'asc' , 'desc' und vollständiges Entfernen
  • Erstellen eines Arrays von 'post__in' dieses neuen Arrays an 'post__in'
  • Entfernen von 'post__not_in'

Ich weiß, dass dies außerhalb des Themas ist, über den Woocommerce-Tag, aber ich hoffe, das coreproblem ist mit der WP-Abfrage (ich kann mir nicht vorstellen, dass es etwas WC-spezifisch ist). Wenn nicht, bin ich mehr als glücklich, umzuziehen.

Prost!

Solutions Collecting From Web of "Woocommerce – Ändern der Reihenfolge der Upsell-Produkte"

Zu lange für einen Kommentar, sooo in meinem super einfachen Test up-sells.php auf eine frische WC-Installation mit einem WP_Query zu überschreiben, kann ich die orderby und Bestellparameter ändern und die Produkte in der Reihenfolge meiner Reihe von Produkt-IDs anzeigen:

 $meta_query = WC()->query->get_meta_query(); $my_upsells = [171, 170, 172]; $args = array( 'post_type' => 'product', 'ignore_sticky_posts' => 1, 'no_found_rows' => 1, 'posts_per_page' => $posts_per_page, 'orderby' => 'post__in', 'order' => 'asc', 'post__in' => $my_upsells, 'meta_query' => $meta_query ); $products = new WP_Query( $args ); while( $products->have_posts() ) : $products->the_post(); echo get_the_title() . "
"; endwhile;

Eine Sache zu beachten, WordPress sagt, dass Sie nicht post__in und post__not_in in der gleichen Abfrage kombinieren können, und Sie sollten es sowieso nicht benötigen, wenn Ihr $ upsells-Array bereits die gewünschten IDs hat.

Würde es Ihnen etwas ausmachen, die gesamte Vorlagendatei, in der Sie arbeiten, zu teilen oder zumindest mehr darüber, wie Sie die Ergebnisse dieser Abfrage ausgeben? Es hört sich nicht so an, als würde die Abfrage, an der Sie gerade arbeiten, Ihre Ausgabe beeinflussen, so dass ich denke, dass Sie dort eine Art Trennung haben.

Edit: Es scheint, dass Sie eine sehr alte Version von woocommerce @ v1.6.4 verwenden, was bedeutet, dass Ihr Woocommerce seit 2012 nicht aktualisiert wurde! Die function get_upsells (), die du hinzugefügt hast, ist tatsächlich eine Woocommerce-function, und sie ist in Woocommerce 3 veraltet, wofür ich gerade teste. Ich würde dringend vorschlagen, einige Updates zu machen, bevor Sie weiterhin versuchen, etwas zu beheben.

Ich kann Ihnen nicht weiterhelfen, bis wir wissen, dass Ihre Probleme nicht durch Ihre veraltete Version von Woocommerce und möglicherweise eine veraltete Version von WordPress verursacht werden.