5

私は現在、タブを作成する WordPress のショートコードを作成しようとしています。利用可能なショートコードがあることは知っています。しかし、自分でそれらを作成する方法を学ぼうとしています。

現在、タブ メニュー項目を生成していますが、まったく新しい div にコンテンツを配置することに固執しています。

フロントエンドの使用法:

[tabs]
 [tab title="tab" active="y" id="home"]home[/tab]
 [tab title="tab2" active="n" id="about"]about[/tab]
 [tab title="tab3" active="n" id="help"]help[/tab]
[/tabs]

そして、コード:

function tabs_group( $atts, $content = null ) {  
    extract(shortcode_atts(array(  
    'id' => '',
    'class' => ''
    ), $atts));  

    $output  = '<ul class="nav nav-tabs '.$class.'"  ';

    if(!empty($id))
        $output .= 'id="'.$id.'"';

    $output .='>'.do_shortcode($content).'</ul>';

    return $output;  
}  

add_shortcode("tabs", "tabs_group");

function tab($atts, $content = null) {  
    extract(shortcode_atts(array(  
    'id' => '',
    'title' => '',
    'active'=>'n' 
    ), $atts));  
    if(empty($id))
        $id = 'tab_item_'.rand(100,999);

    $output = '<li class="'.($active == 'y' ? 'active' :'').'">
                <a href="#'.$id.'">'.$title.'</a>
                </li>';  
    $output .= '<div class="tab-content">
                 <div class="tab-pane active" id="'.$id.'">'.$content.'</div>
                 <div class="tab-pane"  id="'.$id.'">'.$content.'</div>
                 <div class="tab-pane" id="'.$id.'">'.$content.'</div>
                </div>';
    return $output;
}
add_shortcode("tab", "tab");

現在、次を返します。

<ul class="nav nav-tabs">
 <li class="active">
                <a href="#home">tab</a>
                </li><div class="tab-content">
                 <div class="tab-pane active" id="home">home</div>
                 <div class="tab-pane"  id="home">home</div>
                 <div class="tab-pane" id="home">home</div>
                </div>
 <li class="">
                <a href="#about">tab2</a>
                </li><div class="tab-content">
                 <div class="tab-pane active" id="about">about</div>
                 <div class="tab-pane"  id="about">about</div>
                 <div class="tab-pane" id="about">about</div>
                </div>
 <li class="">
                <a href="#help">tab3</a>
                </li><div class="tab-content">
                 <div class="tab-pane active" id="help">help</div>
                 <div class="tab-pane"  id="help">help</div>
                 <div class="tab-pane" id="help">help</div>
                </div>
</ul>

そして私はそれを返す必要があります:

<ul class="nav nav-tabs "  >
 <li class="active">
    <a href="#home">tab</a>
 </li>
 <li class="">
    <a href="#about">tab2</a>
 </li>
 <li class="">
    <a href="#help">tab3</a>
 </li>
</ul>

<div class="tab-content">
 <div class="tab-pane active" id="home">blah</div>
 <div class="tab-pane" id="about">blah</div>
 <div class="tab-pane" id="help">blah</div>
</div>

出力に追加しました。Obmerk Kronen に感謝します。

どんな助けでも大歓迎です。

4

3 に答える 3

1

現在、コンテンツに div のコンテンツ部分がありません

$output .= '<div class="tab-content">
 <div class="tab-pane active" id="'.$id.'">'.$title.'</div>
 <div class="tab-pane"  id="'.$id.'">'.$title.'</div>
 <div class="tab-pane" id="'.$id.'">'.$title.'</div>
</div>'
于 2013-05-07T08:24:08.060 に答える
1

ここでの問題は、後で div を追加する必要があることです。ショートコードdo_shortcode($content)を解析しているtab間、後で出力できるように div をどこかに保持する必要があります。

これを行うための簡単な方法(最も良い方法ではありません)は、グローバル変数を使用することです。

add_shortcode('tabs', 'tabs_group');
add_shortcode('tab', 'tab');

// this variable will hold your divs
$tabs_divs = '';

function tabs_group( $atts, $content = null ) {
    global $tabs_divs;

    // reset divs
    $tabs_divs = '';

    extract(shortcode_atts(array(  
        'id' => '',
        'class' => ''
    ), $atts));  

    $output = '<ul class="nav nav-tabs '.$class.'"  ';

    if(!empty($id))
        $output .= 'id="'.$id.'"';

    $output.='>'.do_shortcode($content).'</ul>';
    $output.= '<div class="tab-content">'.$tabs_divs.'</div>';

    return $output;  
}  


function tab($atts, $content = null) {  
    global $tabs_divs;

    extract(shortcode_atts(array(  
        'id' => '',
        'title' => '',
        'active'=>'n' 
    ), $atts));  

    if(empty($id))
        $id = 'tab_item_'.rand(100,999);

    $activeClass = $active == 'y' ? 'active' :'';
    $output = '
        <li class="'.$activeClass.'">
            <a href="#'.$id.'">'.$title.'</a>
        </li>
    ';

    $tabs_divs.= '<div class="tab-pane '.$activeClass.'" id="'.$id.'">'.$content.'</div>';

    return $output;
}
于 2013-05-07T08:59:51.707 に答える