+ Rispondi alla Discussione
Risultati da 1 a 26 di 26

Filtro replace testo

Ultimo Messaggio di overclokk il:
  1. #1
    Utente Premium L'avatar di Apthu
    Data Registrazione
    Aug 2012
    Località
    Verona
    Messaggi
    512

    Filtro replace testo

    Quando inserisco un'immagine nell'articolo appare l'url completa dell'immagine, io lo voglio accorciare perché l'immagine è interna nella cartella Media.
    Quindi l'ho impostato in modo che elimina la parte dell'URL, ma non funziona.

    Codice:
    function replace_text($text) {    
        $text = str_replace('img src="miosito.it', '', $text);
        return $text;
    }
    add_filter('the_content', 'replace_text');

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

    da quello che vedo in pratica stai eliminando 'img src="miosito.it' a tutto il testo, in questo modo rompi anche il o i tag img, che cosa vuoi ottenere esattamente?

  3. #3
    Utente Premium L'avatar di Apthu
    Data Registrazione
    Aug 2012
    Località
    Verona
    Messaggi
    512
    Ho letto che togliendo l'url il caricamento è più veloce perché pesca i'immagine direttamente da Wordpress.

  4. #4
    Moderatore L'avatar di overclokk
    Data Registrazione
    Jun 2010
    Località
    Persiceto (BO)
    Messaggi
    3,327
    Segui overclokk su Twitter Visita il canale Youtube di overclokk
    Se vuoi migliorare il caricamento delle immagini usa uno dei tanti plugin che applicano il lazyload, cambiare l'url per renderla relativa invece che assoluta è pressoché ininfluente per le performance.

    Se invece vuoi farlo a scopo didattico allora ci possiamo lavorare su.

  5. #5
    Utente Premium L'avatar di Apthu
    Data Registrazione
    Aug 2012
    Località
    Verona
    Messaggi
    512
    Ho già il plugin WP-Optimize. Comunque se mi dici così lascio l'url intero come lo mette Wordpress di default.

    C'è un'altra cosa che non capisco su questo codice: l'ho messo in functions.php child e funziona, mi mette class="links" ma lo modifica solo nel database. Se entro nell'articolo e clicco Modifica articolo, il codice appare senza questa classe che però c'è nel database e che funziona.
    Se invece nel database SQL metto il codice replace mi fa la modifica anche nel template, capisci?


    Codice:
    function replace_text($text) {    
        $text = str_replace('<a href', '<a class="links" href', $text);
        return $text;
    }
    add_filter('the_content', 'replace_text');



    Ultima modifica di Apthu; 13-05-20 alle 12:13

  6. #6
    Moderatore L'avatar di overclokk
    Data Registrazione
    Jun 2010
    Località
    Persiceto (BO)
    Messaggi
    3,327
    Segui overclokk su Twitter Visita il canale Youtube di overclokk
    Citazione Originariamente Scritto da Apthu Visualizza Messaggio
    Codice:
    function replace_text($text) {    
        $text = str_replace('<a href', '<a class="links" href', $text);
        return $text;
    }
    add_filter('the_content', 'replace_text');


    Questo snippet funziona solo lato front end del tuo sito perché usa l'hook 'the_content'.

    Se vuoi filtrare il testo al salvataggio allora l'hook da usare è differente.

  7. #7
    Utente Premium L'avatar di Apthu
    Data Registrazione
    Aug 2012
    Località
    Verona
    Messaggi
    512
    Che hock devo usare?

  8. #8
    Moderatore L'avatar di overclokk
    Data Registrazione
    Jun 2010
    Località
    Persiceto (BO)
    Messaggi
    3,327
    Segui overclokk su Twitter Visita il canale Youtube di overclokk
    Potresti usare 'save_post' https://developer.wordpress.org/refe...oks/save_post/ o ancora meglio "save_post_{$post->post_type}" https://developer.wordpress.org/refe...ost-post_type/

  9. #9
    Utente Premium L'avatar di Apthu
    Data Registrazione
    Aug 2012
    Località
    Verona
    Messaggi
    512
    Li ho provati entrambi, ma non funzionano del tutto, non fanno la modifica nemmeno nel database.

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

  11. #11
    Utente Premium L'avatar di Apthu
    Data Registrazione
    Aug 2012
    Località
    Verona
    Messaggi
    512
    Che non lo modifica nemmeno nel database, con the_content lo modificava almeno lì anche se non si vedeva nel post. Questi 2 invece non fanno nulla.

  12. #12
    Moderatore L'avatar di overclokk
    Data Registrazione
    Jun 2010
    Località
    Persiceto (BO)
    Messaggi
    3,327
    Segui overclokk su Twitter Visita il canale Youtube di overclokk
    Hai visto la documentazione?

    Come e dove hai scritto il codice?

  13. #13
    Utente Premium L'avatar di Apthu
    Data Registrazione
    Aug 2012
    Località
    Verona
    Messaggi
    512
    Si l'ho vista, ma non ci capisco molto. Il codice è questo in functions.php child:

    Codice:
    function replace_text($text) {   
        $text = str_replace('a href', 'a class="links" href', $text);
        return $text;
    }
    add_filter('save_post', 'replace_text');
    Ultima modifica di Apthu; 13-05-20 alle 14:36

  14. #14
    Moderatore L'avatar di overclokk
    Data Registrazione
    Jun 2010
    Località
    Persiceto (BO)
    Messaggi
    3,327
    Segui overclokk su Twitter Visita il canale Youtube di overclokk
    Non funziona perché 'save_post' passa tre parametri di cui il primo è l'id del post, il secondo l'oggetto del post e il terzo un valore boleano che indica se stai aggiornando o salvando un nuovo contenuto, tu hai usato la tua funzione senza cambiare nulla e così non funzionerà mai, anzi, probabilmente nel log ci sono degli errori.

    Add ogni modo c'è un hook che viene eseguito prima di 'save_post' che è 'wp_insert_post_data' https://codex.wordpress.org/Plugin_A...sert_post_data

    Se leggi bene la documentazione ti da uno snippet di esempio:

    Codice PHP:
    function filter_handler$data $postarr ) {
      
    // do something with the post data
      
    return $data;
    }

    add_filter'wp_insert_post_data''filter_handler''99'); 
    La variabile $data è un array e per accedere al contenuto puoi usare la chiave 'post_content' in questo modo:

    Codice PHP:
    $data['post_content'
    In questo modo puoi cambiare il contenuto dell'articolo.

  15. #15
    Utente Premium L'avatar di Apthu
    Data Registrazione
    Aug 2012
    Località
    Verona
    Messaggi
    512
    Mi hai dato un nuovo codice? Io non so bene i termini tecnici inglesi e francamente non è che intendo fare una scuola serale per questo codice.

    Non puoi darmi il codice corretto tu?

    Anche così non funziona

    Codice PHP:
    function replace_text($text) {   
        
    $text str_replace('a href''a class="links" href'$text);
        return 
    $text;
    }
    add_filter('save_post''replace_text'103); 
    Ultima modifica di Apthu; 13-05-20 alle 17:11

  16. #16
    Moderatore L'avatar di overclokk
    Data Registrazione
    Jun 2010
    Località
    Persiceto (BO)
    Messaggi
    3,327
    Segui overclokk su Twitter Visita il canale Youtube di overclokk
    Il mio ultimo post è proprio il codice che ti serve, devi solo adattarlo alle tue esigenze aggiungendo per str_replace che hai nel tuo codice, ho solo sostituito l'hook con uno più adatto allo scopo, tutto il resto è invariato.

  17. #17
    Utente Premium L'avatar di Apthu
    Data Registrazione
    Aug 2012
    Località
    Verona
    Messaggi
    512
    Bene, così funziona, salvo l'articolo e aggiorno la pagina e appare la modifica:

    Codice PHP:
    function filter_handler$data $postarr ) {  
        
    $data str_replace('a href''a class="links" href'$data);  
        return 
    $data;
    }
    add_filter'wp_insert_post_data''filter_handler''99'); 
    Grazie.

  18. #18
    Moderatore L'avatar di overclokk
    Data Registrazione
    Jun 2010
    Località
    Persiceto (BO)
    Messaggi
    3,327
    Segui overclokk su Twitter Visita il canale Youtube di overclokk
    La variabile $data è un array e sopra ti avevo indicato come usarla per il contenuto:

    Codice PHP:
    $data['post_content'

  19. #19
    Utente Premium L'avatar di Apthu
    Data Registrazione
    Aug 2012
    Località
    Verona
    Messaggi
    512
    Perché allora funziona lo stesso? Dove lo devo mettere quell'avanzo di codice, così?

    function filter_handler( $data['post_content'], $postarr ) {
    $data = str_replace('a href', 'a class="links" href', $data);
    return
    $data;
    }
    add_filter( 'wp_insert_post_data', 'filter_handler', '99', 2 );

  20. #20
    Moderatore L'avatar di overclokk
    Data Registrazione
    Jun 2010
    Località
    Persiceto (BO)
    Messaggi
    3,327
    Segui overclokk su Twitter Visita il canale Youtube di overclokk
    Funziona lo stesso perché la funzione str_replace ($search, $replace, $subject, &$count = null) accetta sia stringe che array di stringhe nei suoi primi 3 parametri https://www.php.net/manual/en/function.str-replace.php e visto che $data è un array che contiene stringhe allora non da errore.

    Però nel tuo caso è meglio essere più espliciti nel codice per evitare incomprensioni inserendo solo la parte che deve essere modificata e non tutto l'array così eviti anche che se un giorno tu volessi usare 'a href' nel titolo questo non venga sostituito.

    Di seguito la tua funzione semplificata con solo quello che ti serve.

    Codice PHP:
    function filter_handler( array $data ) {
       
    $data['post_content'] = str_replace('a href''a class="links" href'$data['post_content']);
       return 
    $data;
    }
    add_filter'wp_insert_post_data''filter_handler''99' ); 

  21. #21
    Utente Premium L'avatar di Apthu
    Data Registrazione
    Aug 2012
    Località
    Verona
    Messaggi
    512
    Citazione Originariamente Scritto da overclokk Visualizza Messaggio
    Però nel tuo caso è meglio essere più espliciti nel codice per evitare incomprensioni inserendo solo la parte che deve essere modificata e non tutto l'array così eviti anche che se un giorno tu volessi usare 'a href' nel titolo questo non venga sostituito.
    Non ho capito questa parte: se io inserisco a href lui me lo sostituisce ne più ne meno, come fa a distinguere in che punto del sito si trova?

  22. #22
    Moderatore L'avatar di overclokk
    Data Registrazione
    Jun 2010
    Località
    Persiceto (BO)
    Messaggi
    3,327
    Segui overclokk su Twitter Visita il canale Youtube di overclokk
    Appunto, non può sapere dove lo sostituirlo se non sei più esplicito, "lo voglio sostituire solo qui".

    Un array è semplicemente un contenitore con chiavi e valori:

    Codice PHP:
    array (
        
    => 'Valore',
        
    => 'Valore',
        
    => 'Valore',
        
    => 'Valore',

    Nell'array $data (che è un array associativo) sono contenute le informazioni del post:

    Codice PHP:
    $data[
       
    'post_content' 'Lorem Ipsum',
       
    'post_title' 'Titolo delpost',
       
    // ... ecc ecc
    ]; 
    Per avere solo e soltanto il contenuto dell'editor devi indicare la chiave che in questo caso è 'post_content', ovvero la posizione del valore che vuoi modificare:

    Codice PHP:
    $data['post_content']; 
    Ora visto che la funzione str_replace accetta anche gli array quello che fa è cercare 'a href' in ogni settore dell'array quindi come puoi ben capire se tu per esempio hai 'a href' anche nel titolo te la sostituisce anche li, ora è una possibilità molto remota che tu inserisca 'a href' nel titolo però è importante da subito cercare di limitare il più possibile futuri bug che poi diventerebbero problematici da trovare proprio per il motivo detto sopra.

    Ad ogni modo se non ti ho convinto prova direttamente e vedi quello che succede.

    Qui c'è la spiegazione di cosa sono gli array https://www.php.net/manual/en/language.types.array.php

  23. #23
    Utente Premium L'avatar di Apthu
    Data Registrazione
    Aug 2012
    Località
    Verona
    Messaggi
    512
    Sto provando il tuo ultimo, possono andarmi bene entrambi perché a me serve mettere quel css in tutti i link dell'articolo (non del titolo).
    Allora potrò usare questo codice temporaneamente anche per altri replace senza dover entrare nel database in SQL e mettere la classica stringa:

    Codice PHP:
    UPDATE wp_posts SET post_content REPLACE(post_content'vecchio''nuovo'); 

  24. #24
    Moderatore L'avatar di overclokk
    Data Registrazione
    Jun 2010
    Località
    Persiceto (BO)
    Messaggi
    3,327
    Segui overclokk su Twitter Visita il canale Youtube di overclokk
    Non l'ho scritto prima però lo scrivo ora, prima di fare qualsiasi modifica sul database fai un backup e assicurati che sia funzionante, poi puoi fare tutte le modifiche che vuoi.

  25. #25
    Utente Premium L'avatar di Apthu
    Data Registrazione
    Aug 2012
    Località
    Verona
    Messaggi
    512
    Il backup lo faccio di routine. I codici normalmente li provo nel sito in locale. Con mac è una menata tutte le volte, quando modifico il css devo poi sempre aggiornare Safari, mentre se modifico un altro file non serve aggiornare.

    Funziona.

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

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