1

Wordpress でフィルター プラグインを作成しています。いくつかのプラグイン固有のタグを HTML のビットに置き換えています。

例:[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()。その値をどのように指定すればよいでしょうか?

より多くのコンテキストについては、次のように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;
    
}
4

2 に答える 2

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にはショートコードの解析を管理するショートコードAPIがあるので、ショートコード属性でやりたいことに集中することができます。

于 2010-08-25T16:43:19.450 に答える