根据数据库条目,我对自动化短码有一些问题。

我能够获得普通的短码工作,即:

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

不过,我必须问:您能否完成使用短代码参数需要做的事情? IE。 [route num=3]. 。那你只有一个 handle_route() 功能和一个 [route] 快捷代码,这可能简化事物。

另外,虽然从技术上讲,您可以在名称中包含一个带有空间的短代码,但我认为它会产生令人困惑的歧义。如果您确定每个路线需要特定的短代码,我建议“ Route5”或“ Route-5”而不是“ Route 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