Php wordpress:替换内容中的方括号

Php wordpress:替换内容中的方括号,php,wordpress,Php,Wordpress,首先,我承认我是个笨蛋,所以我甚至不确定我是不是走对了路。我正在尝试创建一个简单的插件来替换内容中匹配的文本。代码在我的PHP测试服务器上运行,但在WP中失败,让我相信我遗漏了一些东西。我希望有人能给我指出正确的方向 我想让代码在内容中搜索[custom attr=“x”attr2=“y”]sometext[/custom]格式的字符串。为此,我只是使用preg_match/regex来匹配模式,然后用str_replace将其替换掉。我不确定是否是方括号导致了问题(因为WP显然将这些用于快速链

首先,我承认我是个笨蛋,所以我甚至不确定我是不是走对了路。我正在尝试创建一个简单的插件来替换内容中匹配的文本。代码在我的PHP测试服务器上运行,但在WP中失败,让我相信我遗漏了一些东西。我希望有人能给我指出正确的方向

我想让代码在内容中搜索[custom attr=“x”attr2=“y”]sometext[/custom]格式的字符串。为此,我只是使用preg_match/regex来匹配模式,然后用str_replace将其替换掉。我不确定是否是方括号导致了问题(因为WP显然将这些用于快速链接)。有人能帮忙吗

下面是一些示例代码(简化的
$txt
,但您仍然可以了解我试图实现的目标)。多谢各位


功能测试功能($content)
{
全球$员额;
$match=preg\u match\u all('/[custom w=“(\d+”h=“(\d+”)(((?:[a-z][a-z][0-9]+[a-z0-9])\[\/custom\]/is',$content,$matches);
如果($match){
$width=$matches[1][0];
$height=$matches[2][0];
$customtxt=$matches[3][0]

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);
}
$rep='[custom attr=“”.$width.”“attr2=“.$height.”].$customtext.[/custom]';
$txt=
';
if(strpos($content,$rep)){
$content=str_replace($rep,$txt,$content);
}
}
返回$content;
}

函数插入头() { ?>

据我所知,这里有很多错误。首先,我将使用preg_replace而不是preg_match。因此,我将编写如下函数:

功能测试功能($content)
{
$txt=
';
返回preg\u replace('%\[custom w=“(\d+”h=“(\d+”)(((?:[a-z][a-z][0-9]+[a-z0-9])\[\/custom\]%,$txt,$content);
}
这基本上是两行代码。您遇到的一些其他问题:

1) 你的正则表达式失败了。第一个[s]没有被转义,正如你所知,这是正则表达式中的一个特殊字符。我怀疑你的正则表达式也有其他问题

2) 从STRPO的PHP手册中:


此函数可能返回布尔值FALSE,但也可能返回计算结果为FALSE的非布尔值,例如0或“”。有关更多信息,请阅读布尔值部分。使用===运算符测试此函数的返回值。

据我所知,这里有许多错误。首先,我将使用preg_replace而不是preg_match。因此,我将这样编写函数:

功能测试功能($content)
{
$txt=
';
返回preg\u replace('%\[custom w=“(\d+”h=“(\d+”)(((?:[a-z][a-z][0-9]+[a-z0-9])\[\/custom\]%,$txt,$content);
}
这基本上是两行代码。您遇到的一些其他问题:

1) 你的正则表达式失败了。第一个[s]没有被转义,正如你所知,这是正则表达式中的一个特殊字符。我怀疑你的正则表达式也有其他问题

2) 从STRPO的PHP手册中:


此函数可能返回布尔值FALSE,但也可能返回计算结果为FALSE的非布尔值,例如0或“”。有关更多信息,请阅读Booleans部分。使用===运算符测试此函数的返回值。

为什么不直接使用WordPress短代码api?->

为什么不直接使用WordPress短代码api?->

这将是一个很好的问题,因为这将是我道歉的一个很好的问题广告c&p工作(从较旧版本复制,d'oh!),因此是未替换的括号。谢谢你清理和简化它。我还有很多东西要学。我很抱歉。这是一份糟糕的c&p工作(从较旧版本复制,d'oh!),因此是未替换的括号。谢谢你清理和简化它。我还有很多东西要学。
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);
}