2

我在开发 Wordpress 插件时遇到了这个问题。这是我正在使用的区域的代码片段:

add_submenu_page( 'admin_manager',
                  'Add Event',
                  'Add Event',
                  'manage_options',
                  'add_event&action=modify',
                  'add_event_handler' );

如您所见,在我的菜单 slug 上,我想添加 '&action=modify'

'add_event&action=modify'

但是当我这样做时,Wordpress 拒绝我访问并说我没有适当的权限。如果没有额外的参数,它就可以正常工作,wordpress 中是否有一些不允许这样的东西?

有什么想法或解决方法吗?

4

1 回答 1

2

slug 参数不打算接受查询参数。如果您打算设置某种默认操作(我还认为“操作”查询很可能是 Wordpress 本身使用的保留关键字),为什么不将页面设置为填充为如果参数默认存在?

我的猜测是您还需要其他参数,然后您可以使用表单发送数据(通过 POST 或 GET)以使用这些参数填充您的页面。例如:

<!-- SUBMENU PAGE -->
<form action="" method="GET">
    <label>Select Action: </label>
    <select name="jKern_action">
        <option value="modify">Modify</option>
        <option value="add">Add Event</option>
        <option value="delete">Delete Event</option>
    </select>
</form>
<?php
$action = isset($_GET['jKern_action']) ? $_GET['jKern_action'] : 'modify';
switch($action)
{
    case 'add' :
    ?>
        <!-- YOUR EVENT ADDING HTML HERE -->
    <?php
    break;
    case 'delete' :
    ?>
        <!-- DELETE HTML HERE -->
    <?php
    break;
    default :
    ?>
        <!-- DEFAULT MODIFICATION HTML -->
<?php
}
?>

这不是一个完美的例子,但我相信你可以收集到这里所做的事情。如前所述,slug 参数不是用来填充查询的,您还应该将 GET 和 POST 键(以及选项和元键)命名为您的代码所独有的东西,这样任何命名冲突的可能性就会很小。

在不依赖表单导航的情况下正确使用子菜单导航的另一个示例是这样的:

<a href="?page=add_event&jKern_action=add">Add Event</a>
<a href="?page=add_event&jKern_action=modify">Edit Event</a>
<a href="?page=add_event&jKern_action=delete">Delete Event</a>
<?php
...
?>

您最好的选择是查找插件作者如何有效使用 add_submenu_page() 函数的一些示例,但大多数情况下,您应该使用它并习惯正常的 Wordpress 流程的工作方式。

祝你好运,如果这有帮助,请告诉我。

于 2012-05-29T21:27:56.080 回答