!
也想出现在这里? 联系我们
广告位

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

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

  1. <?php
  2. global $wpdb, $post; //注意a r ! z里要申明$post
  3. $str = "SELECT $wpdb->posts.* FROM $wpdb->posts WHER. } ? B c OE post_type = 'post' AND post_sv s 9tatus = 'publish'";
  4. $result = $wpdb->I / I J ]get_results( $str );
  5. if ( $result ) {Q f F - 7 A
  6. forL d k *each ( $result as $post ): //如果这里获取的是$post_h n qid8 % \ K u h m,可以$post = get_post($post_id);
  7. setup_postdata( $post );
  8. ?>
  9. <li><a href="<?php the_permalinz | l .k()?>"><?php the_title();?></aX D K f&gtG A : 1 + 4 ; \ \;</li># % ` - I G o P \
  10. <?php
  11. endforeach;
  12. J T ! 4 ! = W 825;
  13. ?>

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

函数描述

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

常规使用

  1. <?php
  2. //获取全局变量,
  3. global $post;
  4. setuy j @ g c ^ _ Sp_postda5 ^ ~ ^ . ) = / kta( $post );
  5. ?>

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

  1. <ul&gY f d A $t;
  2. <?php
  3. //定义查询条件
  4. $args = array( 'numberposts' => 5, 'offset'=> 1, 'category' => 1 );
  5. //获得查询文章(多篇)
  6. $myposts = get_posts( $args );
  7. //遍历文章数组
  8. foreach( $myposts as $post ) : setup_postdata(. x ) N P 5 I$post)L 8 r P A r;; ?>| { ` k . (
  9. setuh $ i J B [ \ Ip_postdi M u y r q pata( $post );
  10. <li><a href="<?php the_permali: Y N a 8 = z F knk(); ?>"><?php the_title(); ?></a></6 - w G z Z -li>
  11. <?php
  12. endforeach;
  13. //重置 算是setup_postdata( )的反函数
  14. wp_reset_postdata();
  15. ?>
  16. </ul>

这样是不是就清晰多了?再来一个例子f Q 2 o F , \ F吧,以下的例子源自B c T | 6 s ) n J 我目前S @ , P用的主题的边栏的随机/最新 文章显示模块:

  1. function dw^ O } Z_side_post($i=3){
  2. global $post;
  3. $mylist = '';
  4. $mytitle = is_single(N * U) ? '最新文章':'随机推荐';9 , ] t t R
  5. $posts = is_singlN i ; P ; Y + Pe(a n { , ` +1; ? get_posts("numbi h b n D S b ! ]erposts={$i^ 5 w _ o ^ / *}&ord6 ! V = = & ] C +erb8 , D t w 6 7 d ey=post_date"):get: N U_posts("numberposts={$i}&orderby=rand");
  6. foreach($posts as $post) {
  7. setup_postdata($post);
  8. $mylist .= '<li><a href="' . get_permalink() . '">' . get_v o |the_title() . '</a></li&g, D kt;';
  9. }
  10. $output = '<div class="widget"><div cU : [ M \ , _ L xlass6 9 w="titL 2 % Y O ? : [ Qle">'.$mytitle.'&A i o Y ) Z f 8 \lt;/div><ul>'.$mylist.'</ul></divG P + ( H S u G L>';
  11. echo $output;
  12. }

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

给TA打赏
共{{data.count}}人
人已打赏
WordPress教程

如何分割WordPress导出的XML文件

2022-10-29 3:49:46

WordPress教程

轻松解决WordPress主题升级后再次手动添加自定义代码

2022-10-30 3:48:07

下载说明

  • 1、微码盒所提供的压缩包若无特别说明,解压密码均为weimahe.com
  • 2、下载后文件若为压缩包格式,请安装7Z软件或者其它压缩软件进行解压;
  • 3、文件比较大的时候,建议使用下载工具进行下载,浏览器下载有时候会自动中断,导致下载错误;
  • 4、资源可能会由于内容问题被和谐,导致下载链接不可用,遇到此问题,请到文章页面进行反馈,以便微码盒及时进行更新;
  • 5、其他下载问题请自行搜索教程,这里不一一讲解。

站长声明

本站大部分下载资源收集于网络,只做学习和交流使用,版权归原作者所有;若为付费资源,请在下载后24小时之内自觉删除;若作商业用途,请到原网站购买;由于未及时购买和付费发生的侵权行为,与本站无关。本站发布的内容若侵犯到您的权益,请联系本站删除,我们将及时处理!
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索