2010-08-25 39 views
0

我在Wordpress中构建了一个过滤器插件,我用一些html替换了一些插件特定的标签。Preg_Replace和Capture值? PHP

实例:[VIDEO ID = 12]将通过preg_replaced在此功能

function display_video($text){ 

    $pattern = '/\[VIDEO ID\=\d+\]/'; 

    $text=preg_replace($pattern,get_video_block($id),$text); 

    return $text; 
} 

我不完全知道如何确保我提供正确的($ id)的参数去我get_video_block功能所取代为每个替代事件。

除了preg_replace函数内部没有真正的循环,所以我将如何提供该值?

想法?

EDIT(get_video_block)功能:

function get_video_block($id){ 
    global $wpdb; 
    $wpdb->show_errors(); 
    $table_name = $wpdb->prefix . "video_manager"; 
    $query = "SELECT * FROM " . $table_name . " WHERE `index` = '$id'"; 
    $results = $wpdb->get_results($query, ARRAY_A); 

    $results = $results[0]; 

    $returnString = '<div class="vidBlock">'; 
     $returnString .= $results['embed_code']; 

     $returnString .= '<div class="voteBar">'; 
      $returnString .= $results['vote_text']; 
      $returnString .= '<input type="button" value="YES" class="voteButton">'; 
      $returnString .= '<input type="button" value="NO" class="voteButton">'; 
     $returnString .= '</div>'; 

     $returnString .= $results['title'] . '<br>'; 
     $returnString .= $results['description'] . '<br>'; 

    $returnString .= '</div>'; 

    return $returnString; 

} 
+1

只是好奇,如果它是一个wordpress过滤器与[代码attrib =“”]模式,为什么不使用WordPress的短代码API? http://codex.wordpress.org/Shortcode_API – azureru 2010-08-25 16:47:57

+0

get_video_block()是做什么的? – 2010-08-25 16:55:11

+0

我没有使用它,因为我之前从未听说过它;) – 2010-08-25 16:56:14

回答

4

您可以使用preg_replace_callback()用于这一目的。您还需要将\d+换成(括号),以便在回调函数中捕获并使用它。

function display_video($text) { 
    $callback = create_function('$matches', 'return get_video_block($matches[1])'); 
    return preg_replace_callback('/\[VIDEO ID\=(\d+)\]/', $callback, $text); 
} 

注意$matches[1]被使用,因为$matches[0]包含正则表达式匹配整个字符串。

Erwin的评论可能对您有用 - WordPress有一个shortcode API,它管理您的短代码解析,因此您可以专注于处理您想要对短代码属性进行的操作。