Php 检测当前用户是否有活动订阅
我正在WooCommerce的WordPress上开发一个网站。我正在使用额外的和插件来处理我的工作 问题是,当具有“订阅方”角色的用户使用活动订阅登录并尝试在每次他/她必须选择包时发布内容时,即使他/她有活动订阅 是否有人知道如何检测用户是否有活动订阅,如果返回true,则跳过选择包的步骤 谢谢。更新(2019)Php 检测当前用户是否有活动订阅,php,wordpress,woocommerce,orders,woocommerce-subscriptions,Php,Wordpress,Woocommerce,Orders,Woocommerce Subscriptions,我正在WooCommerce的WordPress上开发一个网站。我正在使用额外的和插件来处理我的工作 问题是,当具有“订阅方”角色的用户使用活动订阅登录并尝试在每次他/她必须选择包时发布内容时,即使他/她有活动订阅 是否有人知道如何检测用户是否有活动订阅,如果返回true,则跳过选择包的步骤 谢谢。更新(2019) 使用WooCommerce订阅的新条件函数 新的条件函数使用了更轻的代码版本(SQL查询) 基于改进的WP_查询的原始增强条件函数 以下自定义条件函数有一个可选参数$user\u
- 使用WooCommerce订阅的新条件函数李>
- 新的条件函数使用了更轻的代码版本(SQL查询)
- 基于改进的WP_查询的原始增强条件函数李>
$user\u id
(定义的用户id),当当前用户(或定义的用户)具有活动订阅时,将返回true
因此,现在可以使用3种不同的方法来实现这一点(它们可以做相同的事情):
1) 使用专用条件函数:
2) 更轻的SQL查询(于2019年3月添加)也是如此: 代码位于活动子主题(或主题)的function.php文件或任何插件文件中
3) 原始增强代码,也将执行相同的操作:
function has_active_subscription( $user_id=null ) {
// When a $user_id is not specified, get the current user Id
if( null == $user_id && is_user_logged_in() )
$user_id = get_current_user_id();
// User not logged in we return false
if( $user_id == 0 )
return false;
// Get all active subscriptions for a user ID
$active_subscriptions = get_posts( array(
'numberposts' => 1, // Only one is enough
'meta_key' => '_customer_user',
'meta_value' => $user_id,
'post_type' => 'shop_subscription', // Subscription post type
'post_status' => 'wc-active', // Active subscription
'fields' => 'ids', // return only IDs (instead of complete post objects)
) );
return sizeof($active_subscriptions) == 0 ? false : true;
}
代码位于活动子主题(或主题)的function.php文件或任何插件文件中
用法更新: 1) 当前用户的用法:
if( has_active_subscription() ){ // Current user has an active subscription
// do something … here goes your code
// Example of displaying something
echo '<p>I have active subscription</p>';
}
如果(具有活动的订阅()){//当前用户具有活动的订阅
//做点什么…这是你的代码
//显示某物的示例
echo“我有活动订阅”;
}
2) 已定义用户ID的用法:
if( has_active_subscription(26) ){ // Defined User ID has an active subscription
// do something … here goes your code
// Example of displaying something
echo '<p>User ID "26" have an active subscription</p>';
}
if(具有活动订阅(26)){//定义的用户ID具有活动订阅
//做点什么…这是你的代码
//显示某物的示例
echo'用户ID“26”具有活动订阅;
}
这段代码经过测试,可以正常工作
有关答案:
wcs\u用户拥有订阅()
多亏了Loic,代码似乎在工作,但问题是当我重定向页面时,出现以下错误警告:无法修改标题信息-标题已由/home2/xxx/xxxx/wp content/themes/jobsdojo/header.php:13)在/home2/xxx/public_html/quickextra/wp includes/pluggable.php第1174行发送。请再给我一个提示可以帮上忙谢谢@Loic TheAztec我试图绕过package-selection.php这段代码很有帮助,但是如果您有大的post meta表,请注意实现。由于缺少索引,它将执行全表扫描。我刚刚修复了一个复制/粘贴此内容的站点,并且在调用get_posts之前,必须对其进行修改,以设置并检查会话变量(如果他们有活动订阅),并检查用户id是否不是0。无论用户是否登录,他们都在页面上调用此功能以显示高级内容。获取\u当前\u用户\u id如果未登录,将始终返回0。在我的更改优化到200次/秒后,站点每秒发生2k次选择。我还为元键/值添加了索引。@mtg169谢谢(这是一个旧答案)…我用一些增强功能更新了函数代码,并添加了其他两种不同的方法:一种更轻的代码版本(使用SQL查询)和另一种基于wcs_user_has_subscription()条件函数的代码版本。
if( has_active_subscription() ){ // Current user has an active subscription
// do something … here goes your code
// Example of displaying something
echo '<p>I have active subscription</p>';
}
if( has_active_subscription(26) ){ // Defined User ID has an active subscription
// do something … here goes your code
// Example of displaying something
echo '<p>User ID "26" have an active subscription</p>';
}
$has_sub = wcs_user_has_subscription( '', '', 'active' );
if ( $has_sub) {
// User have active subscription
}