我正在尝试在PHP中创建Wordpress短代码样式功能,以将“[[133]]”之类的短代码替换为图像。基本上,我有一个ID为1-150的图像URL/标题/字幕的MySQL表,并且我希望能够使用如下的短代码将其动态插入到页面文本中:

Blabla bla bla bla bla。 [[5]]另外,bla bla bla bla bla [[27]]
嘿,bla bla bla! [[129]]


因此,我只想获取ID为$ id,然后将其提供给MySQL查询,例如
mysql_query(“SELECT标题,副标题,URL来自ID为$ id的图像”)
然后将“[[id]]”替换为img/title/subtitle。我希望能够在同一页面上多次执行此操作。

我知道这必须涉及到正则表达式以及preg_match,preg_replace,strstr,strpos,substr ...的某种组合,但是我不知道从哪里开始以及应该使用哪些函数来执行哪些操作。您能推荐一种策略吗?我不需要代码本身,只知道对哪些部分使用什么将非常有帮助。

最佳答案

如果您希望能够编写这样的短代码:

[[function_name_suffix parameter1 parameter2 ...]]

这是一种更完整的方法,使用preg_replace_callbackcall_user_func_array来实现参数化的简码。
function shortcodify($string){
    return preg_replace_callback('#\[\[(.*?)\]\]#', function ($matches) {
        $whitespace_explode = explode(" ", $matches[1]);
        $fnName = 'shortcode_'.array_shift($whitespace_explode);
        return function_exists($fnName) ? call_user_func_array($fnName,$whitespace_explode) : $matches[0];
    }, $string);
}

如果定义了此功能:
function shortcode_name($firstname="",$lastname=""){
    return "<span class='firstname'>".$firstname."</span>&nbsp;<span class='lastname'>".$lastname."</span>";
}

然后这个电话
print shortcodify("My name is [[name armel larcier]]");

将输出:
My name is <span class='firstname'>armel</span>&nbsp;<span class='lastname'>larcier</span>

这只是我现在根据supertrue的想法实现的东西。

任何反馈都非常欢迎。

关于php - 如何在PHP中创建Wordpress shortcode样式的函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4568463/

10-13 08:28