it-swarm.com.de

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

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.

18
тнє Sufi

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, wie dies funktionieren und die benutzerdefinierten Felddaten und Meta-Box-Daten korrekt verwendet werden können

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

DER PLAN:

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

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 $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

OPTION 2

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]' )

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/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

16
Pieter Goosen