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


21

Скажімо, у мене є тема теми або спеціальна область тексту постмета. Тепер я хочу виконати декілька коротких кодів, загальних текстів, зображень тощо.

Яка найкраща практика і чому?

Варіант 1:

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

Варіант 2:

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

Будь ласка, поясніть мені, яка з них буде найкращою практикою та чому.

EDIT

Дозвольте мені детально описати сценарій. Я розробляю теми для клієнтів з їхніми вимогами. Іноді мені потрібно додати мета публікації на посаду / сторінки / типи публікацій, щоб вони могли додавати шорт-коди (слайдер, контактну форму тощо) або просто простий текст. Це поданий текст.

Щоб короткий код працював, я використовую варіант 1 . Тепер я почув від когось, що це неправильний шлях, і мені слід скористатися do_shortcode. Але вони не дали мені пояснення, чому це неправильний шлях. Ось чому я прошу.

Весь цей процес можна виконати в текстовому редакторі за замовчуванням wp. Але мені потрібно створити ці параметри для використання шаблону, саме цього хочуть мої клієнти.

Відповіді:


16

ЗАПИТАННЯ ТА ВІДПОВІДЬ ПЕРЕГЛЯД

Іноді виникають ці запитання, які вас нудять і знову виштовхують, і це одне таке питання.

Це питання змусило мене подумати про альтернативне рішення проблеми. Як я вже зазначав, спеціальні поля та метаполя є там, щоб зберігати невеликі фрагменти метаданих, а не діяти як розширення для розміщення вмісту, де ви можете виконувати короткий код та функції. Також, як я вже заявив, ваш метод неправильний і його не слід використовувати

Те, що мені було цікавим у вашій публікації, - це те, що ви використовували власні поля та метаполя для ненавмисного відображення користувальницького вмісту із введення користувачем. Тож я сидів і думав про можливий спосіб зробити цю роботу і правильно використовувати користувальницькі дані поля та дані мета-поля

Це моя ідея:

СЦЕНАРІЯ:

ПРИМІТКА. Це можна змінити відповідно до будь-яких потреб

Під час однієї публікації користувач хоче / вимагає динамічно показувати користувацький вміст після публікації відповідно до його потреб. Це має бути динамічним. Вміст має бути спеціальним запитом, і користувачеві потрібно вибрати, що показувати, коли він хоче, і що він хоче

МОЖЛИВО РЕШЕННЯ:

Короткі коди тут не працюватимуть, оскільки не можна виконати шрифти в спеціальних полях. Не будеdo_shortcode працювати, як це не динамічно і жорстко кодується, чогось ми не хочемо. Як і у вашому питанні, ми збираємось скористатись спеціальними полями. Ще раз наголошую, не використовуйте користувальницьке поле для виконання користувацького запиту чи шорт-кодів

ПЛАН:

Ми будемо використовувати поле користувача, щоб зберегти лише наші аргументи запитів, тобто все. Отже, те, що ми робимо, ми створюємо власне поле під назвою custom_query_arguments. На екрані редактора публікацій ви побачите власне поле, готове до використання

Наступним кроком буде додавання до нашого поля аргументів власного запиту. Скажімо, нам потрібно показати 3 повідомлення з категорії 1, відсортовані за назвою. Отже наші аргументи запиту повинні виглядати так: ( у рядковому форматі )

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

Це те, що вам слід зараз ввести у вашому користувальницькому полі. Після введення збережіть значення спеціального поля

Далі буде побудова користувацького запиту у вашому single.php. Що потрібно тут, нам потрібно отримати значення з нашого користувальницького поля, яке насправді є нашими аргументами запитів, і подати його до нового екземпляра WP_Queryдля отримання публікацій. Нам також потрібно перевірити, чи є насправді збережене значення у цьому користувальницькому полі, якщо користувацьке поле порожнє, нічого не показувати

КОДЕКС:

Ви можете спробувати щось подібне в single.php відразу після одного повідомлення.

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

} 

Якщо користувач хоче видалити спеціальний запит, він може просто видалити значення спеціального поля та залишити поле користувача порожнім. Якщо йому потрібно показати той самий запит, але з категорії 10 та загалом 5 повідомлень, він може просто замінити початкове значення на наступне

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

НЕЧАСКІ ПРИМІТКИ:

Важливо використовувати правильний синтаксис та формат під час введення інформації у ці спеціальні поля та метаполя. Помилки синтаксису або неправильна інформація призведе до небажаного виводу або навіть фатальних помилок. Важливо повідомити клієнтам про таку інформацію

ОРИГІНАЛЬНИЙ ВІДПОВІДЬ

Я не розумію, що ви намагаєтеся зробити, але, з того, що я можу вам сказати, це дві окремі речі

ВАРІАНТ 1

apply_filters('the_content', $content);використовується для застосування фільтрів контенту до неочищеного нефільтрованого вмісту публікацій, який зазвичай походить від використання $post->post_content. Ці фільтри включають відомий фільтр, wp_autopякий додає теги pthe_content()

apply_filters('the_content', $content); зазвичай використовується в поєднанні з тим, get_postsде людина працює безпосередньо з WP_Postоб'єктами, не використовуючи те, setup_postdata( $post )що робить теги шаблонів подібнимиthe_content() доступними для використання

ВАРІАНТ 2

do_shortcode використовується для додавання короткого коду в будь-який файл файлів шаблонів поза текстовим редактором на задньому кінці екрана редактора сторінки, в основному фільтруючи шорткоди за допомогою їх гачків.

Правильне використання полягає в наступному

Приклад: Додавання короткого коду галереї у файл шаблону

echo do_shortcode( '[gallery]' )

ЗРІД 1

З ваших коментарів я тоді взагалі не використовував би короткий код.

Якщо ви не збираєтеся додавати короткий код через текстовий редактор і збираєтесь додавати його безпосередньо (жорсткий код) через do_shortcodeу файл шаблону, я б швидше просто додав функцію до шаблону

Приклад:

Якщо у вас є така функція короткого коду

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

Ви можете просто викликати функцію безпосередньо в шаблоні типу

echo footag_func();

Це набагато швидше, оскільки короткий код не потрібно розбирати

EDIT 2

Якщо чесно, то ви цілком робите це неправильно зі своєї редакції. Ось чому я не міг зрозуміти ваше початкове запитання

Іноді мені потрібно додати мета публікації на посаду / сторінки / типи публікацій, щоб вони могли додавати шорт-коди (слайдер, контактну форму тощо) або просто простий текст. Це поданий текст.

Щоб короткий код працював, я використовую варіант 1 .....

Спеціальні поля - ні текстовими полями і, безумовно, не призначені для використання для виконання коротких кодів, а також для повзунків або контактних форм. Спеціальні поля ніколи не повинні використовуватися для заміни текстового редактора в публікаціях та на сторінках.

Як я вже говорив, apply_filters('the_content', $content); призначений для використання у форматуванні до сировинного вмісту публікації.

Тут у вас є два варіанти

  • Використовуйте do_shortcodeбезпосередньо у файлах шаблонів, що я б не рекомендував, оскільки використання функції швидше, оскільки короткий код не потрібно розбирати

  • Використовуйте короткий код безпосередньо в текстовому редакторі для певної сторінки / публікації

Я б серйозно рекомендував по-новому поглянути на свої структури і те, що ви хочете досягти. Спеціальні поля - ні текстовими редакторами і не можуть виконувати шорт-коди або повзунки.

Моя рекомендація - переглядати, можливо, спеціальні віджети або систему, яку ви можете використовувати зі спеціальними полями


1
Пітер дякує за пояснення. Я це вже знаю. Але я запитав, який варіант буде більш точним, якщо мета полягає лише у виведенні шорт-кодів з пост-мета-тематичних опцій textarea. Я використовую option1, щоб отримати відфільтрований вміст, і це стало для мене звичкою. І використовуючи варіант 1 навіть для простого друку короткого коду з текстового файлу. Так просив.
тнє Суфі

Я побачив правку. Я зрозумів вашу думку. Але мій сценарій інший. Мовляв, є поданий текст / область та кілька шорт-кодів. Тепер користувач може поставити будь-який із коротких кодів у цій області. Тому я не можу безпосередньо використовувати функцію. Мені потрібно тримати цю частину динамічно.
тнє Sufi

Де це текстове поле, чи те саме, що і на екрані редактора задньої сторінки
Пітер Гузен

Це може бути постмета. Або це може бути варіант теми. Я використовую the_content фільтр для обох.
тнє Суфі

Вибачте, але тоді нічого з цього немає сенсу. Чому ви хочете використовувати штрихкоди в користувацьких полях. Чому ви взагалі взагалі використовуєте шорт-коди.
Пітер Гусен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.