Intereting Posts
Как добавить / вставить класс на боковую панель в single.php? echo do_shortcode не работает над шаблоном темы Структура проектов и клиентов Искать что угодно на сайте Как отобразить заголовок сайта с заголовком сообщения? Двадцать четырнадцать: изменение Читать дальше Разработка плагинов – получить URL-адрес администратора (включая случаи, когда wp-admin не используется) Yoast Force Rewrite Crashed Site Как добавить настраиваемые параметры для плагина в окно добавления сообщений – например, yoast seo сопоставить несколько URL-адресов для отображения домашней страницы без изменения URL-адреса, отображаемого в строке местоположения браузера Контент против шаблона в пользовательской почте Как я могу добавить изображения эскизов к определенному сообщению (используя код, а не панель администратора) в wordpress Частота запланированных событий Скрыть пользователя от WordPress Правильный способ enqueue jquery-ui

Вызов короткого кода внутри другого обратного вызова 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}" 

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

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

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