首先,我承认我是一个WP-noob,所以我甚至不确定我是否会采用正确的方法。我正在尝试创建一个简单的插件来替换the_content中的匹配文本。代码在我的PHP测试服务器上运行,但在WP中失败,让我相信我错过了一些东西。我希望有人能指出我正确的方向。
我希望代码能够以[custom attr =“x”attr2 =“y”] sometext [/ custom]格式搜索the_content中的字符串。要做到这一点,我只是使用preg_match / regex匹配模式,然后用str_replace交换它。我不确定方括号是否导致问题(因为WP显然使用这些用于快速链接)。任何人都可以伸出援手吗?
下面是一些示例代码(简化$txt
,但您仍然可以了解我正在尝试完成的任务)。谢谢。
function test_function($content)
{
global $post;
$match = preg_match_all('/[custom w="(\d+)" h="(\d+)"\]((?:[a-z][a-z][0-9]+[a-z0-9]))\[\/custom\]/is', $content, $matches);
if($match) {
$width = $matches[1][0];
$height = $matches[2][0];
$customtxt = $matches[3][0];
$rep = '[custom attr="' . $width . '" attr2="' . $height . '"]' . $customtext . '[/custom]';
$txt = '
<div id="' . $customtxt . '_container" class="overlay">
<img width="'.$width.'" height="'.$height.'" src="'.$customtxt.'_thumb.jpg" />
</div>
';
if(strpos($content, $rep)) {
$content = str_replace($rep, $txt, $content);
}
}
return $content;
}
function insert_head()
{
?>
<script language="javascript" type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js"></script>
<script language="javascript" type="text/javascript" src="<?php bloginfo('wpurl') ?>/wp-content/plugins/test_function/js/test_function.pack.js"></script>
<?php
}
add_action('wp_head', 'insert_head');
if(is_single()) {
add_filter('the_content', 'test_function');
} else {
add_filter('the_excerpt', 'test_function');
}
答案 0 :(得分:4)
为什么不使用WordPress短代码api? - &GT; http://codex.wordpress.org/Shortcode_API
答案 1 :(得分:1)
据我所知,这里有很多错误。首先,我会使用preg_replace而不是preg_match。所以我会写这样的函数:
function test_function($content)
{
$txt = '
<div id="\3_container" class="overlay">
<img width="\1" height="\2" src="\3_thumb.jpg" />
</div>';
return preg_replace('%\[custom w="(\d+)" h="(\d+)"\]((?:[a-z][a-z][0-9]+[a-z0-9]))\[\/custom\]%', $txt, $content);
}
基本上是2行代码。您遇到的其他一些问题:
1)你的正则表达式失败了。第一个[没有被转义,因为你知道这是正则表达式中的一个特殊字符。我怀疑你的正则表达式还有其他问题。
2)来自strpos的PHP手册:
此函数可能返回布尔值FALSE,但也可能返回一个非布尔值,其值为FALSE,例如0或“”。有关更多信息,请阅读有关布尔值的部分。使用===运算符测试此函数的返回值。