首页 > 解决方案 > 带有 plugins_url 的 require_once wordpress 错误

问题描述

我正在为 wordpress 开发一个自定义插件,以向用户显示维护模式屏幕。我遵循了指南,但在调试代码时遇到了一些麻烦。xdebug 将向我显示这些错误:

警告:require_once(): http:// wrapper 在服务器配置中被 allow_url_include=0 禁用

警告:require_once(http://localhost/wordpress/wp-content/plugins/maintenance-mode/assets/maintenance.php):无法打开流:找不到合适的包装器

致命错误:require_once(): 无法打开所需的“ http://localhost/wordpress/wp-content/plugins/maintenance-mode/assets/maintenance.php ”(include_path='.:/usr/local/php5/lib/ php')

我正在使用plugins_url加载保存maintenance.php 文件的路径,并且在我使用plugins_dir_path的错误之前,但结果相同。

有解决办法吗?

class Maintenance {

  public function init()
  {
    add_action( 'wp_loaded', array($this, 'maintenance_mode') );
    //add_action( 'admin_init', array($this, 'maintenance_settings') );
  }

  public function maintenance_mode()
  {
    global $pagenow;
    if( $pagenow !== 'wp-login.php' && !current_user_can('manage_options') && !is_admin() ){
      header( $_SERVER['SERVER_PROTOCOL'] . '503 Service Temporarily Unavailable', true, 503 );
      header( 'Content-Type: text/html; charset=utf-8' );
      require_once plugins_url('assets/maintenance.php' ,__FILE__);
    }
    die();
  }
}

标签: phpwordpress

解决方案


尝试使用plugin_dir_path( __FILE__ )

class Maintenance {

    public function init()
    {
        add_action( 'wp_loaded', array($this, 'maintenance_mode') );
        //add_action( 'admin_init', array($this, 'maintenance_settings') );
    }

    public function maintenance_mode()
    {
        global $pagenow;
        if( $pagenow !== 'wp-login.php' && !current_user_can('manage_options') && !is_admin() ){
            header( $_SERVER['SERVER_PROTOCOL'] . '503 Service Temporarily Unavailable', true, 503 );
            header( 'Content-Type: text/html; charset=utf-8' );
            require_once plugin_dir_path( __FILE__ ) . 'assets/maintenance.php';
        }
        die();
    }
}

推荐阅读