Php 仅在WooCommerce中允许客人结帐购买特定产品
以下代码将自定义字段添加到管理产品设置中,以在产品级别管理来宾签出:Php 仅在WooCommerce中允许客人结帐购买特定产品,php,wordpress,woocommerce,checkout,user-registration,Php,Wordpress,Woocommerce,Checkout,User Registration,以下代码将自定义字段添加到管理产品设置中,以在产品级别管理来宾签出: // Display Guest Checkout Field add_action( 'woocommerce_product_options_general_product_data', 'woo_add_custom_general_fields' ); function woo_add_custom_general_fields() { global $woocommerce, $post; e
// Display Guest Checkout Field
add_action( 'woocommerce_product_options_general_product_data', 'woo_add_custom_general_fields' );
function woo_add_custom_general_fields() {
global $woocommerce, $post;
echo '<div class="options_group">';
// Checkbox
woocommerce_wp_checkbox( array(
'id' => '_allow_guest_checkout',
'wrapper_class' => 'show_if_simple',
'label' => __('Checkout', 'woocommerce' ),
'description' => __('Allow Guest Checkout', 'woocommerce' )
) );
echo '</div>';
}
// Save Guest Checkout Field
add_action( 'woocommerce_process_product_meta', 'woo_add_custom_general_fields_save' );
function woo_add_custom_general_fields_save( $post_id ){
$woocommerce_checkbox = isset( $_POST['_allow_guest_checkout'] ) ? 'yes' : 'no';
update_post_meta( $post_id, '_allow_guest_checkout', $woocommerce_checkbox );
}
// Enable Guest Checkout on Certain products
add_filter( 'pre_option_woocommerce_enable_guest_checkout', 'enable_guest_checkout_based_on_product' );
function enable_guest_checkout_based_on_product( $value ) {
if ( WC()->cart ) {
$cart = WC()->cart->get_cart();
foreach ( $cart as $item ) {
if ( get_post_meta( $item['product_id'], '_allow_guest_checkout', true ) == 'yes' ) {
$value = "yes";
} else {
$value = "no";
break;
}
}
}
return $value;
}
//显示来宾签出字段
添加操作(“woocommerce\u product\u options\u general\u product\u data”、“woo\u add\u custom\u general\u fields”);
函数woo_添加_自定义_常规_字段(){
全球$woocmerce,$post;
回声';
//复选框
woocommerce_wp_复选框(数组(
'id'=>'\u允许\u客人\u结帐',
'wrapper\u class'=>'show\u if\u simple',
“标签”=>“‘结帐’、‘woocommerce’”,
'description'=>\('allowguestcheckout','woocommerce')
) );
回声';
}
//保存来宾签出字段
添加操作('woo商业\流程\产品\元','woo \添加\自定义\常规\字段\保存');
函数woo\u添加\自定义\常规\字段\保存($post\u id){
$woocommerce\u checkbox=isset($\u POST['''u allow\u guest\u checkout'])?“是”:“否”;
更新发布元($post\u id,''u allow\u guest\u checkout',$woocommerce\u checkbox);
}
//在某些产品上启用来宾签出
添加过滤器('pre_option_woodcommerce_enable_guest_checkout'、'enable_guest_checkout_based_on_product');
基于产品的功能启用客户结账($value){
如果(WC()->cart){
$cart=WC()->cart->get_cart();
foreach($cart作为$item){
if(get_post_meta($item['product_id'],'u allow_guest_checkout',true)='yes'){
$value=“是”;
}否则{
$value=“否”;
打破
}
}
}
返回$value;
}
但实际上它不起作用。我做错了什么?我怎样才能修好它
我尝试允许客人购买特定产品。管理员自定义字段显示和保存自定义字段值正在工作(前两个功能),但登录/注册从未出现在签出页面上,即使购物车中有不允许客人结账的产品。过滤器挂钩
基于产品启用客人结账
不再存在,已被另一个稍有不同的挂钩取代
因此,您的代码将是:
add_filter('woocommerce_checkout_registration_required','change_tax_class_user_role',900);
功能更改\u税务\u类别\u用户\u角色($registration\u required){
如果(!WC()->购物车->为空(){
$registration\u required=false;//正在初始化(默认情况下允许来宾签出)
//循环浏览购物车项目
foreach(WC()->cart->get_cart()作为$item){
//检查购物车中是否有任何项目没有“允许客人结账”选项
如果(获取帖子元($item['product\u id'],'u allow\u guest\u checkout',true)!='yes'){
返回true;//找到:强制签出用户注册并退出
}
}
}
返回$registration_(需要时);
}
代码进入活动子主题(或活动主题)的functions.php文件。它应该有效
相关延续:此代码阻止通过登录页面,但我需要将此代码用于其他功能。现在,我如何才能使标有“\u允许\u客人\u结帐”的产品通过此代码@LoicTheAztec`添加操作('template_redirect'、'checkout_redirect_non_logged_to_login_access');函数签出\重定向\非\登录\访问(){if(is \签出()&&!is \用户\登录\登录()){wp \重定向(get \ permalink(get \选项('woocommerce \ myaccount \ page \ id'));exit;}}`@MusaBaltac\请提出一个新问题,完成后通知我……我问了另一个问题@LoicTheAztec