插件管理用户界面页面的WordPress操作

时间:2012-12-12 作者:kakuki

如果请求的页面的查询参数为,如何为插件管理UI页面创建自定义编辑页面$_GET[\'action\'] == \'edit\'?

我的插件条目url如下所示

/admin.php?page=parser-top-level-handle
然后,我在表中列出了每行的所有项目。在行上悬停显示“编辑|删除”-链接和其他操作。如果我点击edit-链接,我得到以下URl:

/edit.php?page=parser-top-level-handle&action=edit&record=55
此时,我想将用户重定向到编辑表单。

我试图使用的代码被重定向到自定义编辑页面

 add_action( \'wp_loaded\', array ( \'parserAdmin\', \'init\' ) );

     class parserAdmin {

            private $db;

            private $add_page;


            public static function init()
            {
                new self;
            }

            //the consructor for parser admin
            function __construct(){

                global $wpdb, $posts;
                $this->db = $wpdb;      
                add_action(\'admin_menu\', array($this , \'parser_add_pages\') );

                $this->get_targets();
                //Here I inspect if action exits or not             
                if($_GET[\'action\']){            
                    switch ($_GET[\'action\']){
                        case \'edit\':
                               //than here should be a redirect to a custom page to edit the item passing the record query argument, do I need in this case hidden sup-page?!!!
                            break;
                        case \'delete\':
                            var_dump(\'test\');
                            $this->_delete_target($_GET[\'record\'] , $_GET[\'post_id\']);      
                            break;              
                    }           
                }
}

1 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

您可能无权访问$_GET. 我想你可能需要global $wpdb, $posts, $_GET;

其次,一切都发生在构造器中,即插件加载时,即每次加载站点的任何页面时。因此,每次加载页面时,您都在检查$_GET[\'action\'] 用于“编辑”或“删除”。这些动作值非常常见。它们甚至被用于WordPress核心。编辑帖子时请查看URL。你在这里所做的一切将导致无休止的冲突。

你只想在你的插件页面上处理它,而不是在网站上全局处理,所以把代码从构造器中提取出来,并将其放入自己的函数中。然后将该函数挂接到特定于插件页面的钩子上。

function parser_handler() {
  global $_GET;

  //Here I inspect if action exits or not             
  if($_GET[\'action\']){            
    switch ($_GET[\'action\']){
      case \'edit\':
    //than here should be a redirect to a custom page to edit the item passing the record query argument, do I need in this case hidden sup-page?!!!
    break;
      case \'delete\':
    var_dump(\'test\');
    $this->_delete_target($_GET[\'record\'] , $_GET[\'post_id\']);      
    break;              
    }           
  }
}
在构造函数中添加。。。

add_action(\'load-parser-top-level-handle\',array($this,\'parser_handler\'));
我在猜测load- 钩将其视为占位符。下面是如何找到正确的钩子。加载页面。查看源。在页面顶部附近查找Javascript。在这个脚本中应该是pagenow 参数取该值并在其前面加上“load-”。该钩子在您的特定插件页面被发送到浏览器之前立即运行。

结束

相关推荐