2

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

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

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');
}

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

4

4 に答える 4

4

PHP5.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」をお勧めします。

于 2010-08-23T12:50:10.243 に答える
3

みんなありがとう、ついにそれが機能するようになりました。将来必要になる可能性のある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"]

于 2010-08-23T15:59:11.450 に答える
1

PHPでは動的関数名は使用できません。

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

eval('function route_sc'.$route->id.' () { return "<div>Route '.$route->id.'</div>"; }');
于 2010-08-23T10:09:16.597 に答える
0

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

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

于 2010-08-23T14:10:15.937 に答える