右勾重定向前台访问者,同时尊重REST API插件先运行?

时间:2016-11-29 作者:violacase

我不需要在WP网站上设置前端。所有访问者将被重定向到我的前端应用所在的外部url。

现在,我的主题函数的根中有以下代码。php:

if ( ! is_admin() ) {
  wp_redirect( \'http://www.example.com\', 200 );
  exit;
}
不幸的是,这是在设置rest api所需的插件运行之前运行的。

我应该将此代码放在哪里才能正确执行?

警告请参见下面的答案。

我自己找到了解决方案:

add_action( \'wp_loaded\', function () {
  // check if there is a \'wp-json\' URI part
  if (! strpos($_SERVER[\'REQUEST_URI\'], \'wp-json\')) {
    // No rest api request. Now check if we are on frontend
    if ( ! is_admin() ) {
      // We are on frontend: redirect now
      wp_redirect( \'http://www.example.com\', 200 );
      exit();
    }
  }
});
如果将上述代码放入插件文件中,则可以正常工作(已测试)。

当放在主题的根目录中时,上述代码不起作用(已测试)functions.php 文件

1 个回复
SO网友:TheDeadMedic

正确的解决方案是将重定向添加到index.php 在您的主题中-这将确保只处理前端的、非基于api的请求。

嗅探wp-json 在请求中,最好是不可靠的,如果另一个插件覆盖端点(您可以这样做,it\'s pluggable).

<?php

wp_redirect( \'http://example.com/\', 301 );
exit;
。。。在里面wp-content/themes/your-theme/index.php. 并确保您的主题除了空白之外没有其他模板文件functions.php, 主题是style.css

相关推荐

Https://mydomain/wp-admin重定向至wp-login.php?redirect_to=https%3A%2F%2Fmydomain%2Fwp-admin%2F&reauth=1

无论何时我进入https://mydomain/wp-admin未登录时,我被重定向到wp-login.php?redirect_to=https%3A%2F%2Fmydomain%2Fwp-admin%2F&reauth=1 在一些帮助下,我创建了以下代码来重定向登录到wp的用户。要转发到所需自定义页面的php url:function redirect_wp_login_to_custom_login() { global $pagenow; $red