- Home
- Categorie
- Coding e Sistemistica
- WordPress
- Inserire apply filters
-
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 );
-
Credo che tu abbia fatto bingo!!!
Questo è quello che appare all'inizio di tuttoobject(WP_Post)#30302 (24) { ["ID"]=> int(35) ["post_author"]=> string(1) "1" ["post_date"]=> string(19) "2014-03-24 00:28:00" ["post_date_gmt"]=> string(19) "2014-03-24 00:28:00" ["post_content"]=> string(10974) " segue il solo contentuo del post
Questo è quello che appare prima dell'articolo
"["post_title"]=> string(22) "La metrica di un brano" ["post_excerpt"]=> string(0) "" ["post_status"]=> string(7) "publish" ["comment_status"]=> string(4) "open" ["ping_status"]=> string(6) "closed" ["post_password"]=> string(0) "" ["post_name"]=> string(22) "la-metrica-di-un-brano" ["to_ping"]=> string(0) "" ["pinged"]=> string(0) "" ["post_modified"]=> string(19) "2020-05-10 13:33:19" ["post_modified_gmt"]=> string(19) "2020-05-10 11:33:19" ["post_content_filtered"]=> string(0) "" ["post_parent"]=> int(0) ["guid"]=> string(48) "https://www.dariopower.it/la-metrica-di-un-brano/" ["menu_order"]=> int(0) ["post_type"]=> string(4) "post" ["post_mime_type"]=> string(0) "" ["comment_count"]=> string(1) "4" ["filter"]=> string(3) "raw" } string(0) "" bool(false) int(35) ["post_author"]=> string(1) "1" ["post_date"]=> string(19) "2014-03-24 00:28:00" ["post_date_gmt"]=> string(19) "2014-03-24 00:28:00" ["post_content"]=> string(10974) " segue quindi il contenuto dell'articolo
-
Ho trovato il problema, colpa mia che non me ne sono accorto, l'ID è maiuscolo e non minuscolo, e son cose che dovrei sapere a memoria
Prova:
var_dump( $mypost->ID );E probabilmente ora dovrebbe funzionare:
[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]