最近在使用WP给客户做一个企业网站,却出现从未遇到的问题。

事件是这样子的:我在function.php文件里写了一个根据分类ID获取文章的文章,因为该方法里的html元素是在多个页面共用的
但我在index.php页面调用时却出现了完全相同的信息且自定义的查询条件也失效了,但如果使用对象直接访问则没有问题,见下图

  1. function.php中的方法名
  2. /**
  3. *首页分类ID对应的信息
  4. *@param integer $cat_id [分类ID号]
  5. *@param integer $per_page [显示条数]
  6. *@return[type][description]
  7. */
  8. function cat_product($cat_id=0,$per_page=3){
  9. $args = array('posts_per_page'=> $per_page,'category'=> $cat_id );
  10. $rand_posts = get_posts( $args );
  11. foreach ( $rand_posts as $post ):
  12. setup_postdata( $post );
  13. echo $post->post_title."<br>";//通过这种方式没有问题
  14. echo get_the_title();echo "<br><br> ";//通过这种方式无法获取下一条对象数据
  15. ?>
  16. <?php endforeach;wp_reset_postdata();?>
  17. <?php }//end cat_product
  18. index.php
  19. <?php
  20. cat_product(1);
  21. //cat_product(4);
  22. ?>
    
解决方案:
1.将funciton中的方法直接写在index页面中
缺点:每次需要调用的时候都需要复制粘贴代码,但基本上产生的内容结构是相同的只不是不同的查询条件而已
  1. <?php
  2. //将funciton中的方法直接写在index页面中则没有问题
  3. $args = array('posts_per_page'=>5,'orderby'=>'rand');
  4. $rand_posts = get_posts( $args );
  5. foreach ( $rand_posts as $post ):
  6. setup_postdata( $posts );
  7. echo $posts->post_title."<br>";
  8. echo get_the_title();echo "<br><br> ";
  9. endforeach;wp_reset_postdata();
  10. ?>
2.在function文件里直接使用对象访问
缺点:无法使用the_id()等方法,且需要更改需要代码
  1. /**
  2. *首页分类ID对应的信息
  3. *@param integer $cat_id [分类ID号]
  4. *@param integer $per_page [显示条数]
  5. *@return[type][description]
  6. */
  7. function cat_product($cat_id=0,$per_page=3){
  8. $args = array('posts_per_page'=> $per_page,'category'=> $cat_id );
  9. $rand_posts = get_posts( $args );
  10. foreach ( $rand_posts as $post ):
  11. echo $post->post_title;//通过这种方式没有问题
  12. echo $post->id;
  13. ?>
  14. <?php endforeach;wp_reset_postdata();?>
  15. <?php }//end cat_product
3.在function里通过将对象声明成全局对象来解决,可以使用the_id()这种方式,目前使用该方案
  1. <?php
  2. foreach($the_query as $post):
  3. $GLOBALS['post']= $post;//将当前对象保存成全局对象
  4. setup_postdata($post);//声明成全局的 post,可以使用the_id 这种方式获取数据
  5. var_dump(get_the_ID());//这里就正常输出了。
  6. ?>
  7. <?php endforeach;wp_reset_postdata();?>
 
参考:

WordPress 在function.php 文件中方法中the_XXX方法失效的更多相关文章

  1. Matlab中调用VS编译的exe文件并传递变量 的方法

    经历::在网上找了很多方法,都没有实现在matlab中调用vs的exe文件并且能够传递变量参数,一些小细节花费了自己很多时间,比喻忽略了一些空格!  网上很多的方法都是纯粹复制别人的方法,自己都没有去 ...

  2. 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理

    服务器文档下载zip格式   刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...

  3. iOS中获取各种文件的目录路径的方法

    我们的app在手机中存放的路径是:/var/mobile/Applications/4434-4453A-B453-4ADF535345ADAF344 后面的目录4434-4453A-B453-4AD ...

  4. IIS 7 中设置文件上传大小的方法

    在IIS 6.0中设置文件上传大小的方法,就是配置如下节点: <system.web> <httpRuntime maxRequestLength="1918200&quo ...

  5. linux中快速清空文件内容的几种方法

    这篇文章主要介绍了linux中快速清空文件内容的几种方法,需要的朋友可以参考下 $ : > filename $ > filename $ echo "" > f ...

  6. IOS中获取各种文件的路径介绍及方法

    IOS中获取各种文件的目录路径的方法 技术交流新QQ群:414971585 iphone沙箱模型的有四个文件夹,分别是什么,永久数据存储一般放在什么位置,得到模拟器的路径的简单方式是什么. docum ...

  7. 文件_ _android从资源文件中读取文件流并显示的方法

    ======== 1   android从资源文件中读取文件流并显示的方法. 在android中,假如有的文本文件,比如TXT放在raw下,要直接读取出来,放到屏幕中显示,可以这样: private ...

  8. JavaScript文件中调用AngularJS内部方法或改变$scope变量

    需要在其他JavaScript文件中调用AngularJS内部方法或改变$scope变量,同时还要保持双向数据绑定: 首先获取AngularJS application: 方法一:通过controll ...

  9. global文件中的application_start方法中做: 定时器

    <%@ Application Language="C#" %> <%@ import Namespace="System.Data" %&g ...

随机推荐

  1. 使用 IntraWeb (23) - 基本控件之 TIWTimer、TIWProgressBar、TIWProgressIndicator、TIWTimeEdit

    TIWTimer //和 TTimer 没多大区别, 它的默认事件现在是异步的(OnAsyncTimer), 在网络上使用 OnTimer 肯定是非常糟糕的 TIWProgressBar //进度条 ...

  2. SSH公钥登录原理

    在平时工作中我们经常要远程登录服务器,这就要用到SSH协议: $ ssh user@host 主要有两种登录方式:第一种为密码口令登录,第二种为公钥登录 密码口令登录 通过密码进行登录,主要流程为: ...

  3. Jenkins官方教程地址入口

    https://jenkins.io/doc/book/ 其实Jenkins的核心在于插件,官方教程只能是基本简单的,所以要找教程最好对应插件来找.

  4. Linux/CentOS设置全局代理(http)

    说明:为什么说是http代理,其实这个还不能说是全称走代理,罪名写的区别就是ICMP协议这个设置就无效,只能说是90%的应用都可以使用这个设置来实现代理访问,只有个别不行,比如一些软件根本不走http ...

  5. Nginx报Primary script unknown的错误解决

    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 改成红色部分变量 root   /usr/local/nginx/h ...

  6. HDU 4436 str2int (后缀自动机SAM,多串建立)

    str2int Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total S ...

  7. One-wire Demo on the STM32F4 Discovery Board

    One-wire Demo on the STM32F4 Discovery Board Some of the devs at work were struggling to get their s ...

  8. securecrt中文乱码以及ubuntu设置locale

    参考文献 http://wiki.ubuntu.org.cn/%E4%BF%AE%E6%94%B9locale http://www.bootf.com/547.html 强烈建议 ubuntu下面不 ...

  9. 【Go命令教程】6. go doc 与 godoc

    go doc 命令可以打印附于Go语言程序 实体 上的文档.我们可以通过把程序实体的标识符作为该命令的参数来达到查看其文档的目的. 插播:所谓 Go语言的 程序实体,是指变量.常量.函数.结构体以及接 ...

  10. Android 应用程序之间内容分享详解(一)

    一个Andoird应用程序的重要的地方是他们有相互沟通和整合的能力,一个应用程序可以和另一个应用程序交互,接下来我们来看看Android应用之间的内容分享 当你构建Intent的时候,必须要指定Int ...