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

21

Powiedzmy, że mam opcję motywu lub niestandardowy obszar tekstu postmeta. Teraz chcę wykonać wiele skrótów, ogólnych tekstów, obrazów itp.

Jaka będzie najlepsza praktyka i dlaczego?

Opcja 1:

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

Opcja 2:

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

Wyjaśnij mi, która z nich będzie najlepszą praktyką i dlaczego.

EDYTOWAĆ

Pozwól mi szczegółowo opisać scenariusz. Tworzę motywy dla klientów z ich wymaganiami. Czasami muszę dodać meta postów do postów / stron / niestandardowych typów postów, aby mogły dodać skróty (suwak, formularz kontaktowy itp.) Lub po prostu zwykły tekst. To jest plik tekstowy.

Aby krótki kod działał, używam opcji 1 . Teraz usłyszałem od kogoś, że to zły sposób i powinienem skorzystać do_shortcode. Ale nie wyjaśnili mi, dlaczego jest to zły sposób. Właśnie dlatego pytam.

Cały proces można wykonać w domyślnym edytorze tekstów wp. Ale muszę utworzyć te opcje do użycia specyficznego dla szablonu, tego właśnie oczekują moi klienci.

Sufi
źródło

Odpowiedzi:

16

PYTANIE I ODPOWIEDŹ ZMIENIONO

Czasami pojawiają się te pytania, które cię dręczą i ścigają w późniejszym życiu, i to jest jedno z takich pytań.

To pytanie sprawiło, że pomyślałem o alternatywnym rozwiązaniu problemu. Jak już wspomniałem, niestandardowe pola i pola są przeznaczone do przechowywania małych fragmentów metadanych, a nie do działania jako rozszerzenie do publikowania treści, w których można wykonać krótki kod i funkcje. Jak już wspomniałem, twoja metoda jest niepoprawna i nie powinna być używana

Interesujące dla mnie w tym poście jest to, że użyłeś niestandardowych pól i metadanych, aby przypadkowo wyświetlić niestandardową treść na podstawie danych wprowadzonych przez użytkownika. Więc usiadłem i pomyślałem o możliwym sposobie, aby to zadziałało i poprawnie używało niestandardowych danych pola i danych meta-box

Oto mój pomysł:

SCENARIUSZ:

UWAGA: Można to zmodyfikować w zależności od potrzeb

W pojedynczym poście użytkownik chce / wymaga dynamicznego wyświetlania niestandardowej treści po poście, aby dostosować go do jego potrzeb. To powinno być dynamiczne. Treść powinna być niestandardowym zapytaniem, a użytkownik musi wybrać, co pokazać, kiedy chce i czego chce

MOŻLIWE ROZWIĄZANIE:

Skróty nie będą tutaj działać, ponieważ nie można ich wykonać w niestandardowych polach. Ani nie będziedo_shortcode zadziała, ponieważ nie jest dynamiczny i jest zakodowany na stałe, czego nie chcemy. Tak jak w Twoim pytaniu, wykorzystamy pola niestandardowe. Ponownie podkreślam, nie używaj niestandardowego pola do wykonania niestandardowego zapytania lub skrótów

PLAN:

Użyjemy niestandardowego pola, aby zapisać tylko nasze argumenty zapytania, to wszystko. Tak więc tworzymy niestandardowe pole o nazwie custom_query_arguments. Na ekranie edytora postów zobaczysz teraz niestandardowe pole gotowe do użycia

Następnym krokiem będzie dodanie niestandardowych argumentów zapytania do naszego pola. Powiedzmy, że musimy pokazać 3 posty z kategorii 1 posortowane według tytułu. Dlatego nasze argumenty zapytania powinny wyglądać następująco: (w formacie ciągu )

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

To właśnie powinieneś teraz wpisać w swoim polu niestandardowym. Po wprowadzeniu zapisz wartość swojego pola niestandardowego

Następnie zbuduj niestandardowe zapytanie w pliku single.php. To, co jest potrzebne tutaj, musimy pobrać wartość z naszego niestandardowego pola, które w rzeczywistości są naszymi argumentami zapytania, i przekazać je do nowej instancji w WP_Querycelu pobrania postów. Musimy również sprawdzić, czy rzeczywiście mamy zapisaną wartość w tym polu niestandardowym, jeśli pole niestandardowe jest puste, nic nie pokazuj

KOD:

Możesz spróbować czegoś takiego w single.php zaraz po pojedynczym poście.

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

} 

Jeśli użytkownik chce usunąć niestandardowe zapytanie, może po prostu usunąć wartość pola niestandardowego i pozostawić pole niestandardowe puste. Jeśli musi pokazać to samo zapytanie, ale z kategorii 10 i łącznie 5 postów, może po prostu zastąpić oryginalną wartość następującym:

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

KILKA UWAG:

Ważne jest, aby używać poprawnej synatxu i formatu podczas wprowadzania informacji w tych niestandardowych polach i meta-polach. Błędy składniowe lub niepoprawne informacje doprowadzą do niepożądanych wyników lub nawet błędów krytycznych. Ważne jest, aby poinformować klientów o takich informacjach

ORYGINALNA ODPOWIEDŹ

Nie rozumiem, co próbujesz osiągnąć, ale z tego, co mogę ci powiedzieć, są to dwie odrębne rzeczy

OPCJA 1

apply_filters('the_content', $content);służy do zastosowania filtrów treści do surowej, niefiltrowanej zawartości postów, która zwykle pochodzi z użycia $post->post_content. Te filtry obejmują słynny filtr, wp_autopktóry dodaje tagi pthe_content()

apply_filters('the_content', $content); jest zwykle używany w połączeniu z get_postsmiejscem, w którym działa się bezpośrednio z WP_Postobiektami, bez użycia, setup_postdata( $post )co czyni tagi szablonu podobnymithe_content() dostępne do użycia

OPCJA 2

do_shortcode służy do dodawania krótkiego kodu w dowolnym miejscu w plikach szablonów poza edytorem tekstowym na zapleczu ekranu edytora stron, w zasadzie filtrując skróty przez ich zaczepy.

Prawidłowe użycie jest następujące

Przykład: dodawanie krótkiego kodu galerii w pliku szablonu

echo do_shortcode( '[gallery]' )

EDYCJA 1

Z twoich komentarzy w ogóle nie użyłbym krótkiego kodu.

Jeśli nie zamierzasz dodawać shortcode za pomocą edytora tekstu i dodawać go bezpośrednio (hardcode) za do_shortcodepomocą pliku szablonu, wolałbym po prostu dodać funkcję do szablonu

Przykład:

Jeśli masz następującą funkcję shortcode

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

Możesz po prostu wywołać tę funkcję bezpośrednio w szablonie, takim jak

echo footag_func();

Jest to znacznie szybsze, ponieważ nie trzeba analizować krótkiego kodu

EDYCJA 2

Szczerze mówiąc, robisz to źle podczas edycji. Dlatego nie mogłem zrozumieć twojego pierwszego pytania

Czasami muszę dodać meta postów do postów / stron / niestandardowych typów postów, aby mogły dodać skróty (suwak, formularz kontaktowy itp.) Lub po prostu zwykły tekst. To jest plik tekstowy.

Aby shortcode działał, używam opcji 1 .....

Pola niestandardowe niepolami tekstowymi i na pewno nie są przeznaczone do wykonywania skrótów, w tym przypadku suwaków lub formularzy kontaktowych. Nie należy nigdy używać pól niestandardowych do zastępowania edytora tekstu w postach i stronach.

Jak już wspomniałem, apply_filters('the_content', $content);ma służyć do formatowania surowej zawartości postu.

Masz tutaj dwie możliwości

  • Używaj do_shortcodebezpośrednio w plikach szablonów, których nie polecam, ponieważ korzystanie z tej funkcji jest szybsze, ponieważ krótki kod nie musi być analizowany

  • Użyj krótkiego kodu bezpośrednio w edytorze tekstu dla określonej strony / postu

Szczerze polecam, abyś spojrzał na swoje nowe struktury i to, co chcesz osiągnąć. Niestandardowe pola nie są edytorami tekstu i nie mogą wykonywać skrótów ani suwaków.

Radzę zajrzeć do niestandardowych widżetów lub systemu, którego można używać z niestandardowymi polami

Pieter Goosen
źródło
1
Pieter dziękuję za wyjaśnienie. Już to wiem. Ale pytałem, która opcja będzie bardziej dokładna, jeśli celem będzie tylko generowanie skrótów z tekstowych opcji post meta / theme. Korzystam z opcji 1, aby uzyskać filtrowaną zawartość, i stało się to moim nawykiem. I przy użyciu opcji 1 nawet wydrukować krótki kod z pliku tekstowego. Tak pytałem.
od Sufi
Widziałem edycję. Rozumiem co masz na myśli. Ale mój scenariusz jest inny. To tak, jakby był plik / obszar tekstowy i kilka skrótów. Teraz użytkownik może umieścić dowolny krótki kod w tym obszarze. Nie mogę więc bezpośrednio użyć funkcji. Muszę zachować tę część dynamiki.
єнє Sufi
Gdzie jest to pole tekstowe, czy jest takie samo jak na ekranie edytora strony tylnej
Pieter Goosen
Może to być post-meta. Lub może to być opcja motywu. Korzystam z obu filtrów.
єнє Sufi
Przepraszam, ale to nie ma sensu. Dlaczego chcesz używać skrótów w niestandardowych polach. Dlaczego w ogóle miałbyś w ogóle używać skrótów?
Pieter Goosen