wordpress:替换the_content中的方括号

时间:2010-10-25 15:13:38

标签: php wordpress-plugin wordpress

首先,我承认我是一个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'); }

2 个答案:

答案 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或“”。有关更多信息,请阅读有关布尔值的部分。使用===运算符测试此函数的返回值。