web-dev-qa-db-ger.com

Woocommerce erhält Produktpreis

Ich versuche, den Preis für die Produktvariation innerhalb der Dropdown-Liste für Variationen anzuzeigen . Ich versuche, das Standardverhalten zu ändern, wenn der Preis in einem Div angezeigt wird, wenn Sie eine Variation in der Dropdown-Liste auswählen.

Das Problem ist, dass ich nicht finden kann, wo das div den Preis für Variationen erhält. Ich habe alles Javascript durchsucht, konnte es aber nicht finden

Wenn ich benutze:

add_filter('woocommerce_variation_option_name' ,'add_price_to_dropdown');

function add_price_to_dropdown($name){

    global $product;
    return $name.' '.$product->get_price_html();
}

Ich bekomme nur einen minimalen Variationspreis für alle Optionen. Ich möchte den Preis für jede Variation erhalten. Irgendeine Ahnung?

17
chifliiiii

Hier ist der Code, nach dem Sie suchen

add_filter( 'woocommerce_variation_option_name', 'display_price_in_variation_option_name' );

function display_price_in_variation_option_name( $term ) {
    global $wpdb, $product;

    if ( empty( $term ) ) return $term;
    if ( empty( $product->id ) ) return $term;

    $result = $wpdb->get_col( "SELECT slug FROM {$wpdb->prefix}terms WHERE name = '$term'" );

    $term_slug = ( !empty( $result ) ) ? $result[0] : $term;

    $query = "SELECT postmeta.post_id AS product_id
                FROM {$wpdb->prefix}postmeta AS postmeta
                    LEFT JOIN {$wpdb->prefix}posts AS products ON ( products.ID = postmeta.post_id )
                WHERE postmeta.meta_key LIKE 'attribute_%'
                    AND postmeta.meta_value = '$term_slug'
                    AND products.post_parent = $product->id";

    $variation_id = $wpdb->get_col( $query );

    $parent = wp_get_post_parent_id( $variation_id[0] );

    if ( $parent > 0 ) {
         $_product = new WC_Product_Variation( $variation_id[0] );
         return $term . ' (' . wp_kses( woocommerce_price( $_product->get_price() ), array() ) . ')';
    }
    return $term;

}

Hoffe das wird nützlich sein.

38

Das könnte euch helfen. bei der Suche, wie mit der neuen WC-Version dasselbe zu tun ist:

global $woocommerce;
$product_variation = new WC_Product_Variation($_POST['variation_id']);
$regular_price = $product_variation->regular_price;

Ich verwende Ajax und übergebe die ID der Variante mit der Post-Methode.

12
numediaweb

Ich hatte genau die gleiche Frage wie das OP, aber mein Fall war etwas anders. Hier ist meine Lösung, die anderen helfen kann, die auch auf dieser Seite landen.

function get_product_variation_price($variation_id) {
    $product = new WC_Product_Variation($variation_id);
    return $product->product_custom_fields['_price'][0];
}

UPDATE für WooCommerce 2.2.10: .__ Der obige Code funktioniert nicht mit der aktuellen Version von WooCommerce. Dieser Code funktioniert und ist eine Überlegung wert, da er die WooCommerce-API verwendet, manuelle SQL-Abfragen vermeidet und ziemlich einfach ist ...

/*
 * You can find the $variation_id in the Product page (go to Product Data > Variations, and it is shown with a preceeding "#" character)
 */
function get_product_variation_price($variation_id) {

    global $woocommerce; // Don't forget this!
    $product = new WC_Product_Variation($variation_id);
    //return $product->product_custom_fields['_price'][0]; // No longer works in new version of WooCommerce
    //return $product->get_price_html(); // Works. Use this if you want the formatted price
    return $product->get_price(); // Works. Use this if you want unformatted price

}
4

Ich habe diesen Code bei Woocommerce verwendet, um meine Preisschwankungen anzuzeigen, und als ich auf Woocommerce 2.0 aktualisiert habe, bemerkte ich bei der Bearbeitung eines Produkts Datenbankfehler, die in wp-admin/error-log angezeigt wurden. Ich bin nicht sicher, ob die Fehler auch vor dem Update auf 2.0 aufgetreten sind, da ich Woocommerce vor dem Update nicht lange verwendet habe und bis heute das Fehlerprotokoll nicht überprüft habe. 

Die Preisschwankungen zeigten sich erwartungsgemäß, aber das Fehlerprotokoll füllte sich bei jedem Öffnen eines Produkts zur Bearbeitung mit dem folgenden Fehler. Bei jeder Variante, die mit dem von mir bearbeiteten Produkt zusammenhängt, ist ein Fehler aufgetreten. 

WordPress database error You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 8 for query SELECT postmeta.post_id AS product_id
            FROM wp_postmeta AS postmeta
                LEFT JOIN wp_posts AS products ON ( 

products.ID = postmeta.post_id )
            WHERE postmeta.meta_key LIKE 'attribute_%'
                AND postmeta.meta_value = '12'
                AND products.post_parent =  made by 

include('wp-admin/edit-form-advanced.php'), do_meta_boxes, call_user_func, woocommerce_product_data_box, do_action('woocommerce_product_write_panels'), call_user_func_array, variable_product_type_options, include('/plugins/woocommerce/admin/post-types/writepanels/variation-admin-html.php'), apply_filters('woocommerce_variation_option_name'), call_user_func_array, display_price_in_variation_option_name

Ich habe die folgende Zeile in Ihrem Code geändert: AND products.post_parent = $ product-> id "; Dazu AND products.post_parent = '$ product-> id'";

und jetzt keine fehler mehr. Das Fehlerprotokoll bleibt schön und leer.

Ich wollte nur teilen, falls jemand anderes auf das Problem stieß.

4
Janine

Meine Meinung zu diesem Thema, das im neuesten Woocommerce arbeitet: 3.2.1 (Oktober 2017) Der Preis wird neben der Variation im Dropdown angezeigt.

add_filter( 'woocommerce_variation_option_name', 'display_price_in_variation_option_name' );

function display_price_in_variation_option_name( $term ) {
    global $wpdb, $product;

    $result = $wpdb->get_col( "SELECT slug FROM {$wpdb->prefix}terms WHERE name = '$term'" );

    $term_slug = ( !empty( $result ) ) ? $result[0] : $term;


    $query = "SELECT postmeta.post_id AS product_id
                FROM {$wpdb->prefix}postmeta AS postmeta
                    LEFT JOIN {$wpdb->prefix}posts AS products ON ( products.ID = postmeta.post_id )
                WHERE postmeta.meta_key LIKE 'attribute_%'
                    AND postmeta.meta_value = '$term_slug'
                    AND products.post_parent = $product->id";

    $variation_id = $wpdb->get_col( $query );

    $parent = wp_get_post_parent_id( $variation_id[0] );

    if ( $parent > 0 ) {
        $_product = new WC_Product_Variation( $variation_id[0] );
        $_currency = get_woocommerce_currency_symbol();
        return $term . ' ('.$_currency.' '. $_product->get_price()  . ')';
    }
    return $term;

}

Hoffe, das hilft jemandem .. /. Fügen Sie dies in Ihr untergeordnetes Thema functions.php ein

0
Cynthia Lara