wp_enqueue_script在filepath中过早包含插件目录

时间:2016-11-03 17:27:32

标签: css wordpress path content-management-system filepath

public function setup(){
    //...
    add_action( 'wp_enqueue_scripts', array( $this, 'register_plugin_styles' ) );
}

function register_plugin_styles(){
    wp_register_style( 'dontwaste', JSC_DONT_WASTE . '/styles/dontwaste_styles.css' );
    wp_enqueue_style( 'dontwaste', false, null, null );
}

JSC_DONT_WASTE是插件目录的路径,因此JSC_DONT_WASTE。 ' /styles/dontwaste_styles.css'返回以下内容:

/Applications/AMPPS/www/wpplugin/wp-content/plugins/dontwaste/styles/dontwaste_styles.css

这正是我到达css文件所需的路径。

但上面的代码会返回此NOT FOUND错误:

http://127.0.0.1/wpplugin/Applications/AMPPS/www/wpplugin/wp-content/plugins/dontwaste/styles/dontwaste_styles.css?ver=4.6.1 404 (Not Found)

您在开始时会注意到localhost之后的/ wpplugin /(插件文件夹的名称)。我如何摆脱这种情况并开始工作?

还有版本号,即使我已设置为NULL,它仍会设置版本号。

1 个答案:

答案 0 :(得分:1)

是的,这是有道理的。

Javascript和CSS 资产是使用服务器目录中的URI(或URL)而不是路径加载的。因为他们在前端加载了。所以它会像yoursite.com/wp-content/plugins/your-plugin/js/your-asset.js

所以你不能使用:

plugin_dir_path( __FILE__ )

您必须使用:

plugin_dir_url( __FILE__ )

第一个是插件文件(服务器端)中加载的文件。像require_once一样。第二个是用于在用户端加载的资产。

因此,您可以执行以下操作:

// For the files called in your php : 
if ( ! defined( 'PLUGIN_DIR' ) ) {
    define( 'PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
}
// For the assets files loaded on the client side :
if ( ! defined( 'PLUGIN_ASSETS_URL' ) ) {
    define( 'PLUGIN_ASSETS_URL', plugin_dir_url( __FILE__ ).'/assets' );
}