WordPress教程

WordPress 主题开发 setup_postdata 函数用法详解

阿里云

setup_postdate 函数可以设置全局$post 变量,是一个比较神奇的函数,能将对象变量声明到全局的$post 变量中,这样我们就可以像在主循环中为所欲为的使用模板标签了。使得自定义查询文章语句后也可以使用 the_permalink()、the_title()等来直接获取文章信息,具体使用方法如:

  1. <?php
  2. global $wpdb, $post; //注意这里要申明$post
  3.  
  4. $str = "SELECT $wpdb->posts.* FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish'";
  5. $result = $wpdb->get_results( $str );
  6.  
  7. if ( $result ) {
  8. foreach ( $result as $post ): //如果这里获取的是$post_id,可以$post = get_post($post_id);
  9. setup_postdata( $post );
  10. ?>
  11. <li><a href="<?php the_permalink()?>"><?php the_title();?></a></li>
  12. <?php 
  13. endforeach;
  14. }
  15. ?>
也想出现在这里?联系我们
创客主机

说这么多都只是空谈,setup_postdata 这个函数平时我们很少用到,以至于目前为止我还没找到一个中文的介绍文章。只是在其他文章中能找到只字片语,但因为确实很实用,所以就单独行文,备忘之。

函数描述

我的解释是:将我们自定义查询的文章对象声明到全局$post 变量中,以便我们使用模板标签。这里的查询变量我们需要从 get_post()或是 get_posts 查询获得,当然只要是标准的文章对象,你都可以用 setup_postdata 来声明到全局去,不仅限于这两个函数。

常规使用

  1. <?php 
  2. //获取全局变量,
  3. global $post;
  4. setup_postdata( $post ); 
  5. ?>

官方的例子太简单就这么坑爹,来一个复杂点的:

  1. <ul>
  2. <?php
  3.  
  4. //定义查询条件
  5. $args = array( 'numberposts' => 5, 'offset'=> 1, 'category' => 1 );
  6.  
  7. //获得查询文章(多篇)
  8. $myposts = get_posts( $args );
  9.  
  10. //遍历文章数组
  11. foreach( $myposts as $post ) :	setup_postdata($post); ?>
  12. 	setup_postdata( $post ); 
  13. 	<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
  14.  
  15. <?php 
  16. endforeach;
  17.  
  18. //重置 算是setup_postdata( )的反函数
  19. wp_reset_postdata(); 
  20.  
  21. ?>
  22. </ul>

这样是不是就清晰多了?再来一个例子吧,以下的例子源自 我目前用的主题的边栏的随机/最新 文章显示模块:

  1. function dw_side_post($i=3){
  2. 	global $post;
  3. 	$mylist = ''; 
  4. 	$mytitle = is_single() ? '最新文章':'随机推荐';
  5. 	$posts = is_single() ? get_posts("numberposts={$i}&orderby=post_date"):get_posts("numberposts={$i}&orderby=rand");
  6. 	foreach($posts as $post) {
  7. 		setup_postdata($post);
  8. 		$mylist .=  '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
  9. 	}
  10. 	 $output = '<div class="widget"><div class="title">'.$mytitle.'</div><ul>'.$mylist.'</ul></div>';
  11. echo $output;
  12. }

PS:使用本函数的时候,请注意不要在主循环中使用,不然会达不到你预期的效果,怎样退出循环,这个你可以在调用该函数不成功的时候去搜搜。

WordPress 主题开发 setup_postdata 函数用法详解

已有 282 人购买
查看演示升级 VIP立刻购买

收藏
(0)

发表回复

热销模板

Ashade - 作品展示摄影相册WordPress汉化主题
LensNews

本站承接 WordPress / PbootCMS / DedeCMS 等
系统建站、仿站、开发、定制等业务!