gpt4 book ai didi

php - 检测当前用户是否有事件订阅

转载 作者:可可西里 更新时间:2023-11-01 12:30:43 25 4
gpt4 key购买 nike

我正在使用 WooCommerce 在 WordPress 中开发一个网站。我正在另外使用 WC Paid ListingsWooCommerce Subscriptions插件来处理我的工作。

问题是,当具有“订阅者”角色并具有有效订阅登录的用户每次尝试发布内容时,即使他/她具有有效订阅,他/她也必须选择一个包。

有没有人知道如何检测用户是否有有效订阅,如果返回真则跳过选择包的步骤?

最佳答案

更新(2019 年)

  • 使用 WooCommerce 订阅的新条件函数 wcs_user_has_subscription() .
  • 使用更轻量级代码版本的新条件函数(SQL 查询)
  • 基于改进的 WP_Query 的原始增强条件函数。

以下自定义条件函数有一个可选参数 $user_id (定义的 user_id) 并将返回 true 当当前用户(或定义的用户)有事件订阅时。

所以现在可以使用 3 种不同的方式来完成 (做同样的事情):

1) 使用 WooCommerce 订阅专用条件函数 wcs_user_has_subscription() :

function has_active_subscription( $user_id='' ) {
// When a $user_id is not specified, get the current user Id
if( '' == $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;

return wcs_user_has_subscription( $user_id, '', 'active' );
}

2) 使用更轻量级的 SQL 查询也是如此(2019 年 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;

global $wpdb;

// Get all active subscriptions count for a user ID
$count_subscriptions = $wpdb->get_var( "
SELECT count(p.ID)
FROM {$wpdb->prefix}posts as p
JOIN {$wpdb->prefix}postmeta as pm
ON p.ID = pm.post_id
WHERE p.post_type = 'shop_subscription'
AND p.post_status = 'wc-active'
AND pm.meta_key = '_customer_user'
AND pm.meta_value > 0
AND pm.meta_value = '$user_id'
" );

return $count_subscriptions == 0 ? false : true;
}

代码进入您活跃的子主题(或主题)的 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>';
}

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>';
}

这段代码已经过测试,可以正常工作


相关回答:

关于php - 检测当前用户是否有事件订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42403821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com