wordpress 父类和子类调用不同模板

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了wordpress 父类和子类调用不同模板相关的知识,希望对你有一定的参考价值。

父类调用默认的category.php,而所有新增子类调用自定义的category-child.php。求实现!

WordPress 2.9 以后的版本可以可以为不同的分类指定不同的模板样式的。有WP自带的方法和自己编写函数实现的方法,如果是CMS主题的话使用自己编写函数的方法更为灵活和可配置。


方案一:wp自带方式

先查看分类ID,例如是:12.然后复制一个category.php(也就是一个通用的分类模板,不想的话 可以自己新写一个)到主题根目录,改名为category-12.php. 这样分类ID为12的分类调用的分类模板就是category-12.php的模板!


如果使用特殊模板样式的分类的别名,如product.则复制一个category.php到主题根目录,改名为category-product.php.


方案二:

<?php 
if ( in_category('1') || post_is_in_descendant_category( 1) )
include(TEMPLATEPATH .'/category-1.php');

elseif( in_category('2') || post_is_in_descendant_category( 2 ) )
include(TEMPLATEPATH . '/category-2.php');
else
include(TEMPLATEPATH . '/category-3.php');

?>


一般情况用方案一就OK了,不过要制作CMS主题,可以用方案二配置传值栏目ID,灵活配置。

追问

复制粘贴谢谢。早用过了,不行。

参考技术A

很简单  

catrgory.php

<?php
/*  功能:
* 判断是否为分类目录别名,如果不是,则使用category-all.php 分类目录模板
*   如果是,则使用对应的分类目录模板
*/
if ( is_category('wordpress') ) 
include(TEMPLATEPATH . '/category-pic.php');





// elseif 结束
else 
include(TEMPLATEPATH . '/category-default.php');

?>




详细演示地址请看 http://www.cnsecer.com/jianzhan/wordpress

追问

你好,兄台,试了,不行。用category-default.php,父类和子类都变成了默认index页面,不要default,就提示连分类页面都找不到了。

追答

cnsecer.com符合你的要求吗?符合的话我把代码给你打包

追问

比如你的网站导航条上的经验、咨询等等栏目,这是用分类目录的父类做的吗?其实我想要的差不多就是你那种效果,只是多了一个子目录。
比如你的网站是这样:首页》经验:然后进入经验页面后就是文章列表。
但我想要的是这样:首页》经验:进入经验页面后不是文章列表,而是子目录列表。
相当于这样个意思:首页》父类:进入父类页面列出该父类下所有一级子类。点击一级子类,进入一级子类页面才是文章列表。

追答

下面是代码


本回答被提问者采纳

Java中的继承:父类和子类的关系

一、父类引用指向子类对象时

 

1、若子类覆盖了某方法,则父类引用调用子类重新定义的新方法

2、若子类未覆盖某方法,则父类引用调用父类本身的旧方法

3、若子类覆盖了某属性,但父类引用仍调用父类本身的旧属性

4、若子类未覆盖某属性,则父类引用调用父类本身的旧属性

5、父类引用不能访问子类新定义的方法

 

二、子类引用指向自身对象时

 

 

1、若子类覆盖了某方法,则子类引用调用子类重新定义的新方法

2、若子类未覆盖某方法,则子类引用调用父类本身的旧方法

3、若子类覆盖了某属性,则子类引用调用子类重新定义的新属性

4、若子类未覆盖某属性,则子类引用调用父类本身的旧属性

5、子类引用可以访问子类新定义的方法

 

三、示例代码

 
B.java
[java] view plain copy
 
 技术分享技术分享
  1. public class B {  
  2.   
  3.     int a = 1;  
  4.     int b = 2;  
  5.   
  6.     void f1() {  
  7.         System.out.println("B.f1()");  
  8.     }  
  9.   
  10.     void f2() {  
  11.         System.out.println("B.f2()");  
  12.     }  
  13.   
  14. }  

C.java
[java] view plain copy
 
 技术分享技术分享
  1. public class C extends B {  
  2.   
  3.     int a = 3;  
  4.   
  5.     @Override  
  6.     void f1() {  
  7.         System.out.println("C.f1()");  
  8.     }  
  9.   
  10.     void f3() {  
  11.         System.out.println("C.f3()");  
  12.     }  
  13.   
  14.     public static void main(String[] args) {  
  15.   
  16.         B b = new C();// 父类引用指向子类对象  
  17.         b.f1();// 子类覆盖了该方法,所以父类引用调用新方法  
  18.         b.f2();// 子类未覆盖该方法,所以父类引用调用旧方法  
  19.         // b.f3();此行去掉注释会报错,父类引用不能访问子类新定义方法  
  20.         System.out.println(b.a);// 子类覆盖了该属性,但父类引用仍旧访问旧属性  
  21.         System.out.println(b.b);// 子类未覆盖该属性,父类访问旧属性  
  22.   
  23.         System.out.println();  
  24.   
  25.         C c = new C();// 子类引用指向自身对象  
  26.         c.f1();// 子类覆盖了父类方法,所以调用新方法  
  27.         c.f2();// 子类未覆盖父类方法,所以调用旧方法  
  28.         c.f3();// 子类调用自己新定义的方法  
  29.         System.out.println(c.a);// 子类覆盖了该属性,所以访问新属性  
  30.         System.out.println(c.b);// 子类未覆盖该属性,所以访问旧属性  
  31.     }  
  32. }  

输出:
[html] view plain copy
 
 技术分享技术分享
  1. C.f1()  
  2. B.f2()  
  3. 1  
  4. 2  
  5.   
  6. C.f1()  
  7. B.f2()  
  8. C.f3()  
  9. 3  
  10. 2  


以上是关于wordpress 父类和子类调用不同模板的主要内容,如果未能解决你的问题,请参考以下文章

调用父类函数比较父类和子类

Java中的继承:父类和子类的关系

父类和子类的构造方法的调用顺序

java多态中父类和子类一定要有一样的方法名吗

[Java] 父类和子类拥有同名的成员变量(fields)的情况

java里,为啥子类不可以有 和父类 同名不同返回类型 的方法?