在不同的操作挂接中使用时WP_ENQUEUE_STYLE冲突

时间:2017-07-26 作者:Shaundavin13

这是my child主题函数的下半部分。php。

function register_my_scripts(){
  if (is_shop() || is_product_category()){
    wp_enqueue_style( \'shop-style\', get_stylesheet_directory_uri() . 
\'/shop.css\');
  }
  if (is_product()){
    wp_enqueue_style( \'shop-style\', get_stylesheet_directory_uri() . 
\'/product.css\');
  }
}
add_action( \'wp_enqueue_scripts\', \'register_my_scripts\' );
为什么,当我在同一个文件(上面)中有以下代码时,即使“if”块仍在运行(我用“echo‘something’进行了测试),但上面代码块(但下面是我的文件)中的样式队列也会停止工作回音响起了吗?

function register_my_menu() {
    register_nav_menu(\'left-menu\', __(\'Left Menu\'));
    register_nav_menu(\'right-menu\', __(\'Right Menu\'));
    wp_enqueue_style( \'shop-style\', get_stylesheet_directory_uri() . 
\'/shop.css\');
}
但当我在同一行中注释掉wp\\u enqueue\\u样式时,整个文件如下所示:

function register_my_menu() {
    register_nav_menu(\'left-menu\', __(\'Left Menu\'));
    register_nav_menu(\'right-menu\', __(\'Right Menu\'));
    // wp_enqueue_style( \'shop-style\', get_stylesheet_directory_uri() . 
\'/shop.css\');
}

add_action( \'init\', \'register_my_menu\');

function register_my_scripts(){
  // wp_enqueue_style( \'shop-style\', get_stylesheet_directory_uri() . 
\'/shop.css\');
  if (is_shop() || is_product_category()){
    wp_enqueue_style( \'shop-style\', get_stylesheet_directory_uri() . 
\'/shop.css\');
  }
   if (is_product()){
    wp_enqueue_style( \'shop-style\', get_stylesheet_directory_uri() . 
 \'/product.css\');
  }
 }
add_action( \'wp_enqueue_scripts\', \'register_my_scripts\' );
排队的人register_my_scripts() 再次正常运行。

这是一个我从未见过的冲突,为什么WordPress没有抛出某种错误。调试这些东西太可怕了。

有没有像JavaScript的“使用严格”这样的严格版本的WordPress?

他们从不犯任何错误,这一事实令人恶心。

2 个回复
SO网友:Milo

您只能使用句柄注册单个文件shop-style. 一旦使用该句柄将某个对象排入队列,随后调用wp_enqueue_style 将忽略具有相同句柄的。

SO网友:Tim Elsass

这个wp_enqueue_style() 方法应用于wp_enqueue_scripts 钩子,您不应该尝试在init

如果调用wp\\u enqueue\\u style()的目的init 钩子是初始化您的样式,然后您希望稍后有条件地将它们排到其他地方,然后您应该使用wp_register_style() 这样做。

对于上述代码的一些建议:

它应该用主题名作为方法名的前缀,因为它没有命名空间。

在任何可翻译字符串中包含主题名称。

将register\\u my\\u脚本重命名为enqueue,因为从技术上讲,它不是注册脚本,而是将脚本排队。

重命名商店。css以匹配您使用的句柄。这使得它在将来需要时以及在其他地方更易于参考。

我想试试这样的东西:

function sample_theme_register() {
    register_nav_menu( \'left-menu\', __( \'Left Menu\', \'sample-theme\' ) );
    register_nav_menu( \'right-menu\', __( \'Right Menu\', \'sample-theme\' ) );
    wp_register_style( \'sample-theme-shop\', get_theme_file_uri( \'sample-theme-shop.css\' );
}

add_action( \'init\', \'sample_theme_register\' );

function sample_theme_enqueue_scripts() {
    if ( is_shop() || is_product() || is_product_category() ) {
        wp_enqueue_style( \'sample-theme-shop\' );
    }
}

add_action( \'wp_enqueue_scripts\', \'sample_theme_enqueue_scripts\' );

结束