質問

データベースエントリに基づいて、ショートコードの自動系統に少し問題があります。

私は通常のショートコードを動作させることができます。

function route_sc5() {
        return "<div>Route 5</div>";
    }
    add_shortcode('route 5','route_sc');

そして、それをアクティブにするための次のショートコードはそうなるでしょう [route 5]

これは機能します。しかし、私が必要なのは、各データベースエントリに対して作成されるショートコードです。何かのようなもの:

$routes = $wpdb->get_results( $wpdb->prepare("SELECT * FROM wp_routes") );
foreach($routes as $route)
{
    function route_sc$route->id () {
        return "<div>Route $route->id</div>";
    }
    add_shortcode('route $route->id','route_sc$route->id');
}

上記は、私がそれをどのように機能させたいかの例です。文字通り私が使用しているコードではありません。これを達成するにはどうすればよいですか? ): ありがとう。

役に立ちましたか?

解決

PHP 5.3を使用した動的ショートコードコールバックの例は次のとおりです。 匿名関数:

for( $i = 1; $i <= 5; $i++ ) { 
    $cb = function() use ($i) {
        return "<div>Route $i</div>";
    };  

    add_shortcode( "route $i", $cb );
}

ただし、尋ねなければなりません。ショートコード引数を使用して何をする必要があるかを達成できますか?すなわち。 [route num=3]. 。その後、1つだけを手に入れることができます handle_route() 機能と1つ [route] ショートコード、物事を簡素化する可能性があります。

また、技術的には、名前にスペースを持つショートコードを含めることができますが、混乱するあいまいさを作成すると思います。各ルートに特定のショートコードが必要だと判断した場合は、「ルート5」ではなく「ルート5」または「ルート5」をお勧めします。

他のヒント

みんなありがとう、ついにそれを機能させました。将来それを必要とする可能性のあるany1のコードは次のとおりです。

function route_sc($atts, $content = null) {
    extract(shortcode_atts(array(
    'num' => '',
    'bg' => '',
    'text' => '',
), $atts)); 
    global $wpdb;
    $bus = $wpdb->get_row( $wpdb->prepare("SELECT * FROM wp_route WHERE id = '$num'") );
    return "<div class='".$bus->text_colour."' style='background-color:".$bus->bg_colour."'>".$bus->route_id."</div></div>";
}
add_shortcode('route','route_sc');

ショートコード付き [route num="5a"]

PHPでは動的関数名は不可能です。

しかし、あなたは評価を試すことができます。

eval('function route_sc'.$route->id.' () { return "<div>Route '.$route->id.'</div>"; }');

別の方法で進む:ショートコードはパラメーターを取ることができます。その代わりに [route 5] 行う [route rt="5"]. 。これにより、ショートコード処理機能は一般的なままであり、変更される部分は動的であることを意図しています。また、ページの読み込み中に予期しないショートコードが発生した場合、WordPressがコードを削除して何もないことに置き換えるのではなく、適切に処理できることを意味します。

詳細については、こちらをご覧ください。 http://codex.wordpress.org/shortcode_api

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top