• Moderatore •

    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?

  • User Attivo •

    Grazie mille, adesso non mi da errore, ma non funziona :bigsmile:
    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.


  • Moderatore •

    Cosa vuol dire che non funziona?

    Mi devi spiegare meglio cosa devi fare.


  • User Attivo •

    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.


  • Moderatore •

    Metti qui il link senza www e senza http che guardo la documentazione.


  • User Attivo •

  • Moderatore •

    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ì.


  • User Attivo •

    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 ) ) {


  • Moderatore •

    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.


  • User Attivo •

    In questo modo funziona tutto, o meglio, tutte le aree con restrizioni vengono ristrette, compreso gli articoli con id 35 e 36.


  • Moderatore •

    Cioè il 35 e il 36 sono sempre privati e non pubblici??


  • User Attivo •

    Si, esattamente


  • Moderatore •

    [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.


  • User Attivo •

    bool(false)


  • Moderatore •

    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]


  • User Attivo •

    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.


  • Moderatore •

    35 e 36 sono quelli giusti?

    Che cosa ti ritornava var_dump( $mypost->id ); ?


  • User Attivo •

    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.


  • Moderatore •

    Vediamo se almeno $mypost esiste:

    var_dump( $mypost );


  • User Attivo •

    Credo che tu abbia fatto bingo!!! :figo2:
    Questo è quello che appare all'inizio di tutto

    
    object(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