Wordpress报纸子主题加载CSS两次

时间:2017-09-21 21:34:15

标签: php css wordpress child-theming

我正在使用Wordpress与报纸主题(作为儿童主题)。我注意到我的子主题中的自定义CSS被加载了两次。

我检查了function.php,我想知道第二个函数是否是我问题的根源?

if ( !function_exists( 'chld_thm_cfg_parent_css' ) ):
    function chld_thm_cfg_parent_css() {
        wp_enqueue_style( 'chld_thm_cfg_parent', trailingslashit( get_template_directory_uri() ) . 'style.css', array(  ) );
    }
endif;
add_action( 'wp_enqueue_scripts', 'chld_thm_cfg_parent_css', 1001 );

if ( !function_exists( 'child_theme_configurator_css' ) ):
    function child_theme_configurator_css() {
        wp_enqueue_style( 'chld_thm_cfg_child', trailingslashit( get_stylesheet_directory_uri() ) . 'style.css', array( 'chld_thm_cfg_parent','td-theme','td-theme-demo-style' ) );
    }
endif;
add_action( 'wp_enqueue_scripts', 'child_theme_configurator_css' );  

感谢您的帮助。

编辑1:我通过站点代码检查器找到了这两行代码。你觉得这可能是吗?

<link rel='stylesheet' id='td-theme-css'  href='.../wp-content/themes/Newspaper-lesser-old-child/style.css?ver=8.1.1504096948' type='text/css' media='all' />
<link rel='stylesheet' id='chld_thm_cfg_child-css'  href='.../wp-content/themes/Newspaper-lesser-old-child/style.css?ver=8.1.1504096948' type='text/css' media='all' />

1 个答案:

答案 0 :(得分:1)

我们可以看到样式表包含两次不同的ID ...:

<link rel='stylesheet' id='td-theme-css'  
      href='.../wp-content/themes/Newspaper-lesser-old-child/style.css?ver=8.1.1504096948' type='text/css' media='all' />
<link rel='stylesheet' id='chld_thm_cfg_child-css'  
      href='.../wp-content/themes/Newspaper-lesser-old-child/style.css?ver=8.1.1504096948' type='text/css' media='all' />

...所以我们可以使用ID td-themechld_thm_cfg_child来找到问题。

您需要在父主题和子主题中查看functions.php中wp_enqueue_scripts操作中调用的函数。

您已经找到了样式表在您的子主题中排队的位置,并且可以从ID中看到它是由您的子函数中的以下代码加载的.php:

if ( !function_exists( 'child_theme_configurator_css' ) ):
    function child_theme_configurator_css() {
        wp_enqueue_style( 'chld_thm_cfg_child', trailingslashit( get_stylesheet_directory_uri() ) . 'style.css', array( 'chld_thm_cfg_parent','td-theme','td-theme-demo-style' ) );
    }
endif;
add_action( 'wp_enqueue_scripts', 'child_theme_configurator_css' );  

所以现在我们需要追踪另一个实例。这就是困难所在 因为你没有包含来自父母的入队代码。

潜在原因&amp;解决方案:

  1. 父主题正在使用get_stylesheet_directory_uri
  2. 据我所知,id td-theme来自报纸主题。这表明它使用get_stylesheet_directory_uri代替get_template_directory_uri()来加载样式表。

    get_stylesheet_directory_uri从活动主题的文件夹中加载样式表,因此如果该主题的子项处于活动状态,则它将加载子样式表而不是自己的样式表。

    如果已经由父主题加载它,则不需要在子主题中再次加载它,因此删除在子函数中再次加载子样式表的代码.php

    此问题还有其他潜在原因,但它们似乎不适用于此处。但是,我会将它们包括在内,以防您的问题没有所有的排队功能,以及其他可能遇到类似问题的人。

    1. 如果您的子主题包含它而不是父主题
    2. 子主题可能错误地尝试加载父样式表以及子样式表。在那种情况下,我希望在你孩子的function.php中看到类似的东西:

      wp_enqueue_style( 'td-theme', get_stylesheet_directory_uri() . '/style.css',  
                        array(), $version);
      wp_enqueue_style( 'chld_thm_cfg_child', get_stylesheet_directory_uri() . '/style.css',  
                        array(), $version);
      

      在您的情况下,这似乎不是问题,因为您使用不同的id(“chld_thm_cfg_parent”)来加载父样式表。

      如果此 ,要修复它,您应该使用get_template_directory_uri作为父样式表,get_stylesheet_directory_uri作为子项,例如:

      /* load parent stylesheet from parent theme folder with get_template_directory_uri */
      wp_enqueue_style( "td-theme", get_template_directory_uri() . '/style.css' , 
                        array(), $version);
      
      /* load child stylesheet from child theme folder withget_stylesheet_directory_uri
         Note: we include the parent's id in the dependencies array so it gets loaded first */ 
      wp_enqueue_style( "chld_thm_cfg_child", get_stylesheet_directory_uri() . '/style.css', 
                        array("parent-id"), $version);
      

      (请注意,这可能会导致父主题被包含两次,具体取决于它包含在父主题中的方式 - 但是再次看不到实际的代码,很难确切地知道。)