0

我有一个基本的自定义函数,它接受 GET/POST 请求,并根据请求处理它们。简单地说(让我们现在说 GET):

function miccheck() {
    echo "Hello, Mic Check 123! ". $_GET["specialguest"];
}
add_action( 'wp', 'miccheck' );

然后,我可以简单地从 URL 调用该函数,如下所示:

http://www.example.com/?specialguest=JACKIE

然后主页出现了Hello, Mic Check 123! JACKIE
简直了。

然后,现在我想要一个带有 RestFUL URL 的特定入口点。喜欢:

http://www.example.com/miccheck/?specialguest=JACKIE
or either
http://www.example.com/miccheck/specialguest/JACKIE

即使第一个也可以,只要我有一个特定的入口点。请问如何在Wordpress中做到这一点?

4

1 回答 1

1

我在我的情况下经历过

http://example.com?error=NoData&p=-999将 wordpress 重定向到 404 页面并$_GET['error']给出NoData. 但是,如果 和 的位置errorp交换,则 $_GET['error'] 什么也没有。我猜 wordpress 查询在得到 a 后会停止处理p(只是猜测,不确定)。

我在这里应用的技巧是:
我使用 $_REQUEST 数组,它同时给出errorp(不管它们的位置)。记住这件事,我会用这个信息来提供解决方案。

对于example.com/param1/param2/.../paramN格式,您还需要编辑.htcaccess 文件。我没有编辑 .htcaccess 文件的经验,除非您熟悉它,否则不建议使用它。


解决方案的想法

如果您创建菜单页面/子菜单页面,则 wordpress url 变为:http://example.com/wordpressLocation/wp-admin/admin.php?action=PageHandleName&otherParam=bla-bla-bla
所以,这里有一个入口点(PageHandler),它必须预先激活/存储,所以提供入口点函数名称没有风险。


建议的解决方案

我会将miccheck作为另一个参数并仅调用 example.com。因此,将您的网址生成为:example.com/?entryPoint=miccheck&specialGuest=Jack。然后在里面$_REQUEST['miccheck']你会找到要调用的函数名并且$_REQUEST['specialGuest']包含数据。

安全风险:
以入口点名称为变量,通过用户提供的变量调用函数可能存在巨大的安全风险。您应该在代码中维护一个单独的数组,以确保只调用允许的函数。说,你的代码可能变成:

$listOfFunction = array('miccheck','restCheck');
if( $_REQUEST['entryPoint']) not in $listOfFunction)
  throw new Exception('invalid entry point');
于 2013-10-10T11:12:17.593 回答