根据自定义字段对特定产品进行折扣

时间:2019-05-23 14:14:35

标签: php wordpress woocommerce

我希望在woocommerce eshop中对在2016年之后发布的特定产品提供11%的折扣。

此字段(pub_year)是wpdb中名称为$book->author()->count()的自定义表中的自定义字段。

我尝试了一些代码(这是我所做研究的混合代码),但没有成功。

我尝试过的代码:

fancyplugin_wc_product_info

2 个答案:

答案 0 :(得分:0)

如果我是您,我将执行一个程序来更新每个在2016年之后发布的注册簿,直到最终日期范围,因为如果您仅从2016年开始使用它,则会更新所有产品。

例如:从2016年到2017年。

为什么我要构建一个过程,而不只是在数据库中执行更新?

也许将来,您需要执行相同的操作,然后您已经具有执行此操作的过程。

为了安全起见,您可以创建一个备份表,以保存旧价格的产品和新价格。因为如果您需要在价格上进行回滚,那么就可以找到它!

答案 1 :(得分:0)

您使用WPDB类的SQL查询不完整且错误……由于表wp_fancyplugin_wc_product_info中产品ID的列为post_id,因此您需要为其查询当前产品ID……请尝试以下操作:

function process_sale_price( $price ) {
    $percentage = 11; // 11% discount

    return ( 100 - $percentage ) / 100 * $price;
}

add_filter('woocommerce_product_get_price', 'custom_price', 99, 2 );
add_filter('woocommerce_product_get_sale_price', 'custom_price', 99, 2 );
function custom_price( $price, $product ) {
    global $wpdb;

    $result = $wpdb->get_var( $wpdb->prepare("
        SELECT post_id FROM {$wpdb->prefix}fancyplugin_wc_product_info
        WHERE pub_year >= '2016' AND post_id = %d
    ", $product->get_id() ) );

    if( ! empty($result) ) {
        return process_sale_price( $price );
    }
    return $price;
}

代码进入活动子主题(或活动主题)的functions.php文件中。应该可以。