2016-06-08 17 views
1

Ich habe eine Wordpress Mitgliedschaften Website, die auf WooCommerce mit WooCommerce Mitgliedschaften Plugin gebaut wird, um bestimmte Seiten auf Mitglieder zu beschränken.WooCommerce Mitgliedschaften: Bedingt, um einen Seitenzugriff zu überprüfen

Einige dieser Seiten sind "tropfenweise" ... dh. Der Zugriff auf diese Seiten öffnet sich 3 Tage nach dem Kauf usw. Ich habe dies in WooMemberships eingerichtet.

Ich versuche einfach eine PHP-bedingte Überprüfung durchzuführen, um zu sehen, ob der aktuelle Benutzer Zugriff auf eine bestimmte Seite hat.

Ich habe diesen Code Stück in der Dokumentation gefunden: wc_memberships_is_post_content_restricted()

Allerdings habe ich nicht in der Lage gewesen, damit es funktioniert.

Gibt es ein Code-Snippet, das im Grunde eine PHP IF-Anweisung ausführt, ob der aktuelle Benutzer Zugriff auf eine bestimmte Seite hat (page ID)?

zB:

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

Dank.

+0

Vielen Dank für das :) – Scott

Antwort

1

Sie (in den Bedingungen) ersetzen müssen:

  1. $page_id durch Ihre page ID Nummer (zB: is_page (42))
  2. $membership_plan von der Schnecke des Plans ('plan_slug') oder verwandten post ID.

Die Bedingungen:

  • wc_memberships_is_post_content_restricted($page_id) =>true wenn $page_id zurückgezogen wird.
  • is_page($page_id) => wahr, wenn es sich um $page_id handelt.
  • wc_memberships_is_user_active_member($membership_plan) =>true aktueller Benutzer ist ein aktives Mitglied für diesen $membership_plan Plan. In diesem Fall wird der Zugriff auf die Seite durch den Plan des Benutzers gewährt.

Sie können einige der Bedingungen entfernen, falls nicht benötigt, und Feinabstimmung für Ihre Bedürfnisse.

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

    // do something 

} else { 

    // don't 

} 

--- --- Aktualisieren

Die einzige Funktion auf Restriktion bezogene und (oder) Zeitzugriff sind:

1) wc_memberships_restrict($content, $membership_plans, $delay, $exclude_trial )
wie Short [wcm_restrict] (also nicht nützlich) ...

2) wc_memberships_get_user_access_time($user_id, $target, $action, $gmt): Parameter

$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 

Referenz: WooCommerce Memberships Function Reference

+0

erstaunlich ist es Ihnen danken. Ich habe es ausprobiert, und es bestätigt, dass der Benutzer ein Mitglied usw. ist - aber es sagt, dass sie Zugriff auf Seiten haben, auf die sie keinen Zugriff haben sollten, bis X Tage vergangen sind ... Gibt es eine Möglichkeit zu überprüfen Das Mitglied hat Zugang zu einer bestimmten Seite, basierend auf ihrem Anmeldedatum (Ich habe in Woo Mitgliedschaften festgelegt, dass Seiten nur nach X Tagen angezeigt werden sollen) ?? Für Kontext - Ich erstelle ein Menü, das nur die Seiten anzeigt, auf die sie aktuell zugreifen können. – Scott

1

Ich bin nicht sicher, ob das hilft, aber hier ist mein nehmen auf sie. Ich gehe zuerst durch das gesamte aktive Mitgliedschaft Benutzer und dann überprüfe ich die Regeln Inhalt $ zu sehen, ob die eingeschränkten Pläne ein Teil der Nutzer Mitgliedschaft Pläne (in_array) sind

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

Verwendung wäre so etwas wie:

if(can_user_access_content(get_current_user_id(),$post->ID)){ 
    //do whatever here 
} 
3

Ich habe mit dem gleichen Problem um StoryMoment.com (Wir produzieren Audio + eBook Geschichte Serie für Kinder).

Dies ist, wie ich damit umgegangen bin. Ich verwende Folgendes in einer Seitenvorlage, um Seitenelemente basierend auf dem Zugriff ein- oder auszublenden. Die wc_memberships_view_delayed_post_content würde sich je nach Art des Inhalts ändern.

Sie können die anderen Optionen in der Datei sehen:

Klasse-WC-Mitgliedschaften-capabilities.php

<?php 

$has_access = current_user_can('wc_memberships_view_delayed_post_content', $post->ID); 

if ($has_access) { 

//do something 

} else { 

//do something else 

} 

?> 
+0

DIESES ist genau was funktionierte, einfach zu implementieren! DANKE! – jampafoo

+0

Einverstanden. Das ist super einfach und funktioniert perfekt. Ich frage mich nur, ob/wie es möglich ist, die Mitgliedschaften, die in der "restricted content" -Nachricht enthalten sind, in den Abschnitt "else" hinzuzufügen. – Trevor