我目前正在开发一个文件浏览器插件,它需要注册用户的前端编辑功能。对于这个场景,我已经为我的自定义帖子类型注册了一些自定义重写规则。
重写分析器
正如您在上面的屏幕截图中所看到的,该插件有一个用于管理下载的基本CRUD界面。路由是通过template_redirect
钩子,用于检查查询变量action
设置,然后调用相应的操作方法。
add_action(\'template_redirect\', array($this, \'_requestHandler\'), 9);
// ...
public function _requestHandler() {
try {
$requestedPage = get_query_var(\'pagename\');
if((isset($requestedPage) && $requestedPage == \'webeo-download\')) {
$action = get_query_var(\'action\');
$this->action = (isset($action)) ? $action : null;
$downloadId = get_query_var(\'download\');
$this->downloadId = (isset($downloadId)) ? (int) $downloadId : null;
if(isset($this->action) && !is_null($this->action) && strlen($this->action) > 0) {
$method = \'action\' . ucfirst($this->action);
if(method_exists($this, $method)) {
call_user_func(array($this, $method));
} else {
throw new Webeo_Exception(sprintf(__(\'Action method <code>%s</code> does not exists.\', WEBEO_DOWNLOAD_TEXTDOMAIN), $method));
}
} else {
$this->actionIndex();
}
echo $this->view->render($this->view->viewTemplate);
exit();
}
} catch (Webeo_Exception $e) {
$this->view->assign(\'error\', $e);
echo $this->view->render(\'default.phtml\');
exit();
}
}
除了一件事之外,这真的很有效。我想阻止WordPress为我的自定义帖子类型生成任何默认重写规则。从外部访问我的帖子也应该受到限制。只有我上面的控制器负责向用户提供任何下载数据。
为此,我设置了参数public
和publicly_queryable
在内部为falseregister_post_type
作用我也设定了论点exclude_from_search
到true
.
这似乎奏效了。默认重写规则下未显示帖子(例如。example.com/downloads/<postname>
) 默认搜索结果中也没有列出下载。不幸的是$wp_query
参数也不再设置。因此我无法使用comments_template()
或模板中的任何其他循环函数。
很明显:WordPress不知道我的页面结构,无法生成正确的设置。我尝试手动预填充$wp_query
中重定向之前的参数template_redirect
方法但这似乎不起作用。我可能要迟到了。
global $wp_query, $post, $withcomments;
$wp_query->is_single = true;
$wp_query->is_page = true;
$post = get_post($this->downloadId);
$withcomments = true;
wp_reset_query();
有什么建议吗?
提前谢谢阿曼