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

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

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

    1.APP与服务器之间的交互原理 app端(客户端)与服务端的交互其实理解起来和容易,客户端想服务器端发送请求,服务器端进行数据运算后返回最终结果.结果可以是多种格式: 1.text 文本格式 2.x ...

  2. CSDN博客的积分计算方法和博客排名规律

    开通博客一段时间了,近期莫名其妙得获得"持之以恒"的勋章,看着日益增长的积分,既兴奋又好奇.本人对CSDN博客积分的计算方法非常疑惑,也不知当中怎么回事,好奇度娘一番,并结合CSD ...

  3. php简单浏览目录内容

    <?php $dir = dirname(__FILE__); $open_dir = opendir($dir); echo "<table border=1 borderCo ...

  4. drp错误集锦---“Cannot return from outside a function or method”

    好久都不动的项目,今天打开项目突然是红色感叹号.详细错误表现为: 也就是说,如今MyEclipse已经不识别在JSP页面中使用的return方法了(并且不止一处这种警告),那怎么办?????顿时闹钟一 ...

  5. Lombok使用详解(转)

    本文转自https://blog.csdn.net/u010695794/article/details/70441432 2017年04月22日 15:17:00 阅读数:10394 Lombok使 ...

  6. 利用mvn deploy命令上传包(转)

    本文转自https://blog.csdn.net/chenaini119/article/details/52764543 mvn安装 下载maven的bin,在apache官方网站可以下载. ht ...

  7. springboot—spring aop 实现系统操作日志记录存储到数据库

    原文:https://www.jianshu.com/p/d0bbdf1974bd 采用方案: 使用spring 的 aop 技术切到自定义注解上,针对不同注解标志进行参数解析,记录日志 缺点是要针对 ...

  8. delphiredisclient开源GIT

    delphiredisclient - Redis client for Delphi Delphi Redis Client版本2(此分支)与Delphi 10.1 Berlin兼容,更好.警告!如 ...

  9. 将 tomcat 安装成 windows 服务

    1.下载 tomcat 的windows 压缩包,一般以 .zip ,而且文件名中有 bin 的文件就是 2.解压下载的文件到某一个目录下,eg: TOMCAT_HOME 3.打开 cmd ,运行 % ...

  10. Java 与 Json的互相转换

    这几天一直在做Java解析Json数据的一个项目,因为初识json,所以很多东西都是有着懵懂的认识.这里写下我解析时遇到的问题和收获. 我解析json时用到的是json-lib包.下载地址:http: ...