您的代码功能正常,但有几个主要缺陷:
query\\u帖子
query_posts
和
wp_reset_query
如果使用了,我建议永远不要使用此功能,因为它有重大问题,并且会助长坏习惯。
如果要修改WordPress拉入的帖子,请使用pre_get_posts
筛选,不要用第二个替换主查询并加倍已完成的工作,请修改它。如果要为站点的一小部分创建新的子查询,请使用WP_Query
和wp_reset_postdata
有时使用它很有用get_posts
, 但请记住WP_Query
在内部,要求数据库随机订购物品的成本巨大。数据库必须获取整个posts表,随机洗牌以在内存中创建一个全新的表,然后在新表上运行查询。这至少和复制整个posts表一样昂贵。
因此,永远不要要求数据库随机排序,而是使用PHP进行排序。E、 g.要求10篇帖子,然后跳过前X篇帖子,其中X是通过rand
, e、 g。$random = rand(1,10)
. 你可以抓住柱子WP_Query
通过获取$query->posts
\\u内容无需获取内容并像这样通过过滤器就可以将其放入变量中,变量是不必要的,并且会使事情变得过于复杂:
echo \'<div class="top banner">\';
the_content();
echo \'</div><!--banner-->\';
缓存
从根本上讲,这意味着您永远不能将浏览器缓存、CDN或页面缓存插件与此代码一起使用。浏览器缓存将始终显示它遇到的第一条横幅,CDN将缓存显示给访问者的第一条横幅,页面缓存也会这样做。
因此,避免随机显示内容,您希望相同的页面请求始终给出相同的结果。
这意味着您可能需要的任何“随机性”都必须在javascript中完成。因此,获取一些横幅图像,并让Javascript在浏览器中选择一个。