apply_filters (‘the_content’, $ content) vs do_shortcode ($ content)

Sagen wir, ich habe eine Themenoption oder einen benutzerdefinierten Postmeta-Textbereich. Jetzt möchte ich mehrere Shortcodes, allgemeine Texte, Bilder usw. ausführen.

Was wird Best Practice und warum?

Option 1:

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

Option 2:

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

Bitte erkläre mir, welches ist die beste Praxis und warum.

BEARBEITEN

Lassen Sie mich das Szenario im Detail beschreiben. Ich entwickle Themen für Kunden mit ihren Anforderungen. Manchmal muss ich Post-Metas auf Post / Seiten / benutzerdefinierte Post-Typen hinzufügen, damit sie Shortcodes (Schieberegler, Kontaktformular usw.) oder nur einen einfachen Text hinzufügen können. Es ist ein Text eingereicht.

Um den Shortcode funktionieren zu lassen, benutze ich Option 1 . Jetzt habe ich von jemandem gehört, dass dies ein falscher Weg ist, und ich sollte do_shortcode . Aber sie haben mir keine Erklärung gegeben, warum es falsch ist. Deshalb frage ich.

Dieser ganze process kann im Standard-Texteditor von wp durchgeführt werden. Aber ich muss diese Optionen für die Vorlage spezifische Verwendung erstellen, das ist, was meine Kunden wollen.

Solutions Collecting From Web of "apply_filters (‘the_content’, $ content) vs do_shortcode ($ content)"

FRAGE UND ANTWORT BERICHTET

Es gibt manchmal diese Fragen, die dich nerven und dich später im Leben wieder jagen, und das ist eine solche Frage.

Diese Frage ließ mich über eine alternative Lösung des Problems nachdenken. Wie bereits erwähnt, sind benutzerdefinierte Felder und Metaboxen dazu da, kleine Teile von Metadaten zu speichern und nicht als eine Erweiterung für den Post-Inhalt zu fungieren, wo Sie Shortcode und functionen ausführen können. Wie bereits erwähnt, ist Ihre Methode falsch und sollte nicht verwendet werden

Was ich in Ihrem Beitrag interessant fand, ist, dass Sie benutzerdefinierte Felder und Meta-Felder verwendet haben, um versehentlich benutzerdefinierte Inhalte aus Benutzereingaben anzuzeigen. Also saß ich und dachte über einen möglichen Weg nach, wie dies funktioniert und die benutzerdefinierten Felddaten und Meta-Box-Daten korrekt verwendet

Das ist meine Idee:

DAS SZENARIO:

HINWEIS: Dies kann geändert werden, um jedem Bedarf gerecht zu werden

Bei einem einzelnen Post möchte / muss ein Benutzer nach dem Post dynamisch benutzerdefinierten Inhalt anzeigen, um seinen Anforderungen zu entsprechen. Dies sollte dynamisch sein. Der Inhalt sollte eine benutzerdefinierte Abfrage sein, und der Benutzer muss auswählen, was er anzeigen möchte, wann immer er möchte und was er möchte

DIE MÖGLICHE LÖSUNG:

Shortcodes funktionieren hier nicht, da Shortcodes in benutzerdefinierten Feldern nicht ausgeführt werden können. Auch wird do_shortcode funktionieren, da es nicht dynamisch und fest do_shortcode ist, etwas, was wir nicht wollen. Wie in Ihrer Frage werden wir ein benutzerdefiniertes Feld verwenden. Ich betone nochmals, verwende das benutzerdefinierte Feld nicht, um eine benutzerdefinierte Abfrage oder Shortcodes auszuführen

DER PLAN:

Wir werden das benutzerdefinierte Feld verwenden, um nur unsere Abfrageargumente zu speichern, das ist alles. Also, was wir machen, erstellen wir ein benutzerdefiniertes Feld namens custom_query_arguments . In Ihrem Post-Editor-Bildschirm sehen Sie nun Ihr benutzerdefiniertes Feld, das Sie verwenden können

Der nächste Schritt besteht darin, unsere benutzerdefinierten Abfrageargumente zu unserem Feld hinzuzufügen. Nehmen wir an, wir müssen 3 Beiträge aus der Kategorie 1 nach Titel sortiert anzeigen. Daher sollten unsere Abfrageargumente wie folgt aussehen: ( Im String-Format )

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

Dies sollten Sie jetzt in Ihr benutzerdefiniertes Feld eingeben. Nach der Eingabe speichern Sie den Wert Ihres benutzerdefinierten Felds

Als nächstes wird die benutzerdefinierte Abfrage in Ihrer single.php erstellt. Was hier benötigt wird, müssen wir den Wert aus unserem benutzerdefinierten Feld ermitteln, was eigentlich unsere Abfrageargumente sind, und diese an eine neue Instanz von WP_Query , um die Beiträge abzurufen. Wir müssen auch prüfen, ob tatsächlich ein Wert in diesem benutzerdefinierten Feld gespeichert ist oder nicht. Wenn das benutzerdefinierte Feld leer ist, zeigen Sie nichts an

DER CODE:

Sie können so etwas in single.php gleich nach dem einzelnen Post versuchen.

 $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(); } } 

Wenn der Benutzer die benutzerdefinierte Abfrage entfernen möchte, kann er einfach den Wert des benutzerdefinierten Felds löschen und das benutzerdefinierte Feld leer lassen. Wenn er die gleiche Abfrage aber aus Kategorie 10 und insgesamt 5 Beiträgen anzeigen muss, kann er einfach den ursprünglichen Wert durch Folgendes ersetzen

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

Einige Anmerkungen:

Es ist wichtig, den korrekten Synatx und das richtige Format zu verwenden, wenn Sie Informationen in diese benutzerdefinierten Felder und Meta-Felder eingeben. Syntaxerrors oder falsche Informationen führen zu unerwünschten Ausgaben oder sogar zu fatalen Fehlern. Es ist wichtig, dass Sie Ihre Kunden über solche Informationen informieren

ORIGINAL ANTWORT

Ich verstehe nicht, was du erreichen willst, aber nach dem, was ich dir sagen kann, sind das zwei verschiedene Dinge

OPTION 1

apply_filters('the_content', $content); wird verwendet, um die Inhaltsfilter auf rohen ungefilterten Post-Inhalt anzuwenden, der normalerweise aus der Verwendung von $post->post_content . Diese Filter enthalten den bekannten Filter wp_autop der the_content() hinzufügt.

apply_filters('the_content', $content); wird normalerweise in Verbindung mit get_posts wo man direkt mit den WP_Post Objekten arbeitet, ohne setup_postdata( $post ) , wodurch die Template-Tags wie the_content() zur Verwendung verfügbar gemacht werden

OPTION 2

do_shortcode wird verwendet, um einen Shortcode irgendwo in den Template-Dateien außerhalb des Texteditors im do_shortcode hinzuzufügen, wobei do_shortcode grundsätzlich durch ihre Hooks gefiltert werden.

Die korrekte Verwendung ist wie folgt

Beispiel: Hinzufügen des Galerie-Shortcodes in einer Vorlagendatei

 echo do_shortcode( '[gallery]' ) 

BEARBEITEN 1

Von Ihren Kommentaren würde ich dann überhaupt keinen Shortcode verwenden.

Wenn Sie keinen Shortcode über den Texteditor hinzufügen und ihn direkt über do_shortcode in eine Vorlagendatei (Hardcode) do_shortcode , würde ich die function einfach zur Vorlage hinzufügen

Beispiel:

Wenn Sie die folgende Shortcode-function haben

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

Sie können die function einfach direkt in einer Vorlage aufrufen

 echo footag_func(); 

Dies ist viel schneller, da der Shortcode nicht geparst werden muss

BEARBEITEN 2

Um ehrlich zu sein, machst du das komplett falsch von deinem Schnitt. Deshalb konnte ich deine erste Frage nicht verstehen

Manchmal muss ich Post-Metas auf Post / Seiten / benutzerdefinierte Post-Typen hinzufügen, damit sie Shortcodes (Schieberegler, Kontaktformular usw.) oder nur einen einfachen Text hinzufügen können. Es ist ein Text eingereicht.

Um den Shortcode arbeiten zu lassen, benutze ich Option 1 …..

Benutzerdefinierte Felder sind keine Textfelder und sind sicherlich nicht dazu gedacht, Shortcodes und Schieberegler oder Kontaktformulare zu verwenden. Benutzerdefinierte Felder sollten niemals zum Ersetzen des Texteditors in Posts und Pages verwendet werden.

Wie ich bereits erwähnt habe, apply_filters('the_content', $content); soll dazu dienen, Formatierungen auf rohen Post-Inhalt anzuwenden.

Sie haben hier zwei Möglichkeiten

  • Verwenden Sie do_shortcode direkt in Vorlagendateien, was ich nicht empfehlen würde, da die function schneller ist, da der Shortcode nicht geparst werden muss

  • Verwenden Sie den Shortcode direkt im Texteditor für die jeweilige Seite / Post

Ich würde ernsthaft empfehlen, dass Sie Ihre Strukturen und Ihre Ziele neu betrachten. Benutzerdefinierte Felder sind keine Texteditoren und können keine Shortcodes oder Schieberegler ausführen.

Meine Empfehlung wäre, vielleicht in benutzerdefinierte Widgets oder ein System zu schauen, das Sie mit benutzerdefinierten Feldern verwenden können