在edit.php加载之前的Wordpress钩子

时间:2018-01-04 21:30:07

标签: php wordpress

这似乎是微不足道的,但我无法找到解决方案。

我有帖子的自定义过滤器。并非每个用户都可以编辑每个帖子。它取决于自定义元标记。 (这不是那么重要)

重要的是,如果他们使用像“

”这样的URL
  

/edit.php?post=467

他们可以找到我没有允许他们发布的帖子。

我正在寻找的是,是否有可能像

那样获取URL
  

admin_init

所以我可以做类似

的事情
if (!isset($_GET['post'])){ //redirect }

if ($_GET['post'] == $forbidenID) { //redirect }

谢谢你们。 : - )

1 个答案:

答案 0 :(得分:1)

编辑:我刚刚意识到你在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();
  }