通过Customizer添加带有特色图像的小部件会运行数百个查询

时间:2017-04-01 作者:Vasili

我通过Customizer添加了一个小部件。这是一个简单的小部件,带有基本循环,显示5篇最新的帖子,每篇帖子都有特色图片。因为有了特色图像,这个小部件可以运行数百个查询,没有特色图像,查询的数量就会恢复正常。

只有在添加小部件并通过定制器查看站点时才会发生这种情况,前端没有这样的问题。

还使用默认的WP“Recent Posts”小部件进行测试,在“$show\\u date”if语句之后,每个帖子只添加一行。

<?php the_post_thumbnail( \'thumbnail\' ); ?>
这是一个已知的问题吗?

1 个回复
最合适的回答,由SO网友:Weston Ruter 整理而成

问题归结为this bit of code 在里面WP_Widget::display_callback():

$was_cache_addition_suspended = wp_suspend_cache_addition();
if ( $this->is_preview() && ! $was_cache_addition_suspended ) {
    wp_suspend_cache_addition( true );
}
这之前就有人打电话WP_Widget_Recent_Posts::widget() 它的目的是尽可能地让back compat避免在发布更改之前在定制器中预览的小部件污染对象缓存。对于最近发布的小部件,显示每篇文章的特色图像,暂停缓存意味着每次在定制器中访问每篇文章时,都可能需要查询和重新查询每篇文章的postmeta。

在呈现小部件时显式关闭缓存挂起的解决方法是在小部件子类的开头添加以下内容widget 方法:

if ( $this->is_preview() && wp_suspend_cache_addition() ) {
    wp_suspend_cache_addition( false );
}
这将立即撤消刚刚在调用中的缓存添加挂起WP_Widget::display_callback() 方法,并且查询数应返回到您在前端上看到的值。

相关推荐

My widgets do not save

每次我保存我的小部件并离开页面时,我的小部件都会消失。侧边栏已完全清空,不会保存任何更改。控制台或PHP日志中没有任何错误。如果我将小部件直接复制并保存在数据库中widgets_text, 它们将被显示,但我仍然无法在侧边栏中添加或删除任何内容。这只发生在我的右侧边栏上,左侧边栏工作正常,但它们都以相同的方式注册。这是我注册侧边栏的方式:function my_widgets_init() { register_sidebar( array ( \'name\'