这似乎是微不足道的,但我找不到解决方案。
我有帖子的自定义过滤器。并非每个用户都可以编辑每个帖子。它取决于自定义元标记。 (这不是那么重要)
重要的是,如果他们使用类似`的URL
/edit.PHP?post=467
他们可以到达我“不允许他们”的帖子。
我正在寻找的是,是否有可能获得像钩子一样的URL
admin_init
所以我可以做点什么
if (!isset($_GET['post'])){ //redirect }
要么
if ($_GET['post'] == $forbidenID) { //redirect }
多谢你们。 :-)
编辑:我刚刚意识到你在edit.php,这意味着WordPress的管理区域...在这种情况下,正如你提到的`admin_init'动作https://codex.wordpress.org/Plugin_API/Action_Reference/admin_init
尝试类似的东西:
**快速的事情:你说你想重定向,如果isset($_GET['post'])
正确...在你的例子中,你说!isset($_GET['post'])
所以要验证你的意思。
function restrict_admin_with_redirect() {
if (isset($_GET['post'])) {
wp_redirect( site_url() );
exit;
}
}
add_action( 'admin_init', 'restrict_admin_with_redirect', 1 );
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
其他信息:
如果正在执行的页面不在管理区域中,而是在WordPress的前端,就像普通页面或帖子一样:
有一些钩子可以用于此。您也可以选择编辑主题的header.php
文件。
看看the_content
过滤器:https://codex.wordpress.org/Plugin_API/Filter_Reference/the_content
您可以将其添加到functions.php
文件中(最好,您应该使用子主题,因此如果主题更新,则不会覆盖更改。)
function my_the_content_filter($content) {
if (isset($_GET['post'])){
return 'You do not have access to this page.';
}
// otherwise returns the database content
return $content;
}
add_filter( 'the_content', 'my_the_content_filter' );
或者在header.php文件的最开头(在输出任何html之前),添加如下内容:
if (isset($_GET['post'])){
wp_redirect( {url to redirect to} );
exit();
}