apply_filters ('the_content', $ content) vs do_shortcode ($ content)


21

Diciamo che ho un'opzione tema o un'area di testo postmeta personalizzata. Ora voglio eseguire più codici brevi, testi generali, immagini ecc.

Quali saranno le migliori pratiche e perché?

Opzione 1:

$content = //my text area data;
echo apply_filters('the_content', $content);

Opzione 2:

$content = //my text area data;
echo do_shortcode($content);

Spiegami gentilmente quale sarà la migliore pratica e perché.

MODIFICARE

Vorrei descrivere lo scenario in dettaglio. Sviluppo temi per i clienti con le loro esigenze. A volte, devo aggiungere meta post su post / pagine / tipi di post personalizzati, in modo che possano aggiungere codici brevi (dispositivo di scorrimento, modulo di contatto ecc.) O solo un semplice testo. È un testo archiviato.

Per far funzionare lo shortcode, utilizzo l' opzione 1 . Ora, ho sentito da qualcuno che questo è un modo sbagliato, e dovrei usare do_shortcode. Ma non mi hanno dato una spiegazione del perché è sbagliato. Ecco perché lo sto chiedendo.

L'intero processo può essere eseguito nell'editor di testo predefinito di wp. Ma ho bisogno di creare quelle opzioni per l'utilizzo specifico del modello, questo è quello che vogliono i miei clienti.

Risposte:


16

DOMANDA E RISPOSTA RIVISITATE

A volte ci sono queste domande che ti tormentano e ti danno la caccia più tardi nella vita, e questa è una di queste domande.

Questa domanda mi ha fatto pensare a una soluzione alternativa al problema. Come ho già detto, campi personalizzati e meta box sono lì per archiviare piccoli pezzi di metadati e non per fungere da estensione per pubblicare contenuti in cui è possibile eseguire shortcode e funzioni. Inoltre, come ho già affermato, il metodo è errato e non deve essere utilizzato

Quello che ho trovato interessante nel tuo post è che hai usato campi personalizzati e meta box per visualizzare inavvertitamente contenuti personalizzati dall'input dell'utente. Quindi mi sono seduto e ho pensato a un modo possibile per farlo funzionare e usare correttamente i dati del campo personalizzato e i dati della meta-box

Questa è la mia idea:

LO SCENARIO:

NOTA: questo può essere modificato per soddisfare qualsiasi esigenza

Su un singolo post, un utente desidera / richiede di mostrare dinamicamente i contenuti personalizzati dopo il post in base alle proprie esigenze. Questo dovrebbe essere dinamico. Il contenuto deve essere una query personalizzata e l'utente deve scegliere cosa mostrare quando vuole e cosa desidera

LA POSSIBILE SOLUZIONE:

Gli shortcode non funzioneranno qui, poiché gli shortcode non possono essere eseguiti in campi personalizzati. Nemmeno lo faràdo_shortcode funzionerà, poiché non è dinamico ed è codificato, qualcosa che non vogliamo. Come nella tua domanda, faremo uso di campi personalizzati. Ancora una volta sottolineo, non utilizzare il campo personalizzato per eseguire una query personalizzata o codici brevi

IL PROGRAMMA:

Useremo il campo personalizzato per salvare solo i nostri argomenti di query, tutto qui. Quindi, ciò che facciamo è, creiamo un campo personalizzato chiamato custom_query_arguments. Nella schermata dell'editor dei post, ora vedrai il tuo campo personalizzato, pronto per l'uso

Il prossimo passo sarà aggiungere i nostri argomenti di query personalizzati al nostro campo. Diciamo, dobbiamo mostrare 3 post della categoria 1 ordinati per titolo. Quindi i nostri argomenti di query dovrebbero apparire così: ( In formato stringa )

'posts_per_page=3&cat=1&orderby=title'

Questo è ciò che dovresti ora inserire nel tuo campo personalizzato. Una volta inserito, salva il valore del tuo campo personalizzato

Il prossimo sarà costruire la query personalizzata nel tuo single.php. Ciò che è necessario qui, dobbiamo ottenere il valore dal nostro campo personalizzato, che in realtà è il nostro argomento di query, e inviarlo a una nuova istanza WP_Queryper recuperare i post. Dobbiamo anche verificare se abbiamo effettivamente un valore salvato in quel campo personalizzato, se il campo personalizzato è vuoto, non mostrare nulla

IL CODICE:

Puoi provare qualcosa del genere in single.php subito dopo il singolo post.

$args = get_post_meta( get_queried_object_id(), 'custom_query_arguments', true );
// check if the custom field has a value
if( ! empty( $args ) ) {

    $q = new WP_Query( $args );

    if( $q->have_posts() ) {
        while( $q->have_posts() ) {
            $q->the_post();

            the_title();

        }
        wp_reset_postdata();
    }

} 

Se l'utente desidera rimuovere la query personalizzata, può semplicemente eliminare il valore del campo personalizzato e lasciare vuoto il campo personalizzato. Se deve mostrare la stessa query ma dalla categoria 10 e un totale di 5 post, può semplicemente sostituire il valore originale con il seguente

'posts_per_page=5&cat=10&orderby=title'

POCHE NOTE:

È importante utilizzare la sintassi e il formato corretti quando si immettono informazioni in questi campi e meta box personalizzati. Errori di sintassi o informazioni errate porteranno a output indesiderati o errori fatali. È importante informare i tuoi clienti di tali informazioni

RISPOSTA ORIGINALE

Non capisco cosa stai cercando di realizzare, ma da quello che posso dirti, sono due cose separate

OPZIONE 1

apply_filters('the_content', $content);viene utilizzato per applicare i filtri di contenuto a contenuti post non filtrati grezzi, che di solito provengono dall'uso di $post->post_content. Questi filtri includono il famoso filtro wp_autopche aggiunge tag p athe_content()

apply_filters('the_content', $content); viene generalmente utilizzato in combinazione con il punto in get_postscui si lavora direttamente con gli WP_Postoggetti senza usare, il setup_postdata( $post )che rende simili i tag modellothe_content() disponibili per l'uso

OPZIONE 2

do_shortcode è usato per aggiungere uno shortcode ovunque nei file modello all'esterno dell'editor di testo nel back-end della schermata dell'editor di pagine, fondamentalmente filtrando i codici brevi attraverso i loro hook.

L'uso corretto è il seguente

Esempio: aggiunta dello shortcode della galleria in un file modello

echo do_shortcode( '[gallery]' )

MODIFICA 1

Dai tuoi commenti, allora non userei affatto uno shortcode.

Se non hai intenzione di aggiungere un shortcode tramite l'editor di testo e lo aggiungi direttamente (hardcode) tramite do_shortcodein un file modello, preferirei semplicemente aggiungere la funzione al modello

Esempio:

Se si dispone della seguente funzione di shortcode

function footag_func( $atts ) {
    return "foo = {$atts['foo']}";
}
add_shortcode( 'footag', 'footag_func' );

Puoi semplicemente chiamare la funzione direttamente in un modello come

echo footag_func();

È molto più veloce in questo modo poiché non è necessario analizzare il codice funzione

MODIFICA 2

Ad essere sinceri qui, stai sbagliando completamente dalla tua modifica. Ecco perché non riuscivo a capire la tua domanda iniziale

A volte, ho bisogno di aggiungere post meta su post / pagine / tipi di post personalizzati, in modo che possano aggiungere codici brevi (dispositivo di scorrimento, modulo di contatto ecc.) O solo un semplice testo. È un testo archiviato.

Per far funzionare lo shortcode, uso l'opzione 1 .....

I campi personalizzati non sono campi di testo e sicuramente non sono pensati per essere utilizzati per eseguire codici brevi e, per tale motivo, cursori o moduli di contatto. I campi personalizzati non devono mai essere utilizzati per sostituire l'editor di testo nei post e nelle pagine.

Come ho affermato prima, apply_filters('the_content', $content); è pensato per applicare la formattazione al contenuto non elaborato dei post.

Hai due scelte qui

  • Utilizzare do_shortcodedirettamente nei file modello, che non consiglierei in quanto l'utilizzo della funzione è più veloce in quanto non è necessario analizzare il codice funzione

  • Utilizzare lo shortcode direttamente nell'editor di testo per la pagina / post specifica

Consiglio vivamente di dare una nuova occhiata alle tue strutture e a ciò che vuoi ottenere. I campi personalizzati non lo sono editor di testo e non possono eseguire shortcode o slider.

La mia raccomandazione sarebbe quella di esaminare forse i widget personalizzati o un sistema che è possibile utilizzare con i campi personalizzati


1
Pieter grazie per la spiegazione. Lo so già. Ma stavo chiedendo, quale opzione sarà più precisa se l'obiettivo è solo quello di produrre codici brevi da textarea post meta / tema. Sto usando l'opzione1 per ottenere il contenuto filtrato, ed è diventata un'abitudine per me. E usando l'opzione 1 anche solo per stampare un shortcode da un file di testo. Quindi stava chiedendo.
Sufi,

Ho visto la modifica. Ho capito il tuo punto. Ma il mio scenario è diverso. È come se ci fosse un file / area di testo e diversi codici brevi. Ora l'utente può inserire uno o più degli shortcode in quell'area. Quindi non posso usare direttamente una funzione. Devo mantenere quella parte dinamica.
Sufi,

Dov'è quel campo di testo, è lo stesso della schermata dell'editor della pagina di fine pagina
Pieter Goosen

Può essere un post meta. Oppure può essere un'opzione del tema. Uso il filtro the_content per entrambi.
Sufi,

Scusa, ma niente di tutto questo ha senso. Perché vorresti utilizzare gli shortcode nei campi personalizzati? Perché allora dovresti usare gli shortcode?
Pieter Goosen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.