2

特定のページをメンバーのみに制限する WooCommerce メンバーシップ プラグインを使用して WooCommerce 上に構築された Wordpress メンバーシップ Web サイトがあります。

それらのページのいくつかは「ドリップフィード」です...つまり。それらのページへのアクセスは、購入後 3 日後に開きます。私はこれを WooMemberships で設定しました。

現在のユーザーが特定のページにアクセスできるかどうかを確認するために、単純に PHP の条件付きチェックを実行しようとしています。

ドキュメントで次のコードを見つけました。wc_memberships_is_post_content_restricted()

しかし、私はそれを機能させることができませんでした。

基本的に、現在のユーザーが特定のページにアクセスできるかどうかについて (を使用してpage ID) PHP IF ステートメントを実行するコード スニペットはありますか?

例えば:

if ( current_user_has_access(page_ID) ) { DO SOMETHING } else { DON'T }

ありがとう。

4

3 に答える 3

3

これが役立つかどうかはわかりませんが、ここに私の見解があります。最初にすべてのユーザーのアクティブなメンバーシップを調べてから、コンテンツの $rules をチェックして、制限されたプランがユーザーのメンバーシップ プラン (in_array) の一部であるかどうかを確認します。

function can_user_access_content($user_id,$post_id){
    //check if there's a force public on this content    
    if(get_post_meta($post_id,'_wc_memberships_force_public',true)=='yes') return true;
    $args = array( 'status' => array( 'active' ));
    $plans = wc_memberships_get_user_memberships( $user_id, $args );
    $user_plans = array();
    foreach($plans as $plan){
        array_push($user_plans,$plan->plan_id);
    }
    $rules = wc_memberships()->get_rules_instance()->get_post_content_restriction_rules( $post_id );

    foreach($rules as $rule){
        if(in_array($rule->get_membership_plan_id(), $user_plans)){
            return true;
        }
    }       
    return false;
}

使用法は次のようになります。

if(can_user_access_content(get_current_user_id(),$post->ID)){
    //do whatever here
}
于 2016-09-12T21:03:30.143 に答える
1

交換する必要があります(条件で):

  1. $page_idあなたのpage ID番号で (例: is_page(42))
  2. $membership_plan計画 ( 'plan_slug') または関連するスラッグによってpost ID

状況、契約条項:

  • wc_memberships_is_post_content_restricted($page_id)=>が撤回されたtrue場合。$page_id
  • is_page($page_id)=> が actual の場合は true $page_id
  • wc_memberships_is_user_active_member( $membership_plan )=>true実際のユーザーはこの$membership_planプランの有効なメンバーです。その場合、ページへのアクセスは、ユーザーのサブスクリプション プランによって許可されます。

不要な場合は条件の一部を削除し、必要に応じて微調整できます。

if( wc_memberships_is_post_content_restricted() && is_page($page_id) && wc_memberships_is_user_active_member( $membership_plan ) ) {

    // do something

} else {

    // don't

}

- - アップデート - -

制限および(または)時間アクセスに関連する唯一の機能は次のとおりです。

1)wc_memberships_restrict( $content, $membership_plans, $delay, $exclude_trial )
ショートコードのように[wcm_restrict](あまり役に立たない)…</p>

2) wc_memberships_get_user_access_time( $user_id, $target, $action, $gmt ): パラメータ

$user_id  // for a logged 'user ID'
$target   : array('post' => id, 'product' => id) // content_type and content_id
$action   : 'view' or 'purchase' // Type of access (products only)<br>
$gmt =>   : true  or  false // (selection of the time zone)
// Returns user access start timestamp (in site timezone) for content or a product

参考:WooCommerceメンバーシップ関数リファレンス

于 2016-06-09T00:54:00.637 に答える