2016-05-10 7 views
1

Gibt es eine Möglichkeit, den WooCommerce-Produkt-Shortcode zu modifizieren, um nach einer Liste von Produkt-Skus zu bestellen?WooCommerce-Produkte shortcode order von sku list

Eine Suchmaschine senden Sie einen Beitrag auf die Seite mit einer Liste von SKUs. Die Seite sollte die Produkte in der gleichen Reihenfolge anzeigen wie der http-Post.

Beispiel PHP und MySQL select (der Code wie folgt in meinem alten Shop-System gearbeitet, wo ich SQL-Syntax verwenden):

$_POST['skus'] = "51,57,34,12,111"; 
$skus = $_POST['skus']; 

select * from products where sku in ('$skus') order by FIELD(sku,'$skus); 

Wie kann ich einen „orderby“ tun wie das Beispiel mit Produkten Shortcode aus Woocommerce oder gibt es einen besseren Weg, das mit Woocommerce zu tun?

Danke für jede Antwort.

+0

ohne Prüfung dieser, kann ich nicht 100% sicher sein, kann es möglich sein, die 'FIELD passieren (sku , $ skus) 'als Parameter' order' im Shortcode. d. h. '[Produkte skus =" foo, bar, baz "orderby =" FELD (sku, 'foo, bar, baz') "" = "asc"] ' – Gavin

+0

Ich habe es schon versucht - leider funktioniert es nicht. – Thomas2016

+0

Ich dachte, es könnte ein langer Schuss sein wie. Die einzige Alternative, die ich mir vorstellen kann, ist, das Shortcode-Ergebnis manuell zu überschreiben und die Ergebnisse basierend auf den bereitgestellten ids/skus zu sortieren. – Gavin

Antwort

0

Mit Hilfe von Gavin und den Code von https://wordpress.stackexchange.com/a/67830/43362 ich diese Lösung gefunden:

function wpse67823_orderby_post_in($orderby, $query){ 

    //Remove it so it doesn't effect future queries 
    remove_filter(current_filter(), __FUNCTION__); 

    $post__in = $_POST['skus']; 

    $post__in = str_replace(',','\',\'',$post__in); 

    return "FIELD(CAST(mt2.meta_value AS CHAR), '$post__in')"; 
    } 

    //Add filter and perform query 
    add_filter('posts_orderby','wpse67823_orderby_post_in',10,2); 

    echo do_shortcode('[products skus="'.$skus.'" orderby="sku"]'); 

    remove_filter('posts_orderby','wpse67823_orderby_post_in',10,2); 
Verwandte Themen