wp_enqueue_script 在文件路径中包含插件目录太早

wp_enqueue_script includes plugin directory too soon in 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' returns 如下:

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

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

但是上面的代码 returns this 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,它仍然会设置一个版本号。

是的,这是有道理的。

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' );
}