如何在WooCommerce中使用PHP更新产品发货?

时间:2015-12-09 作者:Krista Lynn Kelly

我正在使用PHP/HTML表单创建产品。其工作原理如下:

在表单中指定尺寸、数量和属性当我点击“计算”时,发送该信息以动态创建新产品,然后用新产品创建添加到购物车按钮我搞不清楚的是如何更新我想要使用的配送。我希望它有一个特定维度的特定发货插件(即当维度小于24英寸x30时发货FedEx,当产品大于24英寸x30时发货Table Rate发货插件)。

我目前正在使用WooCommerce Force产品发货,以便在我的两个发货插件(FedEx和Table Rate shipping)之间切换。我只需要弄清楚,当盒子的尺寸小于等于24“x 30”时,如何检查“FedEx”,当盒子的尺寸太大时,如何检查“Table Rate Shipping”。

以下是链接my form, 这里有一个链接my product page looks like 在WooCommerce*请注意右上角如何显示“配送方式”:联邦快递和配送。当有人创建产品并将其添加到购物车时,我需要在表单中更新这些内容。

我会使用什么“元密钥”来更新这些信息?以下是迄今为止创建和更新产品的表单的代码:

$post = array(
    \'post_author\'  => $user_id,
    \'post_content\' => \'\',
    \'post_status\'  => "publish",
    \'post_title\'   => $Description,
    \'post_parent\'  => \'\',
    \'post_type\'    => "product",
);
//Create post
$post_id = wp_insert_post( $post, $wp_error );
if ( $post_id ) {
    $attach_id = get_post_meta( $product->parent_id, "_thumbnail_id", true );
    add_post_meta( $post_id, \'_thumbnail_id\', $attach_id );
}
wp_set_object_terms( $post_id, \'customer-added\', \'product_cat\' );
wp_set_object_terms( $post_id, \'simple\', \'product_type\' );

update_post_meta( $post_id, \'_visibility\', \'visible\' );
update_post_meta( $post_id, \'_stock_status\', \'instock\' );
update_post_meta( $post_id, \'total_sales\', \'0\' );
update_post_meta( $post_id, \'_downloadable\', \'no\' );
update_post_meta( $post_id, \'_virtual\', \'no\' );
update_post_meta( $post_id, \'_regular_price\', $Price );
update_post_meta( $post_id, \'_sale_price\', $Price );
update_post_meta( $post_id, \'_purchase_note\', "" );
update_post_meta( $post_id, \'_featured\', "no" );
update_post_meta( $post_id, \'_weight\', $Weight );
update_post_meta( $post_id, \'_length\', $Height );
update_post_meta( $post_id, \'_width\', $Width );
update_post_meta( $post_id, \'_height\', $Thick );
update_post_meta( $post_id, \'_sku\', "" );
update_post_meta( $post_id, \'_product_attributes\', array() );
update_post_meta( $post_id, \'_sale_price_dates_from\', "" );
update_post_meta( $post_id, \'_sale_price_dates_to\', "" );
update_post_meta( $post_id, \'_price\', $Price );
update_post_meta( $post_id, \'_sold_individually\', "" );
update_post_meta( $post_id, \'_manage_stock\', "no" );
update_post_meta( $post_id, \'_backorders\', "no" );
update_post_meta( $post_id, \'_stock\', "" );

// file paths will be stored in an array keyed off md5(file path)
$downdloadArray = array( 
    \'name\' => "Test", 
    \'file\' => $uploadDIR[\'baseurl\'] . "/video/" . $video 
);

$file_path = md5( $uploadDIR[\'baseurl\'] . "/video/" . $video );

$_file_paths[ $file_path ] = $downdloadArray;
// grant permission to any newly added files on any existing orders for this product
//do_action( \'woocommerce_process_product_file_download_paths\', $post_id, 0, $downdloadArray );
update_post_meta( $post_id, \'_downloadable_files \', $_file_paths );
update_post_meta( $post_id, \'_download_limit\', \'\' );
update_post_meta( $post_id, \'_download_expiry\', \'\' );
update_post_meta( $post_id, \'_download_type\', \'\' );
update_post_meta( $post_id, \'_product_image_gallery\', \'\' );
2015年10月12日更新:以下是使用“Update\\u post\\u meta”功能wps\\u ship\\u meta\\u box\\u save($post\\u id,$post)的强制发货插件的代码{

if (defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE)
    return $post_id;


if (isset($post->post_type) && $post->post_type == \'revision\')
    return $post_id;
if(isset($_POST[\'post_type\'])) 
if ($_POST[\'post_type\'] == \'product\'){
    $productIds = get_option(\'woocommerce_product_apply_wfpship\');

    if(is_array($productIds)){

        if (!in_array($post_id, $productIds)){
            $productIds[] = $post_id;
            update_option(\'woocommerce_product_apply_wfpship\', $productIds);
        }

    }

    $wfp_ship = array();
    if(isset($_POST[\'ship\']))
    if ($_POST[\'ship\']){
        foreach ($_POST[\'ship\'] as $ship)
            $wfp_ship[] = $ship;
    }
    if (count($wfp_ship)){
        update_post_meta($post_id, \'wfp_ship\', $wfp_ship);
    }  else {
        delete_post_meta($post_id, \'wfp_ship\');
    }
}
}

我想做的是在我的PHP/Html表单中有一行代码,上面写着:

update_post_meta( $post_id, \'wfp_ship\', $insert_shipping_method_here? );
我只是不确定更新它的语法是什么。我已经有了一个可以选择发货方式的插件,我只是不知道在创建新产品时如何编写代码来设置它。

自定义计算器(我的表单)的链接下面现在有完整的强制发货插件代码,供这里的人查看。

将来我该如何解决这个问题?我听说Firebug是一种调试,但是我如何使用这些东西来找出要更新的语法呢?

2015年10月12日下午4:07更新:当我读到更多关于meta Box的信息时,这是强制发货插件为我的产品创建的。。。我现在只需要知道如何通过我的实验页面上的自定义计算器表单使用PHP代码选中复选框,以便在创建产品时强制使用“fedex”或“shipping”。

1 个回复
SO网友:rex a.k.

基于找到的代码here 您可以使用WC()对cart对象进行计算->;购物车->;通过对每种产品(在您的情况下是定制玻璃)进行任何需要的数学运算来获取购物车。获取购物车的内容,计算尺寸,然后根据结果删除装运方法。

只需在函数中添加一个自定义插件或一些行即可。php例如。

add_filter( \'woocommerce_available_shipping_methods\', \'calc_glass_items_and_filter_shipping_methods\', 10, 1 );

function calc_glass_items_and_filter_shipping_methods($available_methods){

  // get the items in cart
  $items = WC()->cart->get_cart;

//cycle through items using the product id\'s to get the dimensions you must have already set in the meta

foreach($items as $cart_key => $item){

  $procuct_id = $item->id;
  $length = get_post_meta($product_id, \'_width\', true;

  // and on and on ... math math math
  $item_dimensions[] = $your_cart_item_dimensions; // e.g. \'large\' or \'small\'

}
// Then do some work on the $item_dimensions array
//  math math math

$whatever_you_figure_out = $math_math_math;

if($whatever_you_figure_out == \'large\'){
  $carrier = \'fedex\'; // this is the one you\'d like to remove
    }else{
  $carrier = \'usps\'; // or remove this one
    }

$available_methods = wp_filter_object_list( $available_methods, array( \'method_id\' => $carrier ), \'NOT\' );

return $available_methods;

}
在本地使用xdebug进行调试尤其有用,这样您就可以看到$available\\u methods数组或对象实际包含的内容。

希望这有帮助。

相关推荐

无法在模板函数.php中使用IS_HOME

我试图在标题中加载一个滑块,但只在主页上加载。如果有帮助的话,我正在使用Ultralight模板。我正在尝试(在template functions.php中)执行以下操作:<?php if ( is_page( \'home\' ) ) : ?> dynamic_sidebar( \'Homepage Widget\' ); <?php endif; ?> 但这行不通。现在,通过快速的google,我似乎需要将请