CURRENT_USER_CAN逗号列表与OR(||)列表

时间:2021-12-19 作者:Mike Loucas

有什么可以帮忙的吗?

我喜欢这个comma separated version

//** WORKING - Works on the Checkout page
add_action( \'woocommerce_cart_contents\', \'pst_pdf_ceckout_page_button\' );
function pst_pdf_ceckout_page_button() {
    if( current_user_can(\'administrator\') || current_user_can(\'ABC\') || current_user_can(\'LMN\') || current_user_can(\'XYZ\') ) {
echo \'<a class="button bc-pst-pdf-btn" https://LINK TO FILE.pdf" target="_blank">PST Exempt PDF Form </a>\';
} 
}


//** NOT WORKING - Won\'t show up on the Checkout page.
add_action( \'woocommerce_cart_contents\', \'pst_pdf_ceckout_page_button\' );

function pst_pdf_ceckout_page_button() {
    if ( current_user_has_role( array(\'administrator\', \'ABC\', \'LMN\', \'XYZ\') ) ) {
echo \'<a class="button bc-pst-pdf-btn" href="https://LINK TO FILE.pdf" target="_blank">PST Exempt PDF Form </a>\';
} 
}

1 个回复
SO网友:birgire

这个current_user_has_role()not WordPress的核心功能,另一方面wc_current_user_has_role( $role ) 在WooCommerce里$role 是一个字符串,但第三方插件通常是离题的。

在此票证中,创建此函数已作为wontfix关闭:https://core.trac.wordpress.org/ticket/22624 Andrew Nacin在哪里summarized 它整洁地:

角色仅仅是可以分配给auser的一组能力。只应检查功能,而不应检查角色。如果需要明确了解用户所扮演的角色,可以通过多种方式使用现有API。

这样的新功能已经成熟,可以滥用了。我们需要人们检查功能,而不是角色,而让当前的\\u user\\u has\\u role()函数只是要求他们做错事。我们仍然没有让人们停止检查用户级别,我们不要朝这个方向走。

您使用current_user_can(\'administrator\') 但也可以查看current_user_can() docs:

虽然部分支持使用特定角色代替功能,但不鼓励这种做法,因为它可能会产生不可靠的结果。

您始终可以编写自己的函数包装器或帮助器,以使功能检查更易于使用。

相关推荐

Calling hooks in functions

我习惯于使用主题挂钩,定期添加功能,但难以使用插件挂钩来过滤内容。这是我所知的极限,我试图理解这个过程,但没有用。我正在使用GigPress 管理事件。它允许您添加一个节目(基于日期),并将该节目与帖子(标准WP帖子)关联。我已经创建了一个自定义的帖子类型—productions—来关联节目,而不仅仅是一般的博客帖子。插件有一个钩子-gigpress_related_post_types —允许您用自己选择的任何CPT交换帖子。如果我直接编辑插件,它就会工作,将“帖子”替换为“产品”。如果我添加了我希望是