我目前正在考虑将一个查询传递到模板上的多个小部件中,而不运行多个查询。显而易见的目标是速度和效率。
我有一个小部件,它将通过模板中小部件的不同实例来交付同一对象的特定方面。小部件实例是must, 但是对象实例应该保持不变。我应该在我的小部件中查找操作和过滤器的模板运行中是否有一个最佳点?
例如,我想要object->title
要在页面顶部的小部件中显示,请选中该框,然后在该区域中显示。然后我有另一个小部件的实例object->content
在那个区域展示。
这在小部件内部非常容易,但是效率非常低,因为我只对同一个对象运行了两个查询,因为我的小部件本身是两个不同的对象。
在这种情况下,我的小部件怎么能不尝试两次相同的查询?将get_queried_object
为这两个小部件实例运行查询?
最合适的回答,由SO网友:cybmeta 整理而成
我建议使用Object Cache API 或Transients API, 只要更适合你的需要。
对象缓存的一个非常快速的示例:
// helper function
function get_my_object() {
$object = wp_cache_get( \'my_object\' );
if ( false === $object ) {
$args = array( .... );
$object = new WP_Query( $args );
wp_cache_set( \'my_object\', $object );
}
return $object;
}
class cyb_my_widget extends WP_Widget {
function __construct() {
// ...
}
function widget( $args, $instance ) {
// ...
$object = get_my_object();
}
function update( $new_instance, $old_instance ) {
// ...
}
function form( $instance ) {
// ...
}
}