如何在多个函数之间共享WP_QUERY?

时间:2021-03-15 作者:Enthusiast

我有两个函数使用相同的$args 对于WP_Query 班如何才能做到这样,我只需定义一次WP\\U查询类,并共享所有返回,即我应该能够在两个函数中循环查询,而无需在每个函数中定义查询。

示例:

function first_function(){
  $args = array(\'post_type\' => \'accomodation\', \'posts_per_page\' => 4, \'meta_query\' => array(\'key\' => \'accomodation_type\', \'value\' => get_query_var(\'accomodation_type\')));
  $query = new WP_Query($args);

  while ($query->have_posts()){
   $query->the_post();

   echo \'<h1>\' get_the_title() \'</h1>\';
  }
}
add_action(\'load_first_function\', \'first_function\');

function second_function(){
  $args = array(\'post_type\' => \'accomodation\', \'posts_per_page\' => 4, \'meta_query\' => array(\'key\' => \'accomodation_type\', \'value\' => get_query_var(\'accomodation_type\'));
  $query = new WP_Query($args);

  while ($query->have_posts()){
   $query->the_post();

   echo \'<h1>\' get_the_title() \'</h1>\';
  }
}
add_action(\'load_second_function\', \'second_function\');

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

如果要减少代码重复,请将代码提取到其自身的函数中,例如:

function get_xyz_query_args( ) : array {
    return array(\'post_type\' => \'accomodation\', \'posts_per_page\' => 4, \'meta_query\' => array(\'key\' => \'accomodation_type\', \'value\' => get_query_var(\'accomodation_type\')));
}
....

$args = get_xyz_query_args();
$q = new WP_Query( $args );
然而,通过回收WP_Query 对象,以及如果操作正确可能造成的损失。引入的复杂性意味着新的bug。

由于WP存储帖子,所以它会获取并发布meta-inWP_Cache, 第二个WP_Query 只需要获取帖子ID。最重要的是,任何缓存插件或对象缓存都可以完全消除数据库查询。

因此,如果绩效是你的目标,这是不值得做的,有更好的方法。

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post