我最近将一些旧的WordPress代码转换为使用admin-post.php
机械装置
add_action( \'admin_post_myaction\', function(){
//...my code to do stuff here...
//redirect back to the main page
$url = menu_page_url( \'my_original_menu_item\', false );
wp_safe_redirect( $url );
} );
正如您在上面的简化代码示例中所看到的,一旦我处理完我的帖子,我就会获取原始菜单项的URL,并将用户重定向回他们来自的页面。
然而,这是行不通的。这个menu_page_url
不返回菜单URL。当我调查这件事时,我发现global $_parent_pages;
变量menu_page_url
依赖项为空。我通过调用admin\\u菜单钩子修复了这个问题
do_action( \'admin_menu\', \'\' );
$url = menu_page_url( \'my_original_menu_item\', false );
wp_safe_redirect( $url );
但这给我留下了几个问题。
以上是(在admin-post.php
请求)标准系统行为?或者我的系统是否有其他问题?
请求期间,系统可以加载哪些内容,不可以加载哪些内容admin-post.php
? (可能是一个巨大的问题,感谢指导员)
是上述模式(发布到admin-post.php
, 使用重定向回menu_page_url
被认为是不错的WordPress实践,还是我滥用了admin-post.php
?这里有经验的程序员——我只是想把WordPress的概念映射到web MVC框架中我熟悉的东西上。
最合适的回答,由SO网友:C Sabhar 整理而成
使用管理帖子时。php,管理帖子上没有加载菜单。php请求是标准的wordpress行为。在动作后挂钩上进行处理后重定向的标准做法是:wp_redirect( admin_url( \'admin.php?page=YOUR_PAGE\' ) );
使用admin post时。php、wordpress将包含wp admin/includes/wp admin。php而不是wp admin/wp admin。php(Wordpress Admin Bootstrap)跳过一些设置。在此包含的文件中跳过的一个API调用是菜单生成文件。
在Wordpress管理引导过程中,系统包括菜单。php,最终启动操作以加载和构建管理菜单。Post操作故意跳过了菜单加载处理。
对于插件和表单,请发布到adin post。php被认为是正确的,处理后使用wp\\u redirect和admin\\u url将页面重定向到原始菜单项页面。