专栏首页ytkahwordpress调用置顶文章sticky_posts的三种方法

wordpress调用置顶文章sticky_posts的三种方法

  有时我们在开发wordpress时需要调用置顶文章sticky_posts,怎么调用呢?几种写法,有用到query_post的,有用到WP_Query,也有用到is_sticky(),下面随ytkah一起来看看吧

第一种调用置顶文章的方法,用到query_post,代码如下

<?php
    $query_post = array(
        'posts_per_page' => 10,
        'post__in' => get_option('sticky_posts'),
        'caller_get_posts' => 1
        );
        query_posts($query_post);
?>
<?php while(have_posts()):the_post(); ?>
<div class="swiper-slide">
	<a href="<?php the_permalink(); ?>">
		<img src="<?php the_post_thumbnail_url( 'full' ); ?>" alt="<?php the_title(); ?>">
		<div class="shadow">
			<?php the_title(); ?>
		</div>
	</a>
</div>
<?php endwhile; ?>
<?php
    wp_reset_query();
?>

参数用一个数组的形式放在$query_post中,关键的参数为'post__in' =>get_option('sticky_posts')和'caller_get_posts' => 0。

'post__in' => get_option('sticky_posts')确定了该 LOOP 调用的是置顶文章列表。

'caller_get_posts'的作用是排除非指定性文章,即除了置顶文章之外,不显示其他的文章。

'posts_per_page' => 10,控制文章的数量

不添加的情况下,如果置顶文章条目不足'posts_per_page'规定的值,会用最新文章替补完整。

  如果想调用除了置顶文章外的本栏目其余所有文章怎么操作?

<?php
    $query_post = array(
        'category__in' => array(get_query_var('cat')),//如果是栏目调用,注意这行要加,否则会调用全站所有文章
        'posts_per_page' => 5,
        'post__not_in' => get_option('sticky_posts'),//排除置顶
        'caller_get_posts' => 1
        );
    query_posts($query_post);
?>
<?php while(have_posts()):the_post(); ?>
<div class="item wow zoomIn">
	<div class="img-box">
		<img src="<?php the_post_thumbnail_url( 'full' ); ?>" alt="<?php the_title(); ?>">
	</div>
	<div class="text">
		<div class="title">
			<h3>
				<?php the_title(); ?>
			</h3>			
		</div>
		<div class="description">
			<p>
				<?php the_excerpt(); ?>
			</p>
		</div>
		<div class="more">
			<a href="<?php the_permalink(); ?>">Read More</a>
		</div>
	</div>
</div>
<?php endwhile; ?>
<?php
    wp_reset_query();
?>

第二种写法用到WP_Query,和第一种方法有点类似,代码如下

<?php  
$args = array(  
'posts_per_page' => -1,  
'post__in' => get_option( 'sticky_posts' )  
);  
$sticky_posts = new WP_Query( $args );  
while ( $sticky_posts->have_posts() ) : $sticky_posts->the_post();?>  
<li>  
<a href="<?php the_permalink() ?>"><?php the_title(); ?></a>  
</li>  
<?php endwhile; wp_reset_query();?>

第三种方法,用is_sticky()判断

<?php if (have_posts()) : ?> 
<p>文章列表如下</p> 
<ul> 
    <?php while (have_posts()) : the_post();  
        if (is_sticky()): 
            global $more;    // 设置全局变量$more 
            $more = 1; 
    ?> 
    <li> 
        <h2>[置顶]<a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>" rel="bookmark"><?php the_title(); ?></a><h2/> 
        <p><?php the_content(); ?></p> 
    </li> 
    <?php else: 
            global $more;   
            $more = 0; 
    ?> 
    <li> 
        <h2><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>" rel="bookmark"><?php the_title(); ?></a><h2/> 
        <p><?php the_content('阅读更多'); ?></p> 
    </li> 
    <?php endif; ?> 
<?php    endwhile; ?> 
</ul> 
<?php else: ?> 
<h2>没有找到更多文章</h2> 
<?php endif; ?>

关于置顶文章wordpress有两个常用的函数 is_sticky():判断文章是否是置顶的,是就返回true,不是就返回false get_option('sticky_posts'): 获取置顶文章ID,返回包含各置顶文章ID的数组

  首页展示文章时,如果是置顶文章就全文输出

  方法简介:在loop循环时,通过 is_sticky()判断是否是置顶文章

  是的话就设置全局变量$more=1;然后调用 the_content();就是全文输出了

  否则不是置顶文章的话就设置全局变量 $more=0;然后调用 the_content('更多...');就是截取<--more-->标签后的输出

以上三种方法可以灵活运用,祝大伙开发愉快!

参考资料https://developer.wordpress.org/reference/classes/wp_query/

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • wordpress列表页如果文章没有缩略图就显示默认图片

      有时我们在设计wordpress模板时需要考虑是否有特色图,在分类页上如果一些文章有缩略图一些没有那就有点参差不齐不美观,有没办法设置如果没有文章缩略图则自...

    ytkah
  • wordpress搜索结果排除某个分类如何操作

      我们知道wordpress的搜索结果页search.php和分类页category.php是一样的,但是客户的网站是功能比较多的系统,有新闻又有产品,如果搜...

    ytkah
  • 织梦DEDECMS后台精简删除不需要的文件

    如果是一开始就不想要的话,安装版plus目录下进行如下操作。 删除:guestbook文件夹【留言板,后面我们安装更合适的留言本插件】; 删除:task文件夹和...

    ytkah
  • wordpress列表页如果文章没有缩略图就显示默认图片

      有时我们在设计wordpress模板时需要考虑是否有特色图,在分类页上如果一些文章有缩略图一些没有那就有点参差不齐不美观,有没办法设置如果没有文章缩略图则自...

    ytkah
  • php开发论坛系统

    以上所述是小编给大家介绍的php开发论坛系统,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对ZaLou.Cn网站的...

    砸漏
  • 部署LNMP动静分离并搭建memcache缓存服务器

    一、MemCache简介 MemCache 是一个自由、源码开放、高性能、分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载。它通过在内存中缓...

    小手冰凉
  • 搭建你的物联网 : Workerman Tcp 服务器

    想不想让家里的设备联网?想不想远程控制家里的空调?单身狗想不想一回家就吃到热腾腾的饭菜?除了购买现成的产品,你还可以这样做哦!

    Techeek
  • SAP UI5和Angular的事件处理机制比较

    Recently I am studying Angular in my spare time. And I would like to write down ...

    Jerry Wang
  • CTF从入门到提升(十二)文件包含 plus篇

    如果要实现文件包含漏洞,前提是非可执行文件,例如网站的源码都是可执行文件,拿php来说,大部分情况下都是.php文件,如果包含就没有意义了,因为直接包含相当于把...

    牛油果
  • Hacker101-CTF | Postbook

    观察urlxxx/xxx/index.php?page=home.php发现可存在包含,测试后发现没有

    Mirror王宇阳

扫码关注云+社区

领取腾讯云代金券