【问题标题】:Dynamic shortcodes and functions in WordPressWordPress 中的动态简码和函数
【发布时间】:2011-04-02 13:40:19
【问题描述】:

我在根据数据库条目自动生成简码时遇到了一点问题。

我能够获得正常的简码工作,即:

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

以上只是我希望它如何工作的一个例子。不是我正在使用的代码。我将如何实现这一目标? ): 谢谢。

【问题讨论】:

  • 考虑在 wordpress.stackoverflow.com 网站上询问这个 :-)
  • 你的意思是 wordpress.stackexchange.com :-)
  • 谢谢,我不知道有这样的wordpress论坛,已加书签(Y)

标签: wordpress shortcode


【解决方案1】:

谢谢各位,终于搞定了。这是将来可能需要它的任何人的代码:

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"]

【讨论】:

    【解决方案2】:

    换一种方式:简码可以带参数。所以不是[route 5] 而是[route rt="5"]。这样,您的短代码处理功能将保持通用,而更改的部分将是动态的。这也意味着如果在页面加载过程中遇到意外的短代码,您可以正确处理它,而不是 WordPress 只是剥离代码并将其替换为空。

    查看这里了解更多信息:http://codex.wordpress.org/Shortcode_API

    【讨论】:

      【解决方案3】:

      这是一个使用 PHP 5.3 anonymous functions 的动态短代码回调示例:

      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”。

      【讨论】:

      • 路由 $id
        中的实际内容(这只是一个示例).. 是一组 div,其类设置为存储在数据库中的值,样式=背景颜色也从数据库中的值设置,以及数据库中的路线名称。使用一个 hanle_route() 函数,我不完全理解如何在用户不必执行以下操作的情况下提取这些数据:[route num=5 bgcolor=#123456 class=W] 但我将尝试拥有去看看我是否可以尽可能为用户简化它。
      【解决方案4】:

      动态函数名在 PHP 中是不可能的。

      但你可以试试 eval。

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

      【讨论】:

      • 动态函数名在 PHP 中是完全可能的:"$func = 'my_function'; $func();"
      • @Bobby 你可以很容易地打电话给variable functions,但是创建起来稍微困难一些。
      猜你喜欢
      • 2015-01-05
      • 1970-01-01
      • 2011-11-25
      • 1970-01-01
      • 1970-01-01
      • 2021-08-04
      • 2012-08-15
      • 2011-06-13
      • 1970-01-01
      相关资源
      最近更新 更多