Nehmen wir an, ich habe eine Designoption oder einen benutzerdefinierten Postmeta-Textbereich. Jetzt möchte ich mehrere Shortcodes, allgemeine Texte, Bilder usw. ausführen.
Was ist die beste Vorgehensweise 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);
Erklären Sie mir bitte, welches die beste Vorgehensweise ist und warum.
EDIT
Lassen Sie mich das Szenario im Detail beschreiben. Ich entwickle Themen für Kunden mit ihren Anforderungen. Manchmal muss ich Post-Meta zu Post/Pages/benutzerdefinierten Post-Typen hinzufügen, damit sie Shortcodes (Schieberegler, Kontaktformular usw.) oder nur einen einfachen Text hinzufügen können. Es ist ein Text abgelegt.
Um den Shortcode zum Laufen zu bringen, verwende ich Option 1 . Jetzt habe ich von jemandem gehört, dass dies ein falscher Weg ist, und ich sollte do_shortcode
verwenden. Aber sie haben mir nicht erklärt, warum es falsch ist. Deshalb frage ich.
Dieser ganze Vorgang kann im Standard-Texteditor von wp durchgeführt werden. Aber ich muss diese Optionen für die vorlagenspezifische Verwendung erstellen, das ist es, was meine Kunden wollen.
Es gibt manchmal diese Fragen, die dich nörgeln und dich später im Leben wieder jagen, und dies ist eine solche Frage.
Diese Frage ließ mich über eine alternative Lösung des Problems nachdenken. Wie bereits erwähnt, dienen benutzerdefinierte Felder und Meta-Boxen dazu, kleine Teile von Metadaten zu speichern, und dienen nicht als Erweiterung zum Posten von Inhalten, in denen Sie Shortcode und Funktionen ausführen können. Wie ich bereits sagte, ist Ihre Methode auch falsch und sollte nicht verwendet werden
Was ich in Ihrem Beitrag als interessant empfunden habe, ist, dass Sie benutzerdefinierte Felder und Metafelder verwendet haben, um versehentlich benutzerdefinierten Inhalt von Benutzereingaben anzuzeigen. Also habe ich gesessen und über eine Möglichkeit nachgedacht, wie dies funktionieren und die benutzerdefinierten Felddaten und Meta-Box-Daten korrekt verwendet werden können
Das ist meine Idee:
HINWEIS: Dies kann nach Bedarf geändert werden
In einem einzelnen Beitrag möchte/muss ein Benutzer benutzerdefinierten Inhalt dynamisch nach dem Beitrag anzeigen, um ihn an seine Bedürfnisse anzupassen. Dies sollte dynamisch sein. Der Inhalt sollte eine benutzerdefinierte Abfrage sein, und der Benutzer muss auswählen, was angezeigt werden soll, wann und was er möchte
Shortcodes funktionieren hier nicht, da Shortcodes nicht in benutzerdefinierten Feldern ausgeführt werden können. Auch do_shortcode
wird nicht funktionieren, da er nicht dynamisch und fest codiert ist, was wir nicht wollen. Wie in Ihrer Frage werden wir benutzerdefinierte Felder verwenden. Ich betone noch einmal, verwende das benutzerdefinierte Feld nicht, um eine benutzerdefinierte Abfrage oder Shortcodes auszuführen
Wir werden das benutzerdefinierte Feld verwenden, um only unsere Abfrageargumente zu speichern, das ist alles. Wir erstellen also ein benutzerdefiniertes Feld mit dem Namen custom_query_arguments
. In Ihrem Post-Editor-Bildschirm sehen Sie jetzt Ihr benutzerdefiniertes Feld, das zur Verwendung bereit ist
Der nächste Schritt wird darin bestehen, unsere benutzerdefinierten Abfrageargumente zu unserem Feld hinzuzufügen. Nehmen wir an, wir müssen 3 Beiträge der Kategorie 1 nach Titel sortiert anzeigen. Unsere Abfrageargumente sollten also so aussehen: (In string format)
'posts_per_page=3&cat=1&orderby=title'
Dies ist, was Sie jetzt in Ihr benutzerdefiniertes Feld eingeben sollten. Speichern Sie nach der Eingabe 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 abrufen, das eigentlich unsere Abfrageargumente sind, und ihn einer neuen Instanz von WP_Query
zuführen, um die Posts abzurufen. Wir müssen auch prüfen, ob in diesem benutzerdefinierten Feld tatsächlich ein Wert gespeichert ist oder nicht. Wenn das benutzerdefinierte Feld leer ist, wird nichts angezeigt
Du kannst so etwas in single.php gleich nach dem einzelnen Beitrag ausprobieren.
$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 dieselbe Abfrage aus Kategorie 10 und insgesamt 5 Posts anzeigen muss, kann er den ursprünglichen Wert einfach durch den folgenden ersetzen
'posts_per_page=5&cat=10&orderby=title'
Es ist wichtig, dass Sie die richtige Synchronisation und das richtige Format verwenden, wenn Sie Informationen in diese benutzerdefinierten Felder und Metafelder eingeben. Syntaxfehler oder falsche Informationen führen zu unerwünschten Ausgaben oder sogar zu schwerwiegenden Fehlern. Es ist wichtig, dass Sie Ihre Kunden über solche Informationen informieren
Ich verstehe nicht, was Sie erreichen wollen, aber nach allem, was ich Ihnen sagen kann, sind das zwei verschiedene Dinge
apply_filters('the_content', $content);
wird verwendet, um die Inhaltsfilter auf ungefilterten Post-Rohinhalt anzuwenden, der normalerweise aus der Verwendung von $post->post_content
stammt. Zu diesen Filtern gehört der berühmte Filter wp_autop
, der the_content()
p-Tags hinzufügt.
apply_filters('the_content', $content);
wird normalerweise in Verbindung mit get_posts
verwendet, wobei direkt mit den WP_Post
-Objekten gearbeitet wird, ohne setup_postdata( $post )
zu verwenden, wodurch die Template-Tags wie the_content()
zur Verwendung verfügbar gemacht werden
do_shortcode
wird verwendet, um einen Shortcode an einer beliebigen Stelle in Vorlagendateien außerhalb des Texteditors im Back-End des Seiteneditors einzufügen, wobei Shortcodes grundsätzlich durch ihre Hooks gefiltert werden.
Die korrekte Verwendung ist wie folgt
Beispiel: Hinzufügen des Galerie-Shortcodes zu einer Vorlagendatei
echo do_shortcode( '[gallery]' )
Nach Ihren Kommentaren würde ich dann überhaupt keinen Shortcode verwenden.
Wenn Sie keinen Shortcode über den Texteditor hinzufügen und ihn direkt (Hardcode) über do_shortcode
in eine Vorlagendatei einfügen möchten, würde ich die Funktion eher einfach der Vorlage hinzufügen
Beispiel:
Wenn Sie die folgende Shortcode-Funktion haben
function footag_func( $atts ) {
return "foo = {$atts['foo']}";
}
add_shortcode( 'footag', 'footag_func' );
Sie können die Funktion einfach direkt in einer Vorlage wie aufrufen
echo footag_func();
Auf diese Weise ist es viel schneller, da der Shortcode nicht analysiert werden muss
Um ehrlich zu sein, machen Sie das bei Ihrer Bearbeitung völlig falsch. Deshalb konnte ich Ihre Ausgangsfrage nicht verstehen
Manchmal muss ich Post-Meta zu Post/Pages/benutzerdefinierten Post-Typen hinzufügen, damit sie Shortcodes (Schieberegler, Kontaktformular usw.) oder nur einen einfachen Text hinzufügen können. Es ist ein Text abgelegt.
Um den Shortcode zum Laufen zu bringen, verwende ich Option 1 .....
Benutzerdefinierte Felder sind nicht Textfelder und sind sicherlich nicht für die Ausführung von Shortcodes und für Schieberegler oder Kontaktformulare gedacht. Benutzerdefinierte Felder sollten niemals verwendet werden, um den Texteditor in Posts und Seiten zu ersetzen.
Wie ich bereits sagte, soll apply_filters('the_content', $content);
verwendet werden, um die Formatierung 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 Verwendung der Funktion schneller ist, da der Shortcode nicht analysiert werden muss
Verwenden Sie den Shortcode direkt im Texteditor für die jeweilige Seite/den jeweiligen Beitrag
Ich würde ernsthaft empfehlen, dass Sie Ihre Strukturen und das, was Sie erreichen wollen, neu betrachten. Benutzerdefinierte Felder sind keine Texteditoren und können keine Shortcodes oder Slider ausführen.
Meine Empfehlung wäre, vielleicht in benutzerdefinierte Widgets oder ein System zu schauen, das Sie mit benutzerdefinierten Feldern verwenden können