+ Rispondi alla Discussione
Risultati da 1 a 37 di 37

Inserire apply filters

Ultimo Messaggio di DarioMarco il:
  1. #1
    User
    Data Registrazione
    Dec 2007
    Messaggi
    375

    Inserire apply filters

    Salve a tutti, dovrei inserire un codice in wordpress, o meglio un filter, ma non saprei come gestirlo, leggendo un po' la documentazione credo di doverlo inserire nel file function.php e modificarne i parametri, ma mi da un errore di sintassi.

    Quindi vorrei sapere se è corretta la mia procedura, oppure l'errore è dovuto al fatto che non devo inserirlo nel file functions.php

    Grazie per il vostro aiuto.

  2. #2
    Moderatore L'avatar di overclokk
    Data Registrazione
    Jun 2010
    Località
    Persiceto (BO)
    Messaggi
    3,328
    Segui overclokk su Twitter Visita il canale Youtube di overclokk
    Ciao DarioMarco,

    mi serve sapere quele errore ti da e vedere lo snippet così come lo aggiungi nel file per capire meglio il problema.

  3. #3
    User
    Data Registrazione
    Dec 2007
    Messaggi
    375
    Ciao Overklock e grazie per la tua risposta, io inserisco questo nel file function.php del mio tema
    Codice PHP:
    $hasaccess 'true';
    $mypost '35';

    apply_filters("pmpro_has_membership_access_filter"bool $hasaccessWP_post $mypostWP_user $myuser, array $post_membership_levels); 
    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

  4. #4
    Moderatore L'avatar di overclokk
    Data Registrazione
    Jun 2010
    Località
    Persiceto (BO)
    Messaggi
    3,328
    Segui overclokk su Twitter Visita il canale Youtube di overclokk
    L'errore dice che
    Codice:
    $hasaccess
    non è al posto giusto perché è preceduta da
    Codice:
    bool
    , ora tutto lo snippet è errato perché hai aggiunto il type prima di ogni variabile che vuoi passare ad
    Codice PHP:
    apply_fllters() 
    , il tipo di valore si usa solo nella dichiarazione dei parametri passati ad una funzione, in quel caso non sono consentiti, ovvero nel caso qui sotto è ok

    Codice PHP:
    function mia_funzione bool $var ) {
        
    // Do something

    nel tuo caso invece lo snippet va scritto così:

    Codice PHP:
    $hasaccess true;
    $mypost 35;

    apply_filters("pmpro_has_membership_access_filter"$hasaccess$mypost$myuser$post_membership_levels); 
    Le virgolette per i booleani e per gli integer si possono omettere, le altre variabili sono dichiarate da qualche parte?

  5. #5
    User
    Data Registrazione
    Dec 2007
    Messaggi
    375
    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.

  6. #6
    Moderatore L'avatar di overclokk
    Data Registrazione
    Jun 2010
    Località
    Persiceto (BO)
    Messaggi
    3,328
    Segui overclokk su Twitter Visita il canale Youtube di overclokk
    Cosa vuol dire che non funziona?

    Mi devi spiegare meglio cosa devi fare.

  7. #7
    User
    Data Registrazione
    Dec 2007
    Messaggi
    375
    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.

  8. #8
    Moderatore L'avatar di overclokk
    Data Registrazione
    Jun 2010
    Località
    Persiceto (BO)
    Messaggi
    3,328
    Segui overclokk su Twitter Visita il canale Youtube di overclokk
    Metti qui il link senza www e senza http che guardo la documentazione.

  9. #9
    User
    Data Registrazione
    Dec 2007
    Messaggi
    375
    paidmembershipspro.com/hook/pmpro_has_membership_access_filter/

    Grazie mille

  10. #10
    Moderatore L'avatar di overclokk
    Data Registrazione
    Jun 2010
    Località
    Persiceto (BO)
    Messaggi
    3,328
    Segui overclokk su Twitter Visita il canale Youtube di overclokk
    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/refe...ns/add_filter/

    Prova così.

  11. #11
    User
    Data Registrazione
    Dec 2007
    Messaggi
    375
    Grazie overclokk, ho estrapolato qualcosa, ma purtroppo mi da errore appena entro in un contenuto ristretto senza essere autorizzato.

    Codice 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); 
    mi da un errore su questa linea di codice
    if ( ! empty( $post_membership_levels ) && pmproap_isPostLocked( $mypost->ID ) ) {

  12. #12
    Moderatore L'avatar di overclokk
    Data Registrazione
    Jun 2010
    Località
    Persiceto (BO)
    Messaggi
    3,328
    Segui overclokk su Twitter Visita il canale Youtube di overclokk
    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:

    Codice 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); 
    Non è completa, poi la sistemiamo ma prima meglio partire semplici.

  13. #13
    User
    Data Registrazione
    Dec 2007
    Messaggi
    375
    In questo modo funziona tutto, o meglio, tutte le aree con restrizioni vengono ristrette, compreso gli articoli con id 35 e 36.

  14. #14
    Moderatore L'avatar di overclokk
    Data Registrazione
    Jun 2010
    Località
    Persiceto (BO)
    Messaggi
    3,328
    Segui overclokk su Twitter Visita il canale Youtube di overclokk
    Cioè il 35 e il 36 sono sempre privati e non pubblici??

  15. #15
    User
    Data Registrazione
    Dec 2007
    Messaggi
    375
    Si, esattamente

  16. #16
    Moderatore L'avatar di overclokk
    Data Registrazione
    Jun 2010
    Località
    Persiceto (BO)
    Messaggi
    3,328
    Segui overclokk su Twitter Visita il canale Youtube di overclokk
    Codice 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); 
    Dimmi che cosa ti ritorna il var_dump, dovresti vederlo sullo schermo.

  17. #17
    User
    Data Registrazione
    Dec 2007
    Messaggi
    375
    bool(false)

  18. #18
    Moderatore L'avatar di overclokk
    Data Registrazione
    Jun 2010
    Località
    Persiceto (BO)
    Messaggi
    3,328
    Segui overclokk su Twitter Visita il canale Youtube di overclokk
    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:

    Codice PHP:
    function my_pmpro_has_membership_access_filter$hasaccess$mypost$myuser$post_membership_levels ) {

        
    var_dump$mypost->id );
        
    var_dumpin_array$mypost->id, [35,36] ) );

        return 
    true;
    }
    add_filter'pmpro_has_membership_access_filter''my_pmpro_has_membership_access_filter'20); 

  19. #19
    User
    Data Registrazione
    Dec 2007
    Messaggi
    375
    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.


  20. #20
    Moderatore L'avatar di overclokk
    Data Registrazione
    Jun 2010
    Località
    Persiceto (BO)
    Messaggi
    3,328
    Segui overclokk su Twitter Visita il canale Youtube di overclokk
    35 e 36 sono quelli giusti?

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

  21. #21
    User
    Data Registrazione
    Dec 2007
    Messaggi
    375
    mi ritornano 0
    Codice:
    string(0) "" 
    per avere una maggiore certezza ho sostituito l'id 36 con 11116 che sono sicuro che sia protetto

    Codice PHP:
    function my_pmpro_has_membership_access_filter$hasaccess$mypost$myuser$post_membership_levels ) {

        
    var_dump$mypost->id );
        
    var_dumpin_array$mypost->id, [35,11116] ) );

        return 
    true;
    }
    add_filter'pmpro_has_membership_access_filter''my_pmpro_has_membership_access_filter'20); 
    ma il risultato è sempre quello, credo che non rilevi l'id del post a questo punto.

  22. #22
    Moderatore L'avatar di overclokk
    Data Registrazione
    Jun 2010
    Località
    Persiceto (BO)
    Messaggi
    3,328
    Segui overclokk su Twitter Visita il canale Youtube di overclokk
    Vediamo se almeno $mypost esiste:

    var_dump( $mypost);

  23. #23
    User
    Data Registrazione
    Dec 2007
    Messaggi
    375
    Credo che tu abbia fatto bingo!!!
    Questo è quello che appare all'inizio di tutto
    Codice:
    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
    Codice:
     "["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

  24. #24
    Moderatore L'avatar di overclokk
    Data Registrazione
    Jun 2010
    Località
    Persiceto (BO)
    Messaggi
    3,328
    Segui overclokk su Twitter Visita il canale Youtube di overclokk
    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:

    Codice 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); 

  25. #25
    User
    Data Registrazione
    Dec 2007
    Messaggi
    375
    Funziona!!!!!

  26. #26
    Moderatore L'avatar di overclokk
    Data Registrazione
    Jun 2010
    Località
    Persiceto (BO)
    Messaggi
    3,328
    Segui overclokk su Twitter Visita il canale Youtube di overclokk
    Ottimo

    Ora come avevo detto in precedenza puliamo un po' questo snippet per renderlo più moderno e più robusto, funziona solo da PHP >= 7 (maggiore/uguale a).

    Codice PHP:
    /**
     * @param bool $has_access
     * @param WP_Post $post
     * @return bool
     */
    function allow_free_access_to_posts_for_pmprobool $has_access, \WP_Post $post ): bool {

        if ( 
    in_array$post->ID, [35,36] ) ) {
            
    $has_access true;
        }

        return 
    $has_access;
    }

    add_filter'pmpro_has_membership_access_filter'__NAMESPACE__ '\allow_free_access_to_posts_for_pmpro'20); 
    Spiegone:

    Ho rinominato la funzione dandole un nome che indicasse l'intento, questo aiuta se fra qualche tempo dobbiamo rimetterci mano e subito a prima occhiata sappiamo perché esiste senza bisogno di dover scrivere i commenti.

    Ho inserito il type per i parametri.

    Ho ridotto il numero dei parametri a 2 perché sono gli unici utilizzati, riducendo anche a 2 nel filtro.

    Ho modificato il nome dei parametri per una lettura migliore.

    Ho aggiunto il return type declaration bool perché la funzione ritorna sempre un booleano.

    Ho aggiunto la costante __NAMESPACE__ nel nome della callback un po' più complesso da spiegare https://www.php.net/manual/en/language.namespaces.php ma sempre meglio usarla.

    Il commento sopra la funzione è opzionale.

    Già così abbiamo migliorato la qualita del codice, se hai PHP 7 o superiore e la vuoi provare dimmi se ci sono errori perché io non avendo pmpro non ho potuto provarla.

    PS: Non è ancora pulita al 100% perché l'array [35,36] con l'ID dei post ha ancora il problema che deve essere modificato a mano (hardcoding) tutte le volte che cambia qualcosa e questo non va bene, per ora funziona ma se diventa qualcosa che in futuro crea problemi bisogna trovare una soluzione differente (code smell).
    Ultima modifica di overclokk; 16-05-20 alle 12:25

  27. #27
    User
    Data Registrazione
    Dec 2007
    Messaggi
    375
    Ho incollato il nuovo codice e va tutto bene,
    la mia versione php è la 7.1.11
    Ho capito bene tutte le modifiche tranne namespace che andrò a leggermi.
    Per quanto riguarda l'array, non è tanto un problema, perchè credo che i post non saranno tantissimi e comunque un numero gestibile, piu che altro bisogna rimetterla nel file functions ogni volta che viene aggiornato il tema.
    Grazie mille per la tua pazienza e per quello che fai per noi.

  28. #28
    Moderatore L'avatar di overclokk
    Data Registrazione
    Jun 2010
    Località
    Persiceto (BO)
    Messaggi
    3,328
    Segui overclokk su Twitter Visita il canale Youtube di overclokk
    Ad ogni problema c'è una o più soluzioni, nel tuo caso le soluzioni sono 3, crei un child theme, crei un plugin o crei un MU plugin per inserire questo e futuri snippet, il beneficio primario è proprio per il fatto che non avrai problemi con gli aggiornamenti del tema, il secondo è che il tuo file functions.php rimarrà il più snello possibile che è cosa buona e giusta (un giorno ne parlerò su questo argomento sul mio canale yt), me per farla breve meno usi il file functions.php meglio è, in particolar modo quando devi aggiungere snippet che non hanno nulla a che fare con il tema, tu in questo caso vuoi modificare il comportamente di un plugin.

    Il metodo che preferisco è quello di creare un plugin dedicato perché mi consente una migliore separazione delle funzionalità e manutenzione nel futuro, per esempio potresti sviluppare un plugin per aggiungere la possibilità di poter decidere da backend quali post permettere e quali no, ma questo richiede molto più tempo per essere sviluppato.

    I plugin li puoi attivare e disattivare al bosogno, i mu-plugin rimangono sempre attivi, i primi vanno nella cartella plugins e i secondi nella cartella mu-plugins (che se non esiste devi crearla)

    I plugin sono molto semplici da creare, basta un file con il nome che vuoi e l'intestazione da usare in questo file che trovi qui con tutta la documentazione https://developer.wordpress.org/plug...-requirements/

  29. #29
    User
    Data Registrazione
    Dec 2007
    Messaggi
    375
    Diciamo che il plugin è la scelta migliore, ho creato qualche plugin semplicissimo a livello di hello world, ma non saprei come farlo funzionare, o meglio se metto la funzione php nel file principale del plugin poi non saprei come attivarlo, gli altri plugin che ho fatto per mia comodità avevano tutti uno shortcode da mettere nel post.

  30. #30
    Moderatore L'avatar di overclokk
    Data Registrazione
    Jun 2010
    Località
    Persiceto (BO)
    Messaggi
    3,328
    Segui overclokk su Twitter Visita il canale Youtube di overclokk
    I plugin si creano tutti nello stesso modo, puoi prendere esempio da quelli che hai già creato, vedi il link alla documentazione sopra.

  31. #31
    User
    Data Registrazione
    Dec 2007
    Messaggi
    375
    Ho creato un mu-plugin che è un metodo spettacolare! Mi hai aperto un mondo nuovo!
    Ma dopo aver creato il file php con il codice funziona tutto, ma il tempo di pochi minuti e il sistema mi elimina il plugin.
    Davvero strano.

  32. #32
    Moderatore L'avatar di overclokk
    Data Registrazione
    Jun 2010
    Località
    Persiceto (BO)
    Messaggi
    3,328
    Segui overclokk su Twitter Visita il canale Youtube di overclokk
    Comportamento molto strano, non dovrebbe succedere, ma in locale o in remoto?

  33. #33
    User
    Data Registrazione
    Dec 2007
    Messaggi
    375
    In remoto, sia sul file manager del mio hosting, che su quello di wordpress che con un client ftp.
    Sul client mi dava errore sulla riga "function" ma credo forse sia impostato ancora sul vecchio php 3 o 5 .

  34. #34
    Moderatore L'avatar di overclokk
    Data Registrazione
    Jun 2010
    Località
    Persiceto (BO)
    Messaggi
    3,328
    Segui overclokk su Twitter Visita il canale Youtube di overclokk
    L'ultimo snippet funziona solo con la versione 7 di PHP.

    I file caricali sempre via ftp.

  35. #35
    User
    Data Registrazione
    Dec 2007
    Messaggi
    375
    Dopo aver fatto parecchie prove ho trovato il guaio, questi due parametri provocano un errore, eppure sono dei banali commenti

    Codice:
    Text Domain: nn
    Domain Path: /languages
    Adesso funziona tutto, grazie mille per il tuo aiuto e per la tua pazienza !!!

  36. #36
    Moderatore L'avatar di overclokk
    Data Registrazione
    Jun 2010
    Località
    Persiceto (BO)
    Messaggi
    3,328
    Segui overclokk su Twitter Visita il canale Youtube di overclokk
    Ottimo

  37. #37
    User
    Data Registrazione
    Dec 2007
    Messaggi
    375
    Grazie ancora <3

+ Rispondi alla Discussione

^ Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •  
  • Il codice BB è Attivato
  • Le faccine sono Attivato
  • Il codice [IMG] è Attivato
  • Il codice [VIDEO] è Attivato
  • Il codice HTML è Disattivato
  • Trackbacks Attivato
  • Pingback Attivato
  • Refback Attivato

SEO by vBSEO 3.6.0 PL2 ©2011, Crawlability, Inc.