我正在尝试根据客户要求为woocommerce添加一些功能。该功能涉及我必须修改woocommerce源代码。我向客户解释了为什么这是一个坏主意,但他们坚持,所以我这样做。
但是我在向POST中添加一些值时遇到了一些麻烦。
这一切都是从woocommerce后端>>完成的。订单。
基本上我正在为商店管理员通过后端添加的产品添加宽度和高度。
我遇到的唯一问题是将宽度和高度调整为POST。
我有这个代码:(骨干模态弹出窗口)
<script type="text/template" id="wc-modal-add-products">
<div class="wc-backbone-modal">
<div class="wc-backbone-modal-content">
<section class="wc-backbone-modal-main" role="main">
<header class="wc-backbone-modal-header">
<a class="modal-close modal-close-link" href="#"><span class="close-icon"><span class="screen-reader-text">Close media panel</span></span></a>
<h1><?php _e( 'Add products', 'woocommerce' ); ?></h1>
</header>
<article style="min-height:70px;">
<form action="" method="post">
<input type="hidden" id="add_item_id" name="add_order_items" class="wc-product-search" style="width: 100%;" data-placeholder="<?php _e( 'Search for a product…', 'woocommerce' ); ?>" data-multiple="true" />
<input name="wpti_x" placeholder="Width" class="wpti-product-size" id="wpti-product-x" type="number">
<input name="wpti_y" placeholder="Height" class="wpti-product-size" id="wpti-product-y" type="number">
</form>
</article>
<footer>
<div class="inner">
<button id="btn-ok" class="button button-primary button-large"><?php _e( 'Add', 'woocommerce' ); ?></button>
</div>
</footer>
</section>
</div>
</div>
<div class="wc-backbone-modal-backdrop modal-close"> </div>
</script>
这是控制数据的PHP:
<?php
public static function add_order_item() {
function new_prices($backend_prod_id){
$pluginpath = "/home/#####/wp-content/plugins/codecanyon-7104096-woo-table-based-pricing/";
include_once $pluginpath . 'woocommerce-price-table.php';
$height = $_POST['wpti_x']; //This is empty??? Hardcoded works fine
$width = $_POST['wpti_y']; //This is empty??? Hardcoded works fine
$prices = get_prices($width, $height, $backend_prod_id);
$json_string = json_encode($prices); //json encode prices
$obj = json_decode($json_string, true);
return $obj['product_price'];
}
check_ajax_referer( 'order-item', 'security' );
$item_to_add = sanitize_text_field( $_POST['item_to_add'] );
$order_id = absint( $_POST['order_id'] );
// Find the item
if ( ! is_numeric( $item_to_add ) ) {
die();
}
$post = get_post( $item_to_add );
if ( ! $post || ( 'product' !== $post->post_type && 'product_variation' !== $post->post_type ) ) {
die();
}
$_product = wc_get_product( $post->ID );
$order = wc_get_order( $order_id );
$order_taxes = $order->get_taxes();
$class = 'new_row';
// Set values
$item = array();
$item['product_id'] = $_product->id;
$item['variation_id'] = isset( $_product->variation_id ) ? $_product->variation_id : '';
$item['variation_data'] = $item['variation_id'] ? $_product->get_variation_attributes() : '';
$item['name'] = $_product->get_title();
$item['tax_class'] = $_product->get_tax_class();
$item['qty'] = 1;
$item['line_subtotal'] = new_prices($_product->id);
$item['line_subtotal_tax'] = '';
$item['line_total'] = new_prices($_product->id);
$item['line_tax'] = '';
// Add line item
$item_id = wc_add_order_item( $order_id, array(
'order_item_name' => $item['name'],
'order_item_type' => 'line_item'
) );
// Add line item meta
if ( $item_id ) {
wc_add_order_item_meta( $item_id, '_qty', $item['qty'] );
wc_add_order_item_meta( $item_id, '_tax_class', $item['tax_class'] );
wc_add_order_item_meta( $item_id, '_product_id', $item['product_id'] );
wc_add_order_item_meta( $item_id, '_variation_id', $item['variation_id'] );
wc_add_order_item_meta( $item_id, '_line_subtotal', $item['line_subtotal'] );
wc_add_order_item_meta( $item_id, '_line_subtotal_tax', $item['line_subtotal_tax'] );
wc_add_order_item_meta( $item_id, '_line_total', $item['line_total'] );
wc_add_order_item_meta( $item_id, '_line_tax', $item['line_tax'] );
// Since 2.2
wc_add_order_item_meta( $item_id, '_line_tax_data', array( 'total' => array(), 'subtotal' => array() ) );
// Store variation data in meta
if ( $item['variation_data'] && is_array( $item['variation_data'] ) ) {
foreach ( $item['variation_data'] as $key => $value ) {
wc_add_order_item_meta( $item_id, str_replace( 'attribute_', '', $key ), $value );
}
}
do_action( 'woocommerce_ajax_add_order_item_meta', $item_id, $item );
}
$item = apply_filters( 'woocommerce_ajax_order_item', $item, $item_id );
include( 'admin/meta-boxes/views/html-order-item.php' );
// Quit out
die();
}
?>
我无法弄清楚它为什么不向POST添加宽度($_POST['wpti_x']
)和高度($_POST['wpti_x']
)。如果值是硬编码的,它可以正常工作。
任何帮助将不胜感激。
答案 0 :(得分:1)
您需要修改meta-boxes-order-min.js
,因为这是您在woocommerce中尝试使用的功能。
如果要发布这些值,可能需要编辑add_item
函数。
我希望这会有所帮助,请记住,如果您更新woocommerce,您的编辑将会丢失。所以这真的是不建议。