wordpress文章置顶不改变文章排序实现方法

文章置顶不排序

query_posts方法的代码如下:

 代码如下 复制代码

<?php
$display_categories = get_option(‘swt_cat_exclude’);
$limit = get_option(‘posts_per_page’);
$paged = (get_query_var(‘paged’)) ? get_query_var(‘paged’) : 1;
$sticky = get_option(‘sticky_posts’);
$args = array(
‘cat’ =–> $display_categories,
‘showposts’ => $limit=11,
//忽略sticky_posts,即不置顶(不将置顶文章提至最前),但是输出置顶文章
‘ignore_sticky_posts’ => 1,
//排除置顶文章,不输出置顶文章。这一句和上一句只留一句即可,根据自己需要处理
‘post__not_in’ => $sticky,
‘paged’ => $paged
);
query_posts($args);
if (have_posts()) :
while (have_posts()) : the_post();
/* 此处自行添加输出内容,如标题、日期、作者、摘要等 */
endwhile;
endif;
?>

这段代码是在网上找到的一段处理与过滤置顶文章的办法,但是会导致之前说的搜索、标签、分类页面只显示首页内容的问题。为了解决这个问题,向数组内加入了s、tag等查询条件,虽然能够正常的查询到标签页与搜索页的内容,但是又会导致分类页出现问题。因此只能另寻他法。

仔细的查阅wordpress的方法说明,发现query_posts方法可以通过全局变量$query_string来设置查询过滤,并且不影响其他的查询结果。代码如下:

 代码如下 复制代码

global $query_string;

query_posts( $query_string . ‘&ignore_sticky_posts=1′ );

设置显示/不显示置顶文章

在默认主题下,如果将某篇文章设置成置顶后,会将该文章提至首页文章列表最前显示,此时,可以添加一个置顶图标或者一个字眼“[置顶]”作为区别。很简单,只需在文章标题的代码附近加上一句代码即可,用函数is_sticky()判断是否为置顶文章,如果是的话就加入相应的图标或者文字。代码如下:

 代码如下 复制代码

<?php if(is_sticky()) {echo '<img src="'.get_bloginfo('template_directory').'/images/top.gif" alt="置顶文章" title="置顶文章" />';}  ?>

如果要求不高的话,这样也就可以了,已经达到了目的。但是如果你的要求较高,想将置顶文章和普通文章分离开来,想让置顶文章和普通文章有明显区别,如置顶文章只显示标题,而普通文章还要显示更多的内容,可以用下面的办法来实现。

首先,将原来的显示所有文章的代码稍作调整,让其不将置顶文章提至最前,但仍然出现在文章列表中。将以下代码替换到原输出所有文章代码的位置,一般在<?php if (have_posts()) :  while (have_posts()) : the_post(); ?>前。注意,以下代码和原代码有部分重叠,请将不同的关键代码加入相应的位置即可,主要是有注释的那两行。代码如下:

 代码如下 复制代码

<?php
  $display_categories = get_option('swt_cat_exclude');
  $limit = get_option('posts_per_page');
  $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
  $sticky = get_option('sticky_posts');
  $args = array(
    'cat' =--> $display_categories,
    'showposts' => $limit=11,
    //忽略sticky_posts,即不置顶(不将置顶文章提至最前),但是输出置顶文章
    'ignore_sticky_posts' => 1,
    //排除置顶文章,不输出置顶文章。这一句和上一句只留一句即可,根据自己需要处理
    'post__not_in' => $sticky,
    'paged' => $paged
  );
  query_posts($args);
  if (have_posts()) :
  while (have_posts()) : the_post();
  /* 此处自行添加输出内容,如标题、日期、作者、摘要等 */
  endwhile;
  endif;
?>

然后,在适当位置添加只显示置顶文章的代码,一般的话,放在靠前的位置,这样才能体现出置顶的效果嘛,也就是放在显示所有文章列表代码之前。代码如下:

 代码如下 复制代码

<?php
  //获取所有置顶文章
  $sticky = get_option('sticky_posts');
  //对这些文章排序, 日期最新的在最上
  rsort($sticky);
  //获取5篇文章
  $sticky = array_slice($sticky, 0, 5);
  //输出这些文章
  query_posts(array('post__in' =--> $sticky, 'ignore_sticky_posts' => 1));
  if (have_posts()) :
  while (have_posts()) : the_post();
  /* 此处自行添加输出内容,如标题等 */
  endwhile;
  endif;
  //此句十分重要,如果不加,可能会造成一些错误,如失去分页翻页效果等
  wp_reset_query();
?>

这样的话,基本上已经实现了显示和不显示置顶文章的功能

时间: 2024-09-28 16:53:04

wordpress文章置顶不改变文章排序实现方法的相关文章

利用mysql排序实现文章置顶

今天在做一个2次开发的时候,出现一个需求, 需要在商品分类页里面带一个参数,也就是商品ID, 如果分类链接里面有这个ID的时候就需要把这个商品排在分类商品列表的第1个, 原来的思路是,选择分类后,在PHP里面修改,把那个商品修改到第一个来,想想也挺麻烦的, 最后想想还有没有其它办法呢,出去走走后,就想,如果mysql帮我们排了的话,多方便呀. 那么mysql 排序在怎么用呢,ORDER BY + 字段 + 排序方式,这个不管怎么排也实现不了呀, 在一想能不能像where一样用呢,管他的,试试  

wordpress只在某个分类菜单下置顶指定的文章

很多时候,我们的wordpress站点,可能需要将某篇文章进行置顶,如果是全局的话,直接在文章页面里编辑之后进行置顶操作就行了,但如果想只在一个分类菜单下进行置顶操作的话,目前就需要借助插件或者修改代码来实现了.比如部落网站中有一篇文章,在网站SEO这个菜单下,想让这篇文章置顶显示,就是这样一个意思了. 如果您需要用插件的话,直接安装WP-Sticky即可实现这个功能. WordPress网站分类列表不显示置顶文章,内容丰富栏目较多的网站会对推荐的文章进行置顶显示,以便访客打开该分类时第一时间能

php实现文章置顶功能的方法_php技巧

本文实例讲述了php实现文章置顶功能的方法.分享给大家供大家参考,具体如下: 昨天客户让做文章置顶的功能.自己以前没做过.靠着同事的指点才做了出来.本来挺简单的事情,被自己搞了好久.自己真的缺乏对程序的理解.还是写篇博客记录一下吧. 第一步,在文章表里面建两个字段,用于做置顶功能.一个是top字段,timestamp类型,默认选"定义",用于存储置顶操作的时间;还有一个flag字段,int类型,用于判断是否置顶,置顶为1,否则为0.. 第二步,模板页面修改.列表选项里面加置顶列,下面对

百度空间如何设置文章置顶

  百度空间设置文章置顶方法: 第一步:添加自定义模块. 登录后在设置--高级设置--内容模块,选择添加自定义模块,确定后,点击"保存修改". 第二步:修改自定义模块名称,并添加想要置顶的文章. 添加自定义模块后,点击自定义模块上"编辑". A:模块名称--点击"编辑"后可修改成你想要的名字.如:我的精彩推荐等等. B:链接名称--可填写你想推荐的文章标题.如:我的五一流水账. 链接地址--可填写你推荐的文章的地址. 描述--可填写你的推荐理由或

WordPress给置顶文章添加更新时间

一般置顶的都不会是最新的文章,所以开始动手研究,显示对post的属性做了研究,发现如下代码可是显示最后更新时间:    代码如下 复制代码 <?php $id=//这里是文章的ID $post_modified = get_post($id)->post_modified; echo $post_modified;//输出当前id文章的最新修改时间 ?> 可以通过get_post($id)->获取的信息有: post_author:(整数)文章作者的编号 post_data:(字符

WordPress让指定的分类与指定文章置顶

但现实中其实是,我们常常把首页弄成CMS模式,让最新的文章被用户看到,而到了分类页时,为了突出某些文章的重要性,又把它置顶. 为了解决分类标签页不能置顶的问题,我特意找了一下,露兜在一篇文章中总结出了这个解决方案.但这个方案存在一个问题,它让所有的归档页都能实现把置顶文章放在最前面,问题就来了,例如按时间归档的页面,读者当然想知道这个月份的文章发文顺序,如果置顶,那就不伦不类了. 还有一个问题,能不能做到有些分类可以置顶,有些分类不置顶,可以自己控制呢?答案是肯定的,下面的代码可以解决这个问题.

wordpress函数get_option(‘sticky_posts’)与置顶文章例子

这里部落先说一下,wordpress获取置顶文章列表的方法,其产只要一小段代码就能搞定,内容如下: 补充说明一下,部落之前的主题,就是使用的下面的代码: <?php         $sticky = get_option('sticky_posts');         rsort( $sticky );         $sticky = array_slice( $sticky, 0, 1);         query_posts( array( 'post__in' => $stic

如何让wordpress自定义文章类型支持置顶功能

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 最近开发一个wordpress淘宝客主题,应客户要求,需要做一个店铺推广.这个店铺推广需要上首页,也就是说只有提供了赞助的的店长的链接才可以在首页展示.为了达到这个目的,笔者提供的解决方案是采用置顶功能.店铺采用wordpress自定义文章类型.然而问题来了,wordpress自定义文章类型默认并不支持置顶功能.为此我们可以通过一个插件来实现

wordpress 文章首页置顶实现例子

文章首页置顶实现例子-wordpress文章置顶"> wordpress置顶的数据保存在options表的option_name等于sticky_posts,option_value的字段中.数据经过了序号化之后保存的,即使用php函数serialize 在wordpress里调取方法 $sticky = get_option('sticky_posts'); 目前的首页置顶的代码目前我的首页置顶代码如下,我感觉很多模板都会有这个问题  代码如下 复制代码 $sticky = get_op