Preg_Replace и Capture Value? PHP - PullRequest
       1

Preg_Replace и Capture Value? PHP

0 голосов
/ 25 августа 2010

Я создаю плагин фильтра в 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 так, как бы я поставил это значение?

Мысли?

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 Ответ

4 голосов
/ 25 августа 2010

Вы можете использовать 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] содержит всю строку, совпадающую с регулярным выражением.

Комментарий Эрвина может быть вам полезен - WordPress имеет API шорткода , который управляет разбором шорткодов для вас, поэтому вы можете сосредоточиться на том, что вы хотите делать с атрибутами шорткода.

...