使用一个查询将同一对象传递给模板中的多个小部件

时间:2016-10-01 作者:Nathan Powell

我目前正在考虑将一个查询传递到模板上的多个小部件中,而不运行多个查询。显而易见的目标是速度和效率。

我有一个小部件,它将通过模板中小部件的不同实例来交付同一对象的特定方面。小部件实例是must, 但是对象实例应该保持不变。我应该在我的小部件中查找操作和过滤器的模板运行中是否有一个最佳点?

例如,我想要object->title 要在页面顶部的小部件中显示,请选中该框,然后在该区域中显示。然后我有另一个小部件的实例object->content 在那个区域展示。

这在小部件内部非常容易,但是效率非常低,因为我只对同一个对象运行了两个查询,因为我的小部件本身是两个不同的对象。

在这种情况下,我的小部件怎么能不尝试两次相同的查询?将get_queried_object 为这两个小部件实例运行查询?

2 个回复
最合适的回答,由SO网友:cybmeta 整理而成

我建议使用Object Cache APITransients 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 ) {
       // ...
    }
}

SO网友:cjbj

最简单的方法是生成一个全局变量或transient (如果您想在多个页面上使用该对象)并让小部件访问该对象。

编程上更合理的方法需要做大量工作,如下所示:

构建一个运行查询并返回对象的小部件。通常为aWP_widget 实例将使用父对象的constructor 初始化。但是,当您扩展WP\\u小部件类时,还可以包含一个额外的构造函数。在这里,您可以向小部件实例(您的对象)传递一个附加参数the_widget 要显示其他小部件,passing the object.

相关推荐

将wp_Query替换为wp_User_Query

我在插件中制作了一些订阅者档案和单曲(个人资料页),其中我还包括了一个“用户单曲”模板,通过template_include. 不过,我正在尝试从插件中删除一些模板,以使其使用主题模板。我用了locate_template( \'single.php\' ) 从活动主题中选择单个模板。我没有使用全局wp_query 在本例中显示我的内容,但页面显示了基于查询默认值的循环(十篇帖子)。我想知道的是,我是否可以完全放弃默认查询,用wp_user_query 我可以将查询到的用户ID输入其中。然后我想筛选the