FRAGE UND ANTWORT ÜBERARBEITET
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, diese Arbeit zu machen und die benutzerdefinierten Felddaten und Meta-Box-Daten korrekt zu verwenden
Das ist meine Idee:
DAS SZENARIO:
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
DIE MÖGLICHE LÖSUNG:
Shortcodes funktionieren hier nicht, da Shortcodes nicht in benutzerdefinierten Feldern ausgeführt werden können. Beides wird nicht do_shortcode
funktionieren, da es 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
DER PLAN:
Wir werden das benutzerdefinierte Feld verwenden, um nur 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 besteht darin, 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: ( Im 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 WP_Query
abrufen , bei dem es sich eigentlich um unsere Abfrageargumente handelt, und diesen an eine neue Instanz von weiterleiten, 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
DER CODE:
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'
EINIGE ANMERKUNGEN:
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
URSPRÜNGLICHE ANTWORT
Ich verstehe nicht, was Sie erreichen wollen, aber nach allem, was ich Ihnen sagen kann, sind das zwei verschiedene Dinge
OPTION 1
apply_filters('the_content', $content);
wird verwendet, um die Inhaltsfilter auf ungefilterten Post-Rohinhalt anzuwenden, der normalerweise aus der Verwendung von stammt $post->post_content
. Zu diesen Filtern gehört der berühmte Filter, wp_autop
der p-Tags hinzufügtthe_content()
apply_filters('the_content', $content);
wird üblicherweise in Verbindung mit dem verwendet, get_posts
wo direkt mit den WP_Post
Objekten gearbeitet wird, ohne setup_postdata( $post )
dass die Template-Tags wie the_content()
zur Verwendung verfügbar gemacht werden
OPTION 2
do_shortcode
wird verwendet, um einen Shortcode an einer beliebigen Stelle in Vorlagendateien außerhalb des Texteditors im Bildschirm-Backend des Seiteneditors einzufügen und Shortcodes grundsätzlich durch ihre Hooks zu filtern.
Die korrekte Verwendung ist wie folgt
Beispiel: Hinzufügen des Galerie-Shortcodes zu einer Vorlagendatei
echo do_shortcode( '[gallery]' )
EDIT 1
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
BEARBEITEN 2
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 / Seiten / 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.
Damit der Shortcode funktioniert, verwende ich Option 1 .....
Benutzerdefinierte Felder sind keine Textfelder und dürfen mit Sicherheit nicht zum Ausführen von Shortcodes und für diesen Zweck von Schiebereglern oder Kontaktformularen verwendet werden. Benutzerdefinierte Felder sollten niemals verwendet werden, um den Texteditor in Posts und Seiten zu ersetzen.
Wie ich bereits sagte, apply_filters('the_content', $content);
soll verwendet werden, um Formatierungen auf rohen Post-Inhalt anzuwenden.
Sie haben hier zwei Möglichkeiten
Verwenden Sie do_shortcode
direkt in Template - Dateien, die ich würde nicht so mit der Funktion empfehlen ist schneller als Shortcode muss nicht analysiert werden
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 möchten, 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