phearst
  • 0
Новичок

Проблема с шорткодом внутри шорткода

  • 0

Я использую это в своем файле Functions.php для форматирования коротких кодов для некоторых вкладок пользовательского интерфейса jQuery, однако я также использую короткий тег для ссылки на свои встраивания видео, которые прерываются, когда они находятся внутри вкладок пользовательского интерфейса.

Мой вопрос в том, как мне просто передать короткий код видео через эту функцию без изменений:

// jQuery UI Tabs
add_shortcode( 'tabgroup', 'etdc_tab_group' );
function etdc_tab_group( $atts, $content ){
$GLOBALS['tab_count'] = 0;

do_shortcode( $content );

if( is_array( $GLOBALS['tabs'] ) ){
foreach( $GLOBALS['tabs'] as $tab ){
$tabs[] = '<li><a class="" href="#'.$tab['title'].'">'.$tab['title'].'</a></li>';
$panes[] = '<div id="'.$tab['title'].'"><h3>'.$tab['title'].'</h3>'.$tab['content'].'</div>';
}
$return = "\n".'<!-- the tabs --><div id="tabs"><ul>'.implode( "\n", $tabs ).'</ul>'."\n".'<!-- tab "panes" -->'.implode( "\n", $panes ).'</div>'."\n";
}
return $return;
}

add_shortcode( 'tab', 'etdc_tab' );
function etdc_tab( $atts, $content ){
extract(shortcode_atts(array(
'title' => 'Tab %d'
), $atts));

$x = $GLOBALS['tab_count'];
$GLOBALS['tabs'][$x] = array( 'title' => sprintf( $title,   $GLOBALS['tab_count'] ), 'content' =>  $content );
$GLOBALS['tab_count']++;
}

Краткий код моего видео выглядит так

. Я предполагаю, что мне просто нужно что-то установить в $ GLOBALS, но я не знаю, как я могу просто передать это без изменений.

(Мой короткий код «видео» переводится другим плагином)

Обновление: это было решением моей проблемы. Добавление do_shortcode в $panes:

$panes[] = '<div id="'.$tab['title'].'"><h3>'.$tab['title'].'</h3>'.do_shortcode($tab['content']).'</div>';
Share
  1. попробуйте добавить do_shortcode($content); в функцию etdc_tab

    • 0
  2. Вот трюк, который wp-includes/media.php используется для embed шорткода: сначала удалите все шорткоды, затем добавьте определенный шорткод обратно в систему, отфильтруйте для него свой контент, а затем перерегистрируйте исходные шорткоды.

    Попробуй это:

    function etdc_tab_group( $atts, $content ){
      global $shortcode_tags;
      $GLOBALS['tab_count'] = 0;
    
      // save the shortcode registrations
      $orig_shortcode_tags = $shortcode_tags;
      // remove them all
      remove_all_shortcodes();
      // add ours back in
      add_shortcode( 'tab', 'etdc_tab' );
      $content = do_shortcode( $content );
      // restore original shortcodes
      $shortcode_tags = $orig_shortcode_tags;
    
      //...rest of the function...
    }
    

    На самом деле, теперь, когда я смотрю на эту etdc_tab_group() функцию более внимательно, я удивлен, что она ничего не ломает… Вы копировали и вставляли ее напрямую или что-то редактировали? Потому что он никогда больше не $content исчезнет.

    Итак, первое, что я бы попробовал, это просто прокомментировать do_shortcode() вызов и посмотреть, как это работает. Если это сломает что-то еще, попробуйте метод выше?

    • 0

Оставить ответ

You must login to add an answer.