只执行第一个短码

时间:2016-09-25 作者:Erkan Boga

我正试图在一页上获得2个短代码(单包含和单概况)。问题是,只执行第一个短代码。简单页面上的第二个短代码返回短代码字符串。

此代码位于插件中:

add_filter(\'the_content\', \'initQmediaRechnerSnippet\');
function initQmediaRechnerSnippet($content)
{
    $pattern = "/\\[([^=]*)=?(.*)?\\]/";

    if (preg_match($pattern, $content, $treffer))
    {
        $snippetName = $treffer[1];
        $snippet = \'\';
        switch ($snippetName) {
            case \'kreditkarte\':
                $snippet = qRechnerInclude(API_CALC_KREDITKARTE, \'\');
                $content = str_replace(\'[\' . $snippetName . \']\', $snippet, $content);
                break;
            case \'single-include\':
                list($ids, $product) = explode(":", $treffer[2]);
                $snippet = qRechnerInclude(str_replace(\'$PRODUCT$\', $product, API_CALC_SINGLEINCLUDE . $ids), \'\');
                $content = str_replace(\'[\' . $snippetName . \'=\' . $ids . \':\' . $product . \']\', $snippet, $content);
                break;
            case \'single-factsheet\':
                list($ids, $product) = explode(":", $treffer[2]);
                $snippet = qRechnerInclude(str_replace(\'$PRODUCT$\', $product, API_CALC_SINGLEFACTSHEET . $ids), \'\');
                $content = str_replace(\'[\' . $snippetName . \'=\' . $ids . \':\' . $product . \']\', $snippet, $content);
                break;
            default:
                ;
                break;
        }
    }
    return $content;
}
我怎样才能让它工作?(删除中断不起作用)将preg\\u match替换为preg\\u match\\u all会停止所有短代码的执行。

1 个回复
SO网友:cjbj

如注释所示,此代码与shortcodes in the WordPress sense, 但很容易理解为什么它永远不会评估多个模式。

preg_match 如果在干草堆中至少找到一个针实例,则返回true。因此,无论找到多少“短代码”,PHP都只会执行以下代码一次,用一个字符串替换另一个字符串。