Intereting Posts
отключить новые учетные записи пользователей Использование правил в сообщениях wp_dropdown_pages не работает с аргументом post_type Можно ли переименовать каталог загрузки woocommerce? Как добавить ссылку «Опубликовать» на быстрые действия уникальный идентификатор для тех же страниц в многоязычном контексте Необходимо добавить тег привязки в избранном изображении для открытия в новой вкладке Какая лучшая структура ссылок для SEO? Отключить исходящие веб-запросы Как я могу скрыть постоянную связь / короткую ссылку для определенного пользователя, зарегистрированного в Пользователях определенного уровня? Рассчитывать родительские комментарии и ответы отдельно? Тема GPL 2 с использованием рамки для коммерческой темы? Сделать страницу архива в результатах поиска? Используя Wp_Query, Json добавит данные серии Highcharts получить URL-адрес аватара вместо тега html img при использовании get_avatar?

Как бороться с ошибкой WordPress: нельзя использовать завернутый и развернутый короткий код в том же сообщении

После разбора синтаксического анализа обертывания и коротких коротких кодов на той же странице я наткнулся на этот билет с 3 лет назад: http://core.trac.wordpress.org/ticket/9264

Проблема заключается в том, что WP не может правильно разобрать

[myshortcode att="bla"] and [myshortcode]Enclosed content[/myshortcode] 

на той же странице. Вышеприведенный дает вам один короткий код с $ att " bla " и $ content " and [myshortcode]Enclosed content. "

Добавление закрывающего тега [/ myshortcode] не помогает:

 [myshortcode att="bla"][/myshortcode] and [myshortcode]Enclosed content[/myshortcode] 

WordPress не выполняет его синтаксический анализ, и вы [/myshortcode] and [myshortcode]Enclosed content. с $ att " bla " и $ content " [/myshortcode] and [myshortcode]Enclosed content. "

Как отмечает автор билета (6 месяцев назад),

Поскольку оба файла [test /] [test] content [/ test] и [test] [/ test] [test] content [/ test] сломаны, кажется невозможным ввести короткий код с нулевым содержимым перед другим экземпляром того же тега shortcode.

Разница в trac-билете, похоже, не работает *, поэтому мне интересно, разрешил ли кто-нибудь это или может предложить исправление в wp-includes/shortcodes.php .


* Возможно, связанный с комментарием непосредственно перед измененной строкой в ​​wp-includes / shortcodes.php:

 // WARNING! Do not change this regex without changing do_shortcode_tag() and strip_shortcodes() 

Solutions Collecting From Web of "Как бороться с ошибкой WordPress: нельзя использовать завернутый и развернутый короткий код в том же сообщении"

Согласно новому сообщению mdawaffe на билет на трассу, на который ссылается этот вопрос:

 [test id="1"/] first self closed, now [test id="2"]with content[/test] [foo attr/]bar[foo attr/]bar[/foo] [test/] [test]foobar[/test] [test id="1"][/test] 

Все эти случаи теперь работают. Помимо модульных тестов, этот билет можно закрыть.

Я предполагаю, что это не будет проблемой в 3.3.

Насколько мне известно, вам нужно оставить одно пространство между несколькими короткими кодами.

Я считаю, что вы можете сделать это без особых проблем

 [myshortcode attr="test1" content="test1" ...etc] [myshortcode attr="test2" content="test2" ...etc] [myshortcode attr="test3" content="test3" ...etc] 

Это СЛЕДУЕТ также работать:

 [myshortcode]Enclosed content[/myshortcode] [myshortcode]Enclosed content[/myshortcode] [myshortcode]Enclosed content[/myshortcode] [myshortcode]Enclosed content[/myshortcode] [myshortcode]Enclosed content[/myshortcode] 

Также:

http://codex.wordpress.org/Shortcode_API

Парсер не обрабатывает смешивание закрывающих и не закрывающих форм одного и того же короткого кода, который вам нужен. Например, если у вас есть:

 [myshortcode example='non-enclosing' /] non-enclosed content [myshortcode] enclosed content [/myshortcode] 

Вместо того, чтобы обрабатываться как два коротких кода, разделенных текстовым «не закрытым контентом», синтаксический анализатор рассматривает это как один короткий код, в который помещается «закрытый контент» [myshortcode] вложенный контент ».

Таким образом, похоже, это не ошибка. Это, по-видимому, документированное поведение.

Заключительные короткие коды хорошо работают вместе.


Также я, возможно, не понимаю проблему, но я пробовал это:

 [svg src="test" width="300" height="300" style="display:block; margin:auto;" type="embed"]1111[/svg] [svg src="test" width="300" height="300" style="display:block; margin:auto;" type="embed"]1111[/svg] [svg src="test" width="300" height="300" style="display:block; margin:auto;" type="embed"]1111[/svg] [svg src="test" width="300" height="300" style="display:block; margin:auto;" type="embed"]1111[/svg] 

Это сработало отлично.

Код выглядел так:

 function process_shortcode( $atts , $input ) { $valid_attributes = array( 'src' , 'style' , 'type' , 'width' , 'height' ); $content = NULL; foreach( $atts as $attribute => $value ) { if( ! in_array( $attribute , $valid_attributes ) ) { $content .= "\n" . '<!-- Invalid attribute ignored: ' . $attribute . ' -->' . "\n"; } } switch( $atts[ 'type' ] ) { case 'iframe': $content .= '<iframe src="' . $atts[ 'src' ] . '" width="' . $atts[ 'width' ] . '" height="' . $atts[ 'height' ] . '" style="' . $atts[ 'style' ] . '">'; $content .= '</iframe>'; break; case 'embed': default: $content .= '<div>'; $content .= $input; $content .= '<embed src="' . $atts[ 'src' ] . '" width="' . $atts[ 'width' ] . '" height="' . $atts[ 'height' ] . '" '; $content .= 'type="image/svg+xml" pluginspage="http://www.adobe.com/svg/viewer/install/" style="' . $atts[ 'style' ] . '" /> '; $content .= '</div>'; break; } return $content; }