在自定义查询中覆盖产品价格

时间:2014-05-12 20:29:57

标签: php wordpress woocommerce

我知道这不是一个与woocommerce相关的网站,我试过官方论坛,但在3天内没有回复。我花了一天或更长时间,所以我希望你能帮忙。

我为这些产品创建了一个自定义wp_query。这些产品具有自定义字段(custom_price)。我想用自定义字段的值覆盖查询中的价格。

我在这里看到了关于这个的问题,但我在php / wordpress中非常新。我非常感谢你的帮助。

我的查询:

<?php woocommerce_product_loop_start(); ?>
        <?php
            if(is_front_page()){
                $args = array(
                'post_type' => 'product',
                'posts_per_page' => 6,
                'meta_key' => '_featured',
                'meta_value' => 'yes'

                );
                $query = new WP_Query( $args );
                if ( $query->have_posts() ) {
                    while ( $query->have_posts() ) {
                        $query->the_post();
                        wc_get_template_part( 'content', 'product' );
                    }
                }
                wp_reset_query();
            }
        ?>
        <?php woocommerce_product_loop_end(); ?>

1 个答案:

答案 0 :(得分:0)

如果您只想更改显示的价格,则可以实施过滤器woocommerce_price_htmlwoocommerce_sale_price_htmlwoocommerce_cart_item_price_html。这将导致显示的价格无论您想要什么,但用于计算税,运费,总数等的购物车中的实际价格将基于&#34;真实的&#34;价钱。

// the HTML that is displayed on the product pages
function my_price_html( $html, $_product ) {
    // if this is a variation we want the variation ID probably?
    $id = isset($_product->variation_id) ? $_product->variation_id : $_product->id;
    $custom_price = get_post_meta( $id, 'custom_price', true );
    $custom_price_html = "<b>$custom_price</b>"; // just an example of HTML
    return $custom_price_html;
}
add_filter( 'woocommerce_price_html', 'my_price_html', 10, 2 );
add_filter( 'woocommerce_sale_price_html', 'my_price_html', 10, 2 );

// the HTML that is displayed on the cart
function my_cart_item_price_html( $html, $cart_item, $cart_item_key ) {
    $id = $cart_item['data']->id;
    $custom_price = get_post_meta( $id, 'custom_price', true );
    $custom_price_html = "<b>$custom_price</b>"; // just an example of HTML
    return $custom_price_html;
}
add_filter( 'woocommerce_cart_item_price_html', 'my_cart_item_price_html', 10, 3 );

如果您想要实际影响商品价格,则需要实施其他过滤器/操作,以上只会影响显示。更好的选择可能是实现save_postupdate_post_meta的操作,以便在自定义字段值更改时更新WooCommerce产品价格(假设您使用codex更新此值)。