2010-08-25 48 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,它管理您的短代碼解析,因此您可以專注於處理您想要對短代碼屬性進行的操作。