- Home
- Categorie
- Coding e Sistemistica
- WordPress
- Inserire apply filters
-
Ciao Overklock e grazie per la tua risposta, io inserisco questo nel file function.php del mio tema
[PHP]
$hasaccess = 'true';
$mypost = '35';apply_filters("pmpro_has_membership_access_filter", bool $hasaccess, WP_post $mypost, WP_user $myuser, array $post_membership_levels);[/PHP]
e l'errore che mi riestituisce è questo
Parse error: syntax error, unexpected '$hasaccess' (T_VARIABLE), expecting ',' or ')' in /web/htdocs/www.dariopower.it/home/wp-content/themes/wplms/functions.php on line 66
-
L'errore dice che
$hasaccess
non è al posto giusto perché è preceduta da ```
bool[PHP] function mia_funzione ( bool $var ) { // Do something } [/PHP] nel tuo caso invece lo snippet va scritto così: [PHP] $hasaccess = true; $mypost = 35; apply_filters("pmpro_has_membership_access_filter", $hasaccess, $mypost, $myuser, $post_membership_levels); [/PHP] Le virgolette per i booleani e per gli integer si possono omettere, le altre variabili sono dichiarate da qualche parte?
-
Grazie mille, adesso non mi da errore, ma non funziona
gli ultimi parametri li ho eliminati, in quanto uno è relavtivo ad un range di utenti da inserire come id, mentre l'altro è relativo ai livelli a cui sono stati assengati ad una cerchia di utenti.
Ho provato ad inserire i valore sia con gli apici che senza, ma il contenuto non viene filtrato.
-
Cosa vuol dire che non funziona?
Mi devi spiegare meglio cosa devi fare.
-
Praticamente ho un area ristretta del mio sito accessibile solo se iscrivi al leve_1 , tutti gli utenti occasionali di passaggio e non registrati non possono vedere queste aree ristrette.
La ristrezione va per categoria, quindi tutti i post di quella categoria sono ristretti.
Volevo escludere un post da quella categoria e renderlo accessibile a tutti, ho trovato quindi un documento sul sito dello sviluppatore in cui dice che inserendo quel filtro e mettendo le variabili relative ai post ai livelli o agli utenti, i posto vengono resi pubblici a tutti.
Ho inserito il filtro come mi hai corretto tu, ma pur visitando quell'articolo, ancora appare ristretto.
-
Metti qui il link senza www e senza http che guardo la documentazione.
-
-
Ok, ora ho capito, qui c'è la documentazione della funzione che devi usare per appendere la tua callback all'evento "pmpro_has_membership_access_filter" https://developer.wordpress.org/reference/functions/add_filter/
Prova così.
-
Grazie overclokk, ho estrapolato qualcosa, ma purtroppo mi da errore appena entro in un contenuto ristretto senza essere autorizzato.
[PHP]
/* funzione escludi */
function my_pmpro_has_membership_access_filter( $hasaccess, $mypost, $myuser, $post_membership_levels ) {$id_contenuti = array(35,36);
// Controllo l’accesso if( ! $hasaccess ) { // Se questo post è associato ad un livello di accesso o è bloccato if ( ! empty( $post_membership_levels ) && pmproap_isPostLocked( $mypost->ID ) ) { // imposta l’accesso libero if ( in_array($mypost->id, $id_contenuti)) { $hasaccess = true; } } } return $hasaccess;
}
add_filter( 'pmpro_has_membership_access_filter', 'my_pmpro_has_membership_access_filter', 20, 4 );
[/PHP]mi da un errore su questa linea di codice
if ( ! empty( $post_membership_levels ) && pmproap_isPostLocked( $mypost->ID ) ) {
-
Quella funzione è un po' confusionaria, troppe if indentate che rendono difficile la lettura, e poi senza errore non posso sapere il problema.
Prova a fare così, parti al contrario:
[PHP]
function my_pmpro_has_membership_access_filter( $hasaccess, $mypost, $myuser, $post_membership_levels ) {// imposta l’accesso libero if ( in_array($mypost->id, [35,36])) { $hasaccess = true; } return $hasaccess;
}
add_filter( 'pmpro_has_membership_access_filter', 'my_pmpro_has_membership_access_filter', 20, 4 );
[/PHP]Non è completa, poi la sistemiamo ma prima meglio partire semplici.
-
In questo modo funziona tutto, o meglio, tutte le aree con restrizioni vengono ristrette, compreso gli articoli con id 35 e 36.
-
Cioè il 35 e il 36 sono sempre privati e non pubblici??
-
Si, esattamente
-
[PHP]
function my_pmpro_has_membership_access_filter( $hasaccess, $mypost, $myuser, $post_membership_levels ) {var_dump($hasaccess); return $hasaccess;
}
add_filter( 'pmpro_has_membership_access_filter', 'my_pmpro_has_membership_access_filter', 20, 4 );
[/PHP]Dimmi che cosa ti ritorna il var_dump, dovresti vederlo sullo schermo.
-
bool(false)
-
Ok, ora dimmi cosa ritornano i var_dump qui sotto, ho anche messo momentaneamente return true per vedere se visualizzi tutti i post anche senza avere i permessi, poi lo rimettiamo a posto, meglio se provi proprio nelle pagine 35 e 36:
[PHP]
function my_pmpro_has_membership_access_filter( $hasaccess, $mypost, $myuser, $post_membership_levels ) {var_dump( $mypost->id ); var_dump( in_array( $mypost->id, [35,36] ) ); return true;
}
add_filter( 'pmpro_has_membership_access_filter', 'my_pmpro_has_membership_access_filter', 20, 4 );
[/PHP]
-
ID 35 mi esce
string(0) "" bool(false)
ID 36 mi esce
string(0) "" bool(false)
id di una pagina qualsiasi protetta
string(0) "" bool(false)Gli articoli si vedono tutti, anche per chi ha restrizioni.
-
35 e 36 sono quelli giusti?
Che cosa ti ritornava var_dump( $mypost->id ); ?
-
mi ritornano 0
string(0) ""
per avere una maggiore certezza ho sostituito l'id 36 con 11116 che sono sicuro che sia protetto
[PHP]function my_pmpro_has_membership_access_filter( $hasaccess, $mypost, $myuser, $post_membership_levels ) {
var_dump( $mypost->id ); var_dump( in_array( $mypost->id, [35,11116] ) ); return true;
}
add_filter( 'pmpro_has_membership_access_filter', 'my_pmpro_has_membership_access_filter', 20, 4 );[/PHP]ma il risultato è sempre quello, credo che non rilevi l'id del post a questo punto.
-
Vediamo se almeno $mypost esiste:
var_dump( $mypost );