WordPress主题制作进阶#8页面,自定义模板和子导航

定制页面模板

现在我们访问“关于”页面,可以看到它的格式就像一个帖子,这不是我们想要的。我们只希望页面有标题,我们不想要元数据,阅读更多,以及类似的东西。 所以为了改变这一切,我们须要创建一个新文件并将其保存为page.php。
我们将index文件中的代码复制,粘贴到page文件中,然后修改一些内容,用下面的代码覆盖while内部的 get_template_part()

<article class="page">
    <h2><?php the_title(); ?></h2>
    <?php the_content(); ?>
</article>

我们到前端刷新,会发现服务页和关于页使用了相同的格式;接下来将学习如何为某些页面创建单独的模板。
我们将新建一个文件命名为page-about.php,将page文件中的代码复制,粘贴到新文件中,然后在h2标题行下方添加一行电话号码,如下:

<article class="page">
    <h2><?php the_title(); ?></h2>
    <div class="well">Company Phone: 555-555-5555</div>
    <?php the_content(); ?>
</article> 

保存然后回到前端刷新页面,现在应该只有关于页发生变化。

我们成功的定制了单个页面,单这不是最好的方法,当你想在某些页面上拥有特定的样式或内容时,更好的办法是使用模板,我们要摆脱页面文件。现在我们删除page-about.php文件,然后创建一个模板。

创建一个新文件并将其保存为company-template.php。 我们将复制page.php文件中的内容,并将其粘贴到companytemplate.php文件中,然后在其顶部添加声明注释,注意这个注释要放在php标签中;然后在the_title()下方,输入电话号码,代码如下:

<?php
/*
    Template Name: Company Layout
*/
?>

<?php get_header(); ?>

    <div class="container content">
        
        <div class="main block">
        <?php if(have_posts()) : ?>
            <?php while(have_posts()) : the_post(); ?>
            <article class="page">
                <h2><?php the_title(); ?></h2>
                <?php the_content(); ?>
                <p class="phone">1-800-555-5555</p> 
            </article> 

在给其加点样式:

.phone {
    background: #f4f4f4;
    border: 1px solid #ccc;
    padding: 8px;
    font-weight: bold;
} 

保存代码,然后我们进入后台,页面->关于页,重新编辑它,在右边找到模板,选择Company Layout,点击更新。

模板

回到前端刷新

号码出现了

我们跳转到服务页,不会看到号码; 如果你希望它出现在服务页,只需进入“服务”页面并选择“Company-Layout”, 电话号码就会出现。

创建子导航

接下来我们学习如何创建子导航菜单,前面我们为关于页创建了两个子页面:团队FAQ,现在我们让关于页的两个子页面显示出来,这个方法适合任何具有子项的页面。
1、我们先到后台的关于页中移除Company—Layout模式,让页面不显示电话号码
2、然后进入page.php中,在article标签下面添加 php wp_list_pages(),代码如下:

<article class="page">
    <?php wp_list_pages(); ?>
    <h2><?php the_title(); ?></h2>
    <p class="phone">1-800-555-5555</p>
    <?php the_content(); ?>
</article> 

保存代码,让我们到前端页面看看发生了什么:

页面列表

可以看到我们在WordPress网站上的所有页面都被列出来了,但我们只想获取“关于”页面及其子页面,所以我们再转到page.php文件,就在wp_list_pages()之上添加一些代码,

<article class="page">
<?php
    $args = array(
        'child_of' => get_top_parent(),
         'title_li' => ''
    ); 
?>
<?php wp_list_pages($args); ?> 

如果我们刷新页面,我们将得到一个错误,因为没有名为get_top_parent()的函数。 让我们进入functions.php并在最下面,创建一个名为get_top_parent()的函数。代码如下

function get_top_parent(){
    global $post;
    if($post->post_parent){
        $ancestors = get_post_ancestors($post->ID);
        return $ancestors[0];
    } 
    return $post->ID;
}

保存代码,刷新页面:

子页面出现

关于页的子菜单出现了,我们回到page.php并在article标签内创建一个ul标签。 在ul标签上方,创建一个nav标签,并为其提供一个nav和sub-nav类。 现在在ul标签下,我将放置一个span标签,并为其提供一个父级链接。 在它里面,我们将放置一个a标签,它将转到<?php echo get_the_permalink();?>。 给它传递get_top_parent()函数。 然后,对于链接文本我们会说<?php echo the_title();?>,代码如下:

<nav class="nav sub-nav">
    <ul>
    <span class="parent-link">
        <a href="<?php echo get_the_permalink(get_top_parent()); ?>">
            <?php echo get_the_title(get_top_parent()); ?>
        </a>
    </span>
    <?php
        $args = array(
            'child_of' =>get_top_parent(), 
            'title_li' => ''
            );
     ?>
    <?php wp_list_pages($args); ?>
    </ul>
</nav>

现在保存代码,刷新页面看一下

横排

如果我们转到服务页面,即使没有子链接,它仍将具有此功能。 因此,我们将在functions.php文件中创建另一个短函数并调用page_is_parent。 然后,我们创建全局 post并将get_pages()赋值给 pages,在这里,我们将 'child_of='.$post->ID 作为参数传递给get_pages()。然后返回我们想要的页数,我们会计算返回的页数,如果页数大于零,那么我们就知道它是父级:

function page_is_parent(){
    global $post;
    
    $pages = get_pages('child_of='.$post->ID);
    return count($pages);
} 

我们回到page.php并在<nav>标签的正上方,我们将放置一个if语句,它将在nav标签下面结束。 我们将看看它是否是父页面_is_parent(),或者如果有任何子项$ post-> post_parent> 0,那么我们将执行以下操作:

<?php if(page_is_parent() || $post->post_parent > 0): ?> 
<nav class="nav sub-nav"> 
。。。。。。
</nav>
<?php endif; ?> 

保存代码,然后返回服务页面刷新。 我们可以看到菜单现在已经消失了,但是如果我们去关于页,菜单仍然存在,因为它有子页面。

现在我们需要的功能已经正常工作,接下来我们为子菜单添加一些样式,让它更好看:

.sub-nav {
    margin-top: 10px;
    float: right;
    width: 300px;
}
.sub-nav ul {
    float: right;
}
.sub-nav .parent-link {
    font-weight: bold;
    color: #000;
    float: left;
    margin-right: 20px;
    padding-right: 20px;
    border-right: 1px solid #009acd;
}
.sub-nav .parent-link a {
    font-weight: bold;
    color: #000;
}
.sub-nav .current_page_item {
    font-weight: bold;
}

最后我们清除一下浮动,转到page.php文件中,在nav结束标签下方添加< div class="clr" >,然后在样式表中添加以下样式:

.clr{
    clear:both;
}

保存回到前端页面刷新:

完成子导航菜单

在下一节中,我们将介绍小工具(widgets)。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,490评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,581评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,830评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,957评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,974评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,754评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,464评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,847评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,995评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,137评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,819评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,482评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,023评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,149评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,409评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,086评论 2 355

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明先生_X自主阅读 15,982评论 3 119
  • 27日下午最新消息,从省十二届人大常委会第二十四次会议上传来消息,河南一般公共预算新增22.65亿元,其中包含郑州...
    大河之南i阅读 430评论 0 0
  • 你说, 离家好久了, 这里的饭菜,少些火候, 冬日里的风,也不温柔; 你说, 时光总似箭, 流水似流年, 新年又赶...
    夏哔哩阅读 301评论 2 7
  • 理想与现实的碰撞。 这是我看的第一部日本动漫(奥特曼之类不算),之前没看过纯粹是不喜欢听日语。看过之后更感觉国产动...
    AmNobody阅读 301评论 0 0
  • Moment 总有一些瞬间想与你分享
    世家珠宝小客服阅读 136评论 0 0