WordPress with WooCommerceでウェブサイトを開発しています。さらに WC有料リスト と WooCommerceサブスクリプション プラグインを使用して作業を処理しています。
問題は、アクティブなサブスクリプションログインを持つ「サブスクライバー」ロールを持つユーザーが、アクティブなサブスクリプションを持っていても、パッケージを選択する必要があるたびにコンテンツを投稿しようとする場合です。
ユーザーがアクティブなサブスクリプションを持っているかどうかを検出する、trueが返された場合、パッケージを選択する手順をスキップする方法を知っている人はいますか?
ありがとう。
更新(2019)
wcs_user_has_subscription()
。次のカスタム条件関数には、オプションの引数_$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>';
}
_
このコードはテストされ、機能します
関連する回答:
wcs_user_has_subscription()
を使用する
$has_sub = wcs_user_has_subscription( '', '', 'active' );
if ( $has_sub) {
// User have active subscription
}