Support » WooCommerce » Sortierung nach zwei Custom Fields (inkl. meta_value_num)

  • Gelöst blauemango

    (@blauemango)


    Hallo,

    ich möchte zunächst alle Produkte aufführen, zu denen ein besonderes Merkmal (Tipp < Yes/No) gesetzt ist. Das Merkmal pflege ich über ein Advanced Custom Field. Als zweites sollen alle Produkte nach der SKU sortiert werden.

    Ziel wäre also:
    [Produkt 1 < Tipp = ja, SKU = 123]
    [Produkt 3 < Tipp = ja, SKU = 125]
    [Produkt 4 < Tipp = ja, SKU = 126]
    [Produkt 2 < Tipp = nein, SKU = 124]

    Ich modifiziere dazu den hook „woocommerce_product_query“.
    Folgendes funktioniert:
    ————————-
    add_action( ‚woocommerce_product_query‘, ‚mb_product_query‘ );
    function mb_product_query( $q ) {
    $q->set( ‚orderby‘, ‚meta_value_num‘ );
    $q->set( ‚meta_key‘, ‚tipp‘ );
    $q->set( ‚order‘, ‚DESC‘ );
    }

    Es funktioniert auch:
    ————————-
    $q->set( ‚orderby‘, ‚meta_value‘ );
    $q->set( ‚meta_key‘, ‚_sku‘ );
    $q->set( ‚order‘, ‚ASC‘ );

    Es funktioniert nicht:
    ————————-
    $q->set(‚meta_query‘, array(
    ‚_sku‘ => array(
    ‚key‘ => ‚_sku‘,
    ),
    ‚tipp‘ => array(
    ‚key‘ => ‚tipp‘,
    )
    ));
    $q->set(‚orderby‘, array(
    ‚tipp‘ => ‚DESC‘,
    ‚_sku‘ => ‚ASC‘
    )
    );

    Hat jemand evtl. einen Tipp für mich?
    Danke!

Ansicht von 1 Antwort (von insgesamt 1)
  • Hab’s.

    Das $q->set( ‚orderby‘, ‚meta_value_num‘ ); speilt keine Rolle, wenn man es anders anlegt:
    —————-
    add_action( ‚woocommerce_product_query‘, ‚mb_product_query‘ );
    function mb_product_query( $q ) {
    if ( ! is_admin() && is_woocommerce() && ( is_shop() || is_product_category() || is_product_tag() ) ) {
    $meta_query = $q->get( ‚meta_query‘ );
    $meta_query[] = array(
    ‚tipp‘ => array(
    ‚key‘ => ‚tipp‘
    ),
    ’sku‘ => array(
    ‚key‘ => ‚_sku‘
    )
    );

    if ( isset( $_GET[„orderby“] ) ) {
    if ( $_GET[„orderby“] == „price“ ) {
    $q->set( ‚orderby‘, ‚meta_value_num‘ );
    $q->set( ‚meta_key‘, ‚_price‘ );
    } else if ( $_GET[„orderby“] == „price-desc“ ) {
    $q->set( ‚orderby‘, ‚meta_value_num‘ );
    $q->set( ‚meta_key‘, ‚_price‘ );
    $q->set( ‚order‘, ‚DESC‘ );
    }
    } else {
    $q->set( ‚orderby‘, array(
    ‚tipp‘ => ‚DESC‘,
    ’sku‘ => ‚ASC‘,
    ) );
    }
    $q->set( ‚meta_query‘, $meta_query );
    }
    }

Ansicht von 1 Antwort (von insgesamt 1)
  • Das Thema „Sortierung nach zwei Custom Fields (inkl. meta_value_num)“ ist für neue Antworten geschlossen.