原文地址:Wordpress Hack / Tutorial: creating a “dynamic sticky”

WordPress 常用技巧40+则,诚邀您的参与翻译

翻译者:hitigon 水平有限,如有错漏,欢迎纠正!

转载请注明原文及译文地址,尊重作者劳动,谢谢合作!

我们的博客,MaxPower,需要某些文章比其他文章保持在最上面更长的时间。我们发现我们撰写的稿件像慢慢陷入沼泽,不能同其他的稿件区分开来。例如,在这个博客上我们会写关于所有东西的内容,但重点放在我们的旅行经验。问题来了,我们如何才能在首页重点显示这些经验,但并不会忽略所有其他的稿件?这是我们想出的:

wordpress help forums关于多重循环的各种讨论中让我想到一个使用两次循环的方法。一个用来查询并仅显示某个分类中的文章。另一个用来和擦寻在所有分类中的所有的文章。第一个查询是从the codex中复制来的,很容易理解:

$my_query = new WP_Query('category_name=frontpage&showposts=1');
while ($my_query->have_posts()) : $my_query->the_post();
$do_not_duplicate = $post->ID;

上述代码的意思是,变量my_query赋值为查询分类名为frontpage的所有文章的结果,并仅得到一篇文章。关键点在最后部分,给变量do_not_duplicate赋值为返回的单独文章的ID值。我们在下一步需要这个值。

下面一段代码是很重要很标准的,可以在许多主题中找到。它能获取所有日志:

if (have_posts()) : while (have_posts()) : the_post();
//do stuff like format each post
endwhile;

这段代码获取所有的日志,并根据//do stuff这行(依赖于模板)的格式显示。如果仅仅这样编写代码,就会发生你所选的文章(置顶文章)被显示两次的情况(一次在置顶区域,另一次则是在所有其他文章区域)。显示这样并不好,所以这里要使用到do_not_duplicate函数了。添加到一个if语句中阻止制定文章显示两次。下面是代码:

if (have_posts()) : while (have_posts()) : the_post();
if( $post->ID == $do_not_duplicate )
continue;
//do stuff like format each post
endwhile;

代码中的第二个if语句的意思是,获取所有日志,且当发现一篇文章的ID值与do_not_duplicate的值相等时中断执行(continue语句),否则显示根据//do stuff这行的格式显示所有其他的文章。记住,do_not_duplicate函数值所代表的文章已经被显示过了。

就这样当你把所有内容放到一起得到了什么?一个动态的置顶文章!且最棒的部分是当置顶文章被新的一篇代替,之前的文章会在下面所有文章的区域显示出来(取决于你选择了多少文章显示以及文章的发表频率)。

本文地址:【WP常用技巧翻译】创建动态的置顶文章

TAG标签:, , ,

9 条留言我要留言 »

  •   1 - Joe  |  2008-08-12 at 12:48 下午  

    我也是这样做的,但是每个分类只显示最新的一篇文章的话,会有一个分类不显示文章.麻烦帮我看一下我的首面,有一个分类的文章在”最新文章”里显示,所以不在分类那里显示了,如何改进??

  •   2 - hitigon  |  2008-08-12 at 9:05 下午  

    你好~也许是这样的.
    在你的首页最新文章的分类就是这个没有显示的分类.而在首页同时调取该文章的时候,$do_not_duplicate变量发挥了作用,使得该页面的这个分类的最新文章仅显示一次.我只是这样考虑的,编程能力不强,可能有不正确的地方.我不清楚这个变量的作用域是怎么样^^至于解决的方法,可以暂时把这个if语句去处。谢谢您的访问!

  •   3 - Joe  |  2008-08-13 at 10:21 上午  

    先感谢!
    我用了半年这个模板,重复了半年。上个星期才用do_not_duplicate把它限制了,才发现分类那里不显示了。我了解到是那个语句的作用,但有没有办法可以让我那个分类的下一篇文章显示出来,和“最新更新”里的不一样?

  •   4 - hitigon  |  2008-08-13 at 1:34 下午  

    我的思路是使用WP_Query()的方法next_post(),当前主题的ID值存在,只要使用这个方法获取下一片日志即可。

  •   5 - Joe  |  2008-08-19 at 11:40 下午  

    好的,最近比较忙,等过两天测试一下,有无结果再通知博主一下。谢谢!

  •   6 - 小张  |  2008-10-04 at 3:32 下午  

    我没有看懂,太菜了!不过很喜欢的,能不能详细说说啊!发到我邮箱也可以。先先谢谢。

  •   7 - hitigon  |  2008-10-04 at 5:31 下午  

    其实已经很详细了 哪点不懂呢?

  •   8 - 小张  |  2008-10-05 at 3:12 下午  

    代码不知道该怎样用(把哪个代码放在哪里?像我这种菜鸟手把手教也未必做成)才能达到“动态置顶”的目的。我只懂一点html。顺便说一下我是在蒋兄的博客中看到你这有这篇文章的。有空就回复我,没有就别浪费你的时间啦!我对博客挺感兴趣,以后还要好好学习。

    最后感谢你回复我这个陌生人!!呵呵

  •   9 - hitigon  |  2008-10-05 at 3:50 下午  

    代码的位置就在你需要显示的页面上 一般是首页模板

    呵呵 博客很少更新 但我还是很关注评论的 我要感谢你的关注 而对待技术我们都该互相学习帮助,并没有陌生人的区别

必填

必填,绝不公开

  •  

    2009年七月
    « 六    
     12345
    6789101112
    13141516171819
    20212223242526
    2728293031