向主页添加额外代码的查询帖子(_P)

时间:2015-05-28 作者:KVDD

我做了一个自定义的帖子类型“brands”。我有一个自定义模板,可在此页面上显示这些品牌:http://www.southernms.com/new/brands/

我还希望这些品牌添加到主页。因此,我使用一个小部件在主页上显示它们:http://www.southernms.com/new/

我的问题是。在“品牌”页面上,您可以看到徽标,其他什么都看不到。However 在主页上,它显示的标志是肯定的,但在页面底部,它还显示了所有品牌的名称,就像它们是帖子一样。我在自定义模板中使用与小部件中相同的代码来显示品牌徽标。所以我不知道为什么其中一个添加了我不想要的额外代码,而另一个没有。

有什么建议吗?

这是我的代码:

<?php
global $theme;
query_posts(array(
\'post_type\' => \'brands\',
\'order\' => \'ASC\',
\'posts_per_page\' => 99
));
?>

<ul class="brands">
 <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
  <li> 
    <a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( \'Permalink to %s\', \'themater\' ), the_title_attribute( \'echo=0\' ) ); ?>" rel="bookmark"><?php the_post_thumbnail( array(125,125) ); ?></a>
  </li>
  <?php endwhile; ?>
</ul>

<?php endif; ?>

2 个回复
SO网友:s_ha_dum

如前所述,不要使用query_posts(). 甚至WordPress文档也指出:

注:This function isn\'t meant to be used by plugins or themes. 如后文所述,有更好、性能更好的选项来更改主查询。query\\u posts()是一种过于简单且有问题的方法,通过将页面的主查询替换为新的查询实例来修改它。它效率低下(重新运行SQL查询),并且在某些情况下会彻底失败(尤其是在处理POST分页时)。任何现代的WP代码都应该使用更可靠的方法,比如使用pre\\u get\\u posts钩子。

https://codex.wordpress.org/Function_Reference/query_posts

该函数的问题很多,包括对主查询的破坏,这可能会导致插件和主题代码出现意外问题,使用该函数会增加对数据库的查询数量,从而对页面加载时间产生负面影响。我怀疑您对主查询的破坏是您的问题的原因。

如果这是页面的主要查询,则需要:

function pregp_wpse_189739($qry) {
  if (is_main_query()) {
    $qry->set(\'post_type\',\'brands\');
    $qry->set(\'posts_per_page\',99);
    $qry->set(\'order\',\'ASC\');
  }
}
add_action(\'pre_get_posts\',\'pregp_wpse_189739\');
如果不是主查询,则:

$args = array(
  \'post_type\' => \'brands\',
  \'order\' => \'ASC\',
  \'posts_per_page\' => 99
);
$my_query = new WP_Query($args);
if ($my_query->have_posts()) {
  while ($my_query->have_posts()) {
    $my_query->the_post();
    // you Loop code
  }
}
wp_reset_postdata(); 
我发现get_posts() 这有点麻烦和尴尬,因为您必须自己编写一些循环,但它应该可以工作,尽管并非所有的循环挂钩都会启动。

SO网友:KVDD

这就是我把它改成的,它似乎在主页上工作,没有额外添加代码。

<ul class="brands">
  <?php
  global $post;
  $posts = get_posts( array( \'numberposts\' => 99, \'post_type\' => \'brands\', \'order\' => \'ASC\' ) );
  if( $posts ):
     foreach( $posts as $post ) :   
        setup_postdata($post); ?>

       <li>
          <a href="<?php the_permalink(); ?>"><?php the_post_thumbnail( array(125,125) ); ?></a>
       </li>

     <?php endforeach; 
     wp_reset_postdata(); 
   endif; ?>
</ul>

结束

相关推荐