Intereting Posts
Можно ли ссылаться на одну страницу с меню страницы WordPress? Перечисление категорий и подкатегорий сообщения Формат сообщения или Тип для записей типа списка Как найти источник текста для сайта WordPress? Я хочу изменить этот текст Пустые RSS-каналы wp не определена ошибка с помощью wp.media для создания пользовательского загрузчика изображений Форсивные пароли и имена пользователей для каталога WordPress Как отображать случайных пользователей с аватарами Как оставить строку между абзацами при написании текста в визуальном или текстовом редакторе Лучшее место для вызова вспомогательных функций xdebug? Быстрые метки qtranslate не работают в настраиваемых полях Существует ли максимальный предел количества пользователей, возвращаемых WP_User_Query? Установите значение по умолчанию для параметра? Получить все категории и должности в этих категориях Как переопределить основной файл shortcodes.php?

Вызов короткого кода внутри другого обратного вызова Shortcodes

Я использую плагин, который показывает контент только для определенных ролей пользователей. Это содержимое окружено тегом короткого кода, чтобы сделать его невидимым для других других пользовательских ролей. Теперь я хотел бы называть другие короткие коды внутри ограниченного контента.

Я понимаю, что мне нужно установить короткие коды плагинов, чтобы они использовали do_shortcode() , но есть так много файлов, что я точно не знаю, где это сделать. Все места, которые я пробовал, не внесли никаких изменений. Любые советы о том, что искать?

Вот код, который я нашел. Я думаю, что это то, что мне нужно изменить. Как вы думаете? Измените это:

return stripslashes($message);

Изменить на:

return stripslashes(do_shortcode($message));

 // Show the level based protected shortcode message function do_levelprotected_shortcode($atts, $content = null, $code = "") { global $M_options; // Set up the level shortcodes here $shortcodes = apply_filters('membership_level_shortcodes', array() ); $notshortcodes = apply_filters('membership_not_level_shortcodes', array() ); $code = strtolower( $code ); if( substr( $code, 0, 4 ) !== "not-" ) { if(!empty($shortcodes)) { // search positive shortcodes first $id = array_search( $code, $shortcodes ); if($id !== false) { // we have found a level so we need to check if it has a custom protected message, otherwise we'll just output the default main on $level = new M_Level( $id ); $message = $level->get_meta( 'level_protectedcontent' ); if(!empty($message)) { return stripslashes($message); } } } } else { if(!empty($notshortcodes)) { // search positive shortcodes first $id = array_search( $code, $notshortcodes ); if($id !== false) { // we have found a level so we need to check if it has a custom protected message, otherwise we'll just output the default main on $level = new M_Level( $id ); $message = $level->get_meta( 'level_protectedcontent' ); if(!empty($message)) { return stripslashes($message); } } } } 

РЕДАКТОРЫ ПРИМЕЧАНИЕ. Я удалил все ссылки на плагины (закрытый источник), поскольку они актуальны для актуального вопроса, поскольку доступен исходный код плагинов: ноль.

Solutions Collecting From Web of "Вызов короткого кода внутри другого обратного вызова Shortcodes"

ТЛ; др

  1. Найдите, где зарегистрирован короткий код.
  2. Найдите функцию вывода короткого кода.
  3. Молитесь за фильтр.
  4. Сообщить как ошибка.

Помните: все перечисленные ниже функции составлены. Пункт первых двух шагов – найти правильные значения для включения в фрагменты.


Найти, где зарегистрирован короткий код

Используйте программу, такую ​​как Notepad ++ или Sublime Text 2 (мой личный фаворит), которая может одновременно искать несколько файлов. Затем выполните поиск некоторого варианта следующего, где «member» – это короткий код, который вы используете:

  • add_shortcode( 'member'
  • add_shortcode('member'
  • add_shortcode( "member"
  • add_shortcode("member"

Найти функцию вывода короткого кода

Один из них, скорее всего, приведет вас к строке кода, которая выглядит так:

 add_shortcode( 'member', 'member_shortcode' ); 

Затем вам нужно найти функцию "member_shortcode" . Посмотрите рядом с функцией add_shortcode чтобы увидеть, видите ли вы это. Если нет, выполните поиск:

 function member_shorcode( 

Молитесь за фильтр

И тогда это момент истины. Вы все время молитесь, чтобы короткий код обеспечивал фильтр для вывода короткого кода. Это позволит вам сделать что-то вроде этого:

 function recursive_member_shortcode( $content ) { return do_shortcode( $content ); } add_filter( 'member_shortcode_filter', 'recursive_member_shortcode', 9999 ); 

Если фильтра нет, единственный вариант – взломать сам файл плагина, который является плохим новостям.

Сообщить об ошибке

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

Что бы вы ни делали с короткими кодами: вы всегда можете их фильтровать.

Core использует следующий фильтр.

 apply_filters( "shortcode_atts_{$shortcode}", $out, $pairs, $atts ); 

Итак, до тех пор, пока третий аргумент используется при вызове shortcode_atts() , это легко, так как ваш обратный вызов фильтра может просто подключиться к

 "shortcode_atts_{$third_Argument}" 

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

Затем вы можете отфильтровать выход. Прикрепление других коротких кодов и всех других фанков отсюда не проблема.

Примечание. Я не уверен, насколько этот ответ на вопрос с вопросом.