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

问题描述 投票:0回答:1

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

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

重要的是,如果他们使用类似`的URL

/edit.PHP?post=467

他们可以到达我“不允许他们”的帖子。

我正在寻找的是,是否有可能获得像钩子一样的URL

admin_init

所以我可以做点什么

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

要么

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

多谢你们。 :-)

php wordpress
1个回答
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();
  }
© www.soinside.com 2019 - 2024. All rights reserved.