我有一个条件字段移除器,可以很好地使用ID,但是当我尝试使用类别运行它时,它会在获得结果后停止。
我已使用此tutorial作为指导:
<?php
/*=============Conditional field remover===========*/
//Cart check
function wc_ninja_product_is_in_the_cart() {
/*p1 products*/
$p1_cat = array( 'metal', 'wood');
/*p2 products*/
$p2_cat = array('bubblewrap');
// Products currently in the cart
$cart_ids = array();
$cart_categories = array();
//Declaring var
$p1 = false;
$p2 = false;
//creating an array
foreach( WC()->cart->get_cart() as $cart_item_key => $values ) {
$cart_product = $values['data'];
$cart_ids[] = $cart_product->id;
}
//filling array
foreach( $cart_ids as $id ) {
$products_categories = get_the_terms( $id, 'product_cat');
}
//filling category
foreach ($products_categories as $products_category) {
//Check
if (in_array($products_category->slug, $p1_cat)) {
$p1 = true;//Result
}
if (in_array($products_category->slug, $p2_cat)) {
$p2 = true;//Result
}
$cart_categories[] = $products_category->slug;
}
//Returns result to function
return array($p1, $p2);
}
//Field Remover
function wc_ninja_remove_checkout_field( $fields ) {
//Gets value from function and places them in the array !PHP 7 reverses order!
list($p1, $p2) = wc_ninja_product_is_in_the_cart();
var_dump(wc_ninja_product_is_in_the_cart());
//If check came back false it will remove the field in question
if ( $p1 == false ) {
//removes Field domain name
unset( $fields['billing']['Field_1'] );
}
if ( $p2 == false ) {
//Removes Field office_emails
unset( $fields['billing']['Field_2'] );
}
//Return unset result
return $fields;
}
add_filter( 'woocommerce_checkout_fields' , 'wc_ninja_remove_checkout_field' );
如果添加了两个产品,上面的代码将仅显示 Field_1
(在测试用例中金属盒cat =&gt;金属和包装材料cat =&gt; bubblewrap,i已经检查了拼写。我做的其他事情是数组的var_dump给了我:[0] =&gt;字符串(5)&#34;金属&#34;
我尝试用i ++制作数组;它确实将位置改为[x],其中x是产品数-1。正如我之前提到的,我制作了一个版本,使用的ID在大商店中工作得很好,所以我知道工作返回数组工作正常。
我没有按照教程到点并过早关闭其中一个foreach循环,导致只运行一次检查。它应该是那样但我有一个}以上//填充类别导致切断循环。
foreach( $cart_ids as $id ) {
$products_categories = get_the_terms( $id, 'product_cat');
//filling category
foreach ($products_categories as $products_category) {
答案 0 :(得分:1)
更新:
此代码正常运行,我已对其进行了测试 您用于创建2个结帐自定义字段的代码在哪里?
我认为那是你的主要问题。你正在使用的教程有点过时,一无所有。 Here is the official WooCommerce tutorial for checkout fields
您应该更新丢失代码的问题,并清楚地告诉您要对2个结帐自定义字段做些什么(并提供一些详细信息)。
要使您的字段去除功能与类别一起使用,您应该使用has_term()
函数作为条件,这样:
{{1}}
代码进入活动子主题(或主题)的function.php文件。或者也可以在任何插件php文件中。