您错误地使用了the_content
filter.
为什么代码不起作用
您不会将任何内容返回到引用的内容
即使您的条件失败,您也应该将引用的内容传回,否则如果条件返回,将不会显示任何内容false
您的preg_match
函数使用了错误的subject
. 在此处使用引用的内容。(这只是一个说明,您不需要致电全球$post
)
您的pattern
也是错误的,它不匹配任何模式,因此失败并按原样返回内容
根据您当前的代码,我已经使用了parse_url()
和parse_str()
幸亏this answer. 需要注意的是,从您的原始问题来看,您使用的格式如下
http://www.youtube.com/watch?v=C4kxS1ksqtw&feature=related
和http://www.youtube.com/watch?v=C4kxS1ksqtw
.
此代码
only 在格式上工作
watch?v=
我已相应修改了您的代码:
add_filter(\'the_content\', function ($post_content)
{
parse_str( parse_url( $post_content, PHP_URL_QUERY ), $matches);
if (!empty($matches[\'v\'])) {
$post_content = \'<object width="415" height="250">\';
$post_content .= \'<param name="movie" value="http://www.youtube.com/v/\' . $matches[\'v\'] . \'&hl=en_US&fs=1&"></param>\';
$post_content .= \'<param name="allowFullScreen" value="true"></param>\';
$post_content .= \'<param name="allowscriptaccess" value="always"></param>\';
$post_content .= \'<embed src="http://www.youtube.com/v/\' . $matches[\'v\'] . \'&hl=en_US&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="415" height="250"></embed>\';
$post_content .= \'</object>\';
$post_content = $post_content;
}
return $post_content;
});
EDIT 作为测试,以下代码
<?php
$string = \'http://www.youtube.com/watch?v=C4kxS1ksqtw&feature=related\';
parse_str( parse_url( $string, PHP_URL_QUERY ), $matches);
?><pre><?php var_dump($matches); ?></pre><?php
转储时提供以下输出
array(2) {
["v"]=>
string(11) "C4kxS1ksqtw"
["feature"]=>
string(7) "related"
}