我正在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;
}
我不确定如何确保为每次替换事件向get_video_block函数提供正确的($ id)参数。
除了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;
}
答案 0 :(得分: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管理你的短代码解析,所以你可以集中精力处理你想用短代码属性做什么。
答案 1 :(得分:0)
@BoltClock 的回答是正确的,但 create_function()
现在有点过时了。
通过 preg_replace_callback()
内的匿名函数将捕获的 id 传递给辅助函数。
辅助函数返回的字符串将用于替换整个匹配的短代码。
由于没有为 preg_replace_callback()
声明限制,因此它可能会进行多次替换。
代码:(Demo)
function get_video_block($id) {
return "***replacement text for $id***";
}
function display_video($text) {
return preg_replace_callback(
'/\[VIDEO ID=(\d+)]/',
function($m) {
return get_video_block($m[1]);
},
$text
);
}
echo display_video("Here is a video [VIDEO ID=33] to watch");
输出:
Here is a video ***replacement text for 33*** to watch
附言正如@azureru 在评论中提到的,这似乎是实现 Wordpress 短代码 api 的好选择。 http://codex.wordpress.org/Shortcode_API