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.

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 nie są polami 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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.