【问题标题】:Custom price calculation displayed in admin Woocommerce product list page管理员 Woocommerce 产品列表页面中显示的自定义价格计算
【发布时间】:2019-02-21 00:03:15
【问题描述】:

这是为“购买价格”创建一个自定义字段的尝试,目的是计算产品价格和购买价格之间的差额,从而提供一个“利润”,在这种情况下称为“净额” ”。

它给了我一个错误:“警告:遇到一个非数字值”,它指的是第 115 行,这是这个:

$netwin = $product_standard_cost - $product_purchase_price;

代码如下所示:

if (in_array('woocommerce/woocommerce.php', apply_filters('active_plugins', get_option('active_plugins')))) {

    if (is_admin()) {
        $url = plugin_dir_url(__FILE__);
        add_action('woocommerce_product_options_general_product_data', 'wppp_add_product_purchase_price_field');
        add_action('woocommerce_process_product_meta', 'wppp_save_product_purchase_price_field', 10, 2);
        add_action('woocommerce_product_after_variable_attributes', 'wppp_add_variable_product_purchase_price_field', 10, 3);
        add_action('woocommerce_save_product_variation', 'wppp_save_variable_product_purchase_price_field', 10, 2);
        add_action('plugins_loaded', 'wppp_load_product_purchase_price_textdomain');
    }
}


function wppp_load_product_purchase_price_textdomain() {
    load_plugin_textdomain('products-purchase-price-for-woocommerce', false, plugin_basename(dirname(__FILE__)) . '/languages/');
}

function wppp_add_product_purchase_price_field() {
    $currency = get_woocommerce_currency_symbol();
    woocommerce_wp_text_input(
          array(
              'id' => '_purchase_price',
              'class' => '',
              'wrapper_class' => 'pricing show_if_simple show_if_external',
              'label' => __("Purchase Price", 'products-purchase-price-for-woocommerce') . " ($currency)",
              'data_type' => 'price',
              'desc_tip' => true,
              'description' => __('Submit the total product purchase cost.', 'products-purchase-price-for-woocommerce'),
          )
    );
}

function wppp_save_product_purchase_price_field($post_id, $post) {
    if (isset($_POST['_purchase_price'])) {
        $purchase_price = ($_POST['_purchase_price'] === '' ) ? '' : wc_format_decimal($_POST['_purchase_price']);
        update_post_meta($post_id, '_purchase_price', $purchase_price);
    }
}


function wppp_add_variable_product_purchase_price_field($loop, $variation_data, $variation) {
    $currency = get_woocommerce_currency_symbol();
    woocommerce_wp_text_input(array(
        'id' => 'variable_purchase_price[' . $loop . ']',
        'wrapper_class' => 'form-row form-row-first',
        'label' => __("Purchase Price", 'products-purchase-price-for-woocommerce') . " ($currency)",
        'placeholder' => 'Submit the product purchase price.',
        'data_type' => 'price',
        'desc_tip' => false,
        'value' => get_post_meta($variation->ID, '_purchase_price', true)
    ));
}

function wppp_save_variable_product_purchase_price_field($variation_id, $i) {
    if (isset($_POST['variable_purchase_price'][$i])) {
        $purchase_price = ($_POST['variable_purchase_price'][$i] === '' ) ? '' : wc_format_decimal($_POST['variable_purchase_price'][$i]);
        update_post_meta($variation_id, '_purchase_price', $purchase_price);
    }
}


add_filter( 'manage_edit-product_columns', 'wppp_add_purchase_price_product_column', 11);
function wppp_add_purchase_price_product_column( $columns )
{
    $columns['_purchase_price'] = __( 'Buy-in Cost','woocommerce');
    return $columns;
}

add_action( 'manage_product_posts_custom_column' , 'wppp_display_purchase_price_in_column', 10, 2 );
function wppp_display_purchase_price_in_column( $column, $product_id )
{
    global $post;
    $purchase_price = get_post_meta( $product_id, '_purchase_price', true );
    switch ( $column )
    {
        case '_purchase_price' :
            echo get_woocommerce_currency_symbol() . $purchase_price;
            break;
    }
}

add_filter( 'manage_edit-product_columns', 'wppp_add_net_winnings_product_column', 11);
function wppp_add_net_winnings_product_column($columns)
{
   $columns['net_winnings'] = __( 'Net','woocommerce');
   return $columns;
}



add_action( 'manage_product_posts_custom_column' , 'wppp_net_winnings_display', 10, 2 );
function wppp_net_winnings_display( $column, $product_id )
{
    global $product;
    $product_purchase_price = get_post_meta( $product_id, '_purchase_price', true );
    $product_standard_cost = $product->get_regular_price();
    $netwin = $product_standard_cost - $product_purchase_price;
    switch ( $column )
    {
        case 'net_winnings' :
            echo get_woocommerce_currency_symbol() . $netwin;
            break;
    }
}


add_filter( "manage_edit-product_sortable_columns", 'wppp_make_purchase_price_column_sortable' );
function wppp_make_purchase_price_column_sortable( $columns )
{
    $custom = array(
        '_purchase_price'    => 'Purchase Price',
        'net_winnings'    => 'Net',
    );
    return wp_parse_args( $custom, $columns );
}

非常感谢任何帮助。

【问题讨论】:

    标签: php wordpress woocommerce product price


    【解决方案1】:

    你需要用这个替换wppp_net_winnings_display()函数:

    add_action( 'manage_product_posts_custom_column' , 'wppp_net_winnings_display', 10, 2 );
    function wppp_net_winnings_display( $column, $product_id ){
        if( $column  == 'net_winnings' ) {
            global $product;
    
            if( ! $product && ! is_object($product) ){
                $product = wc_get_product( $product_id );
            }
    
            $purchase_price = (float) $product->get_meta('_purchase_price' );
            $regular_price  = (float) $product->get_regular_price();
    
            $net_winning    = $purchase_price != 0 ? $regular_price - $purchase_price : 0;
    
            echo wc_price($net_winning);
        }
    }
    

    代码进入您的活动子主题(或活动主题)的 function.php 文件中。经过测试并且可以工作。

    【讨论】:

      猜你喜欢
      • 2019-01-09
      • 2019-03-24
      • 1970-01-01
      • 2018-12-17
      • 1970-01-01
      • 1970-01-01
      • 2021-03-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多