【发布时间】:2019-10-12 08:45:08
【问题描述】:
如果用户不是特定角色(例如经过验证的买家),我正在尝试从未登录的用户中完全删除一个/多个产品。
我已经能够使用以下代码创建一个名为 Verified Buyer 的新角色;
add_role(
'verified_buyer',
__( 'Verified Buyer', 'text-domain' ),
array(
'read' => true,
'edit_posts' => false,
)
);
//This Role is same role capability as the WooCommerce Customer role
我还使用下面的代码向 WooCommerce 添加新产品页面添加了一个复选框
function hide_product_from_unathorised_users() {
$args = array(
'id' => '_hide_from_unauthorize_users',
'label' => 'Hide Product from unauthorized users',
'desc_tip' => true,
'description' => __('Check this to hide this product from unauthorized users', 'text-domain')
);
woocommerce_wp_checkbox( $args );
}
add_action( 'woocommerce_product_options_advanced', 'hide_product_from_unathorised_users' );
// Save Fields
function product_custom_fields_save($post_id){
// Custom Product Text Field
$hide_product_unathorised_users = isset( $_POST['_hide_from_unauthorize_users'] ) ? 'yes' : 'no';
update_post_meta($post_id, '_hide_from_unauthorize_users', esc_attr( $hide_product_unathorised_users ));
}
add_action('woocommerce_process_product_meta', 'product_custom_fields_save');
现在我有了这两个选项(用户角色和一个复选框以知道要隐藏哪个产品)...如果满足以下条件,我想隐藏此类产品;
完全隐藏产品(即使从搜索查询中)如果;
1. 产品上的复选框被选中&用户未登录
2. 选中产品和用户登录且未验证买家或管理员角色的复选框
这样
function hide_product_completely_conditionally() {
global $post;
$hide_product_checkbox = get_post_meta( $post->ID, '_hide_from_unauthorize_users', true )
$user = wp_get_current_user();
$authorized_user_role = in_array( 'verified_buyer', (array) $user->roles );
$admin_role = in_array( 'administrator', (array) $user->roles );
if ( ($hide_product_checkbox == 'yes' && !is_user_loggedin()) || ($hide_product_checkbox == 'yes' && is_user_loggedin() && (!$authorized_user_role || !$admin_role) ) ) {
//(...) HIDE SUCH PRODUCT COMPLETELY CODE THAT I'M NOT SURE HOW TO WRITE
}
}
提前感谢您的帮助。
【问题讨论】:
标签: php wordpress woocommerce product user-roles