Intereting Posts
Удаление боковой панели на страницах категорий Оптимизация нескольких WP_querys в один вызов? BBPress bbp_new_reply действие не срабатывает, когда пользователь отвечает на встроенный поток Как спрятать CPT-файлы из медиа-библиотеки Фильтр поиска с пользовательской таксономией и настраиваемыми полями: как мне обрабатывать его с помощью плагина? Запросить и получить только заголовки сообщений, вместо того чтобы получать целые почтовые объекты добавить ссылки на список условий публикации Пустые «термины» в «tax_query» возвращают пустой массив Возможности create_users в роли многоузлового Лучший способ обнаружить уникальные сообщения в wp rest api Виджеты боковой панели находятся над содержимым в мобильном режиме, как я могу его исправить? Я скопировал свой сайт на другой сайт, но все ссылки указывают на старый сайт Использование SMTP для исходящей почты (PHPMailer) на экземпляре AWS? Is 'preload = "none"' допустимый параметр в коротком коде в WordPress 3.6? Как я могу добавить «.html» в конец одного URL-адреса на веб-сайте WordPress?

Как изменить атрибуты shortcode с данными из текущего сообщения

Я заранее извиняюсь за недостаток знаний PHP / WP и мою многословность в объяснении того, что я ищу, но я пытался разработать решение на пару дней, и я только начинаю оберните мою голову вокруг фильтров и петли.

Вот что я хотел бы выполнить:

Штрих-код для плагина, который я использую, имеет тег атрибута «sched», который я хотел бы сделать существенно динамическим, измененным на текущий (пользовательский) пост (пользовательский) класс slug. Вот пример существующего короткого кода, который хорошо работает с плагином MSTW Schedules and Scoreboards:

[mstw_schedule_table sched="v-football"] 

Мой план состоял в том, чтобы присвоить значение атрибута «sched» атрибуту «sport» (на всех постах) в качестве замещающего, который будет заменен «slog» пользовательской категории в текущем сообщении. Я настроил все «спортивные» категории, чтобы соответствовать значениям «sched», используемым в плагине, чтобы убедиться, что таблица расписания, отображаемая на текущем посту, верна.

Примечание. Все эти пользовательские сообщения (настроенные как «команда») должны иметь только одну «спортивную» категорию: я настроил категории «спорт» как метакаталог выпадающего списка в админах, как это .

Кроме того, я хочу, чтобы редактируемый шорт-код был доступен в содержимом настраиваемого сообщения, поэтому я могу редактировать другие атрибуты по мере необходимости для каждого сообщения.

Вот что я пробовал:

Это самое близкое, что я получил, но я знаю, что я использую неправильный фильтр или иначе вызываю функцию в неподходящее время. Обратите внимание, что я запускал этот код в файле «single-team.php», который я создал для моего настраиваемого типа сообщения, перед циклом. Я знаю, что это, вероятно, должно быть в functions.php или отдельном плагине (просьба сообщить).

Мое вдохновение:
do_shortcode_tag / get_the_terms

  add_filter( 'do_shortcode_tag', 'wpse_106269_do_shortcode_tag', 10, 4); function wpse_106269_do_shortcode_tag( $output, $tag, $attr, $m ) { if( $tag === 'mstw_schedule_table' ) { //* Do something useful if ($attr['sched'] === 'sport-slug') { print_r($attr); // Get a list of tags and extract their names $sport = get_the_terms( get_the_ID(), 'sport' ); if ( ! empty( $sport ) && ! is_wp_error( $sport ) ) { $sport_slug = wp_list_pluck( $sport, 'slug' ); $attr['sched'] = $sport_slug[0]; } echo "<br>"; print_r($attr); } } return $output; } 

Эти результаты:

 Array ( [sched] => sport-slug ) Array ( [sched] => v-football ) 

Поэтому я знаю, что могу изменить значение $ attr короткого кода, но я не знаю, как заменить исходный shortcode на модифицированный, прежде чем он будет разбираться с плагином.

Я попытался использовать the_content :

 // Modify Content of a Post add_filter('the_content', 'se24265_my_function'); function se24265_my_function( $content ) { $write = 'hello world'; $new_content = $write . $content; $sport = get_the_terms( get_the_ID(), 'sport' ); if ( ! empty( $sport ) && ! is_wp_error( $sport ) ) { $sport_slug = wp_list_pluck( $sport, 'slug' ); str_replace("sport-slug", $sport_slug[0], $new_content); } return $new_content; // outputs hello world // outputs inital shortcode without modifications } 

Я также подумал о запуске функции обработчика короткого кода плагина (например, это ) с измененным аргументом, но я не знаю, как получить доступ / изменить этот аргумент, прежде чем он будет интерпретироваться плагином.

Я также видел этот пример, где короткий код генерируется в шаблоне пользовательских сообщений …

 // Making your custom string parses shortcode $string = do_shortcode( $string ); // If your string has a custom filter, add its tag name in an applicable add_filter function add_filter( 'my_string_filter_hook_tag_name', 'do_shortcode' ); 

… но я хотел бы сохранить возможность редактирования / размещения короткого кода в разных местах в каждом настраиваемом столбце по мере необходимости, и я до сих пор не знаю, какой фильтр использовать (content_edit_pre?)

Любая помощь будет оценена по достоинству. Благодарю.

Solutions Collecting From Web of "Как изменить атрибуты shortcode с данными из текущего сообщения"

Для тех, кто может наткнуться на это, я нашел решение:

В моем конкретном случае я использую файл шаблона single-[таксономия] .php и смог добавить короткий код вручную с помощью функции WordPress do_shortcode () вместо изменения короткого кода в содержимом сообщения.

Вот как я это написал:

 <?php echo do_shortcode( '[mstw_schedule_table sched="'.$sports_slug.'" ]' ); ?> 

И вот как я получил $ sports_slug для работы для меня. Ранее в файле (вне цикла):

 // Get this post's sport taxonomy - https://wordpress.stackexchange.com/a/168862/127459 $sports = get_the_terms($post->ID, 'sport'); $sports_slug = ''; if ($sports) { foreach ($sports as $sport) { $sports_slug = $sport->slug; } } 

Этот код немного менее сложный, чем то, что я использовал (мне нужно было выбрать только не-родительские спортивные таксономии), но эта упрощенная версия может помочь кому-то другому. Эти ссылки помогли мне на этом пути:

Получить имя пользовательской категории из ID (ответ)

get_the_terms ()