为什么我的css和js直到页脚才入队?

时间:2014-10-16 作者:Doug Cassidy

add_action( \'wp_enqueue_scripts\', 
function ( ) {
    global $post,$pageparent;
    if(in_array($pageparent, array($post->ID,$post->post_parent))){
        wp_enqueue_style( \'products_pages\', urlto.\'products_pages.css\' );
        wp_enqueue_script(\'tooltipster\',    urlto.\'js/jquery.tooltipster.min.js\',   array( \'jquery\' ));
    }
} 
, 1, 0 );
我试着把这个挂到许多不同的钩子上,比如wp等。我不知道挂在哪里,所以A。设置了$post,2。样式和脚本包含在标题中。这样,它们就包含在页脚中。

它可以在页脚中工作,至少css可以,我还没有尝试过这个脚本。但是,最好的做法和所有。

3 个回复
SO网友:Pieter Goosen

似乎您需要在单个帖子中添加样式和脚本。实现这一点的最佳方法是使用条件标记is_single() 这样,您就可以针对特定的单个帖子或所有单个帖子。

样式应始终加载到标题中。<link> 标签位于<head></head> 标记是无效的HTML。你应该检查一下this recent post 关于这个问题。

另一方面,脚本可以加载到页眉的页脚中,尽管许多人同意应该将其加载到页脚中。

我也会替换你的$priority 属于1 具有PHP_INT_MAX 在加载所有其他样式和脚本后加载自定义样式和脚本。这将避免自定义脚本和样式被其他脚本和样式覆盖

就一个音符,我不知道是什么urlto 在你的代码中意味着,但我应该接受你知道这应该是get_template_directory_uri()get_stylesheet_directory_uri() 根据父主题或子主题,我也接受您为了这个问题而对其进行了更改以使代码更简单

以下是您的代码应该是什么样子的:

add_action( \'wp_enqueue_scripts\', 
function ( ) {
    if( is_single() ){
        wp_enqueue_style( \'products_pages\', urlto.\'/products_pages.css\' );
        wp_enqueue_script(\'tooltipster\',    urlto.\'/js/jquery.tooltipster.min.js\',   array( \'jquery\' ));
    }
} 
, PHP_INT_MAX, 0 );
参考文献:

EDIT

从对这个答案的评论来看,你的方法似乎有效。我有一个问题,尽管我想通过$post 变量如果您特别需要只针对单视图页面,那么您将遇到一些问题。

你必须记住,在任何一页上,$post 将保留循环中最后一个帖子的值。这意味着,例如,如果您需要针对的特定帖子是主页上的最后一篇帖子,那么所有更改也会影响主页,而不仅仅是该帖子的单页视图。

这就是为什么你应该利用is_single() 针对单个帖子,而不是$post 全球的

SO网友:Otto

我不知道该挂在哪里,所以A。设置了$后,2。样式和脚本包含在标题中。

这两件事是相互排斥的。在主循环开始之前,不会设置全局$post,而主循环是在标题已经输出之后。

编辑评论澄清:

同样,实际global $post 直到循环开始才设置。因此,如果需要该变量的实际内容,则必须等到那时。

但功能如下is_single() 仅检查当前查询是否针对单个帖子。这并不取决于帖子的实际内容。

名为“条件标记”的函数并没有查看循环中的实际$post,而是查看查询。现在,查询已经运行到此点,所以数据在内存中,只是不在全局$post中。因此,如果您想检查这是否是名为“示例”的帖子的单个帖子,那么是的,is_single(\'Example\') 在代码的这一早期阶段将很好地工作。

这个global $post 尚未设置。但是数据确实存在于$wp\\u主查询中,是的,在加载主题模板时,可以通过各种方式读取和访问数据。是的,你可以根据一些条件,比如在上面装东西。

但它不是全局$post,也没有经过循环,因此它还没有经过各种各样的WP过滤器功能。因此,如果你做一些类似于前瞻文章内容的事情,那么你得到的将是来自数据库的直接数据,而不是WordPress生成的经过过滤的漂亮数据。不会处理短代码。插件不会过滤帖子并添加它们的魔力。嵌入的视频尚未嵌入。诸如此类的事情。

SO网友:maioman

的参数之一enqueue_script 函数是$in_footer

查看函数用法参数:

wp_enqueue_script( $handle, $src, $deps, $ver, $in_footer )
因此,要将脚本(或css)添加到页眉而不是页脚,您应该尝试以下操作:

wp_enqueue_script(\'tooltipster\', urlto.\'/jsjquery.tooltipster.min.js\',   array( \'jquery\' ),\'\',false);
通常,脚本最好在底部加载,而css通常位于顶部,请考虑如果脚本依赖于jquery,则最好将$in\\u footer值设置为true,

结束

相关推荐

Custom Post Row Actions

我偶然发现this question 在写这个问题的时候。我有一个问题是关于这个问题的。我发现你用的是get_delete_post_link 筛选为我的操作创建一个新的url(或一个类似的函数——在任何情况下,我都会将该函数与布尔值一起使用)。唯一的问题是,I don\'t know how to capture the event now. 考虑到我在谷歌上找不到很多关于行后操作的例子,我将不胜感激-/public function _wp_filter_get_delete_post_link( $