• 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
    

  • Moderatore

    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 :fumato:

    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]