最近在使用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. ARM-JTAG-SWD-schematic

  2. [web.config]如何灵活使用配置文件

    摘要 在实际项目中,经常遇到比较多的环境,比如开发环境,测试环境,生产环境.对于这些环境,可能会有不同接口调用,不同的数据库连接字符串等等.那么该如何实现不同环境的参数快速切换呢?当然,最笨的方式就是 ...

  3. SharePoint Online 创建和使用栏

    前言 本文介绍如何在Office 365中创建和使用栏. 正文 通过登录地址登录到Office 365的SharePoint Online站点中,我们可以在右上角的设置菜单中,进入网站内容: 找到我们 ...

  4. 用drawRect以及CAReplicatorLayer绘制动态水波纹

    用drawRect以及CAReplicatorLayer绘制动态水波纹 大大简化了写水波纹效果的难度,你可以根据示例自己组装水波纹效果,本设计是几个工具组合在一起完成的效果, DrawRectObje ...

  5. jquery的radio和checkbox的标签的操作集合

    jquery的radio和checkbox的标签的操作集合: $("input[name='radio_name'][checked]").val(); //选择被选中Radio的 ...

  6. MARQUEE 字符滚动条效果

    <MARQUEE scrolldelay =“100” direction=“up " > 滚动文字或图像 </MARQUEE> 说明: – scrolldelay: ...

  7. git如何删除远端不存在的本地分支?

    问题:远端分支删除后,如何删除之前拉取的本地分支? 答案: git fetch -p git remote show origin 可以查看remote地址,远程分支,还有本地分支与之相对应关系等信息 ...

  8. JavaScript:ECMAScript 引用类型

    ylbtech-JavaScript:ECMAScript 引用类型 1. 返回顶部 2. ECMAScript 引用类型返回顶部 引用类型通常叫做类(class). 本教程会讨论大量的 ECMASc ...

  9. SQL Server 数据库项目

    ylbtech-.NET Framework: SQL Server 数据库项目 SQL Server 数据库项目 类型:SQL Server 用于创建 SQL Server 数据库的项目 1. 新建 ...

  10. USB线插拔检测使用UEventObserver检测uevent事件的分析

    说实话这玩样儿的代码量真的很少,大家如果能耐得住性子啃一会儿也就能撸懂了. 在这之前研究USB线插拔的时候就知道了有这么个东西,当时也就看了看,但没做什么笔记.最近想用起来,却发现就只有个名字在记忆中 ...