专栏首页一丘一壑Genesis框架从入门到精通(1):什么是框架?

Genesis框架从入门到精通(1):什么是框架?

WordPress主题框架Genesis的工作原理可能会让很多人感到困惑不解,这导致开发者在开始用Genesis框架时可能会一脸蒙逼,无所适从。

在开发传统的主题时,如果想自定义修改日志页面,可能首先就去会去找single.phppage.phpindex.php这个几个文件,然后先把主要部分的代码复制到新文件中去。但是在Genesis框架中,类似其他主题中这些文件并一定都存在,即使存在,里面也只包含一行代码,比如:

在子主题中,可能只有一个 style.css 和一个functions.php文件。functions.php 中可能也只有一行代码,用一点代码就能让主题的外观和感觉产生很大变化,对开发人员来说也很容易维护和修改。

通过Genesis框架能更高效的编写代码,不过你必须得清楚地理解一些基本概念才行。所以,我希望能通过这个系列教程,来帮助你用Genesis框架快速开发主题或修改子主题。

框架是什么?

Gesesis是一个主题框架,你可以把它想象成乐高积木或其他类似玩具。它有一个可以用来组装各种零件的平台,这些零件都可以拆卸或移动。有些零件只能安装在特定的地方,而有些零件几乎可以安装到任何位置。

既然要使用Genesis,那么基础平台就是不能替换的了,所以让我们来了解一下这个平台。

这是framework.php文件,是3个最基本的最不能更动的文件之一。实际上,不光是这个文件,所有Genesis核心代码文件都不要动,不要编辑。所有的开发工作都应该在子主题内进行,Genesis核心代码的任何改动都会在升级时被自动覆盖。

所有一切都是从genesis()函数开始的。genesis()函数几乎在每个标准模板文件中都会调用。这个函数负责输出本该写在模板文件里的代码。在顶部和底部应该是两个比较眼熟的函数get_header()get_footer(), 它们会加载 header.php 文件和footer.php 文件。这两个也是不能修改的文件,它们构成了Genesis框架的核心平台。

在 header 和 footer 之间是 html 代码的封装代码和通过 do_action() 函数指明的“钩子”。do_action() 函数的作用是用“钩子(hook)”把需要执行的动作函数(action)“勾入”到Wordpress中,用来执动作函数中的代码。

这个文件中有7个“钩子”,分别会把不同的动作函数“勾入”wordpress中。我将在稍后解释什么是动作函数,现在让我们先简单的总体看一下Genesis里典型的“钩子”的结构和加载过程。

以下是“钩子”加载顺序的简化版,最开始的就是加载框架自身的钩子:

  • genesis_pre
  • genesis_pre_framework
  • genesis_init
    • header.php
      • genesis_title
      • genesis_meta
      • genesis_before
      • genesis_before_header
      • genesis_header
        • genesis_site_title
        • genesis_site_description
      • genesis_after_header
    • framework.php
      • genesis_before_content_sidebar_wrap
      • genesis_before_content
      • genesis_before_loop
      • genesis_loop
        • genesis_before_post
        • genesis_before_post_title
        • genesis_post_title
        • genesis_after_post_title
        • genesis_before_post_content
        • genesis_post_content
        • genesis_after_post_content
        • genesis_after_post
          • genesis_before_comments
          • genesis_comments
          • genesis_list_comments
          • genesis_before_pings
          • genesis_pings
          • genesis_list_pings
          • genesis_after_pings
          • genesis_before_comment
          • genesis_after_comment
          • genesis_before_comment_form
          • genesis_comment_form
          • genesis_after_comment_form
        • genesis_after_endwhile
        • genesis_loop_else
      • genesis_after_loop
      • genesis_after_content
        • genesis_sidebar
          • genesis_before_sidebar_widget_area
          • genesis_after_sidebar_widget_area
        • genesis_sidebar_alt
          • genesis_before_sidebar_alt_widget_area
          • genesis_after_sidebar_alt_widget_area
      • genesis_after_sidebar_content_wrap
    • footer.php
      • genesis_before_footer
      • genesis_footer
      • genesis_after_footer
      • genesis_after

Genesis Visual Hook Guide

在这里也可以看到Genesis的钩子的总体结构 的在线演示 https://genesistutorials.com/visual-hook-guide/ 

太多了,各种”钩子”。每个“钩子”都可以将其他函数“勾入”进来以便添加一些功能。只需几行代码就可以移动网站的各个部分。动作函数将在下次再讲。接下来,我还会讲解如何阅读Genesis的代码,以便快速定位到需要复制到子主题的部分。

如果你现在看不太明白也不要担心,本系列会一步步地把Genesis框架解释清楚,本次基础教程也将让你更容易理解下次的内容。


译后记:

原文地址:https://designsbynickthegeek.com/tutorials/genesis-explained-the-framework

作者 Nick Croft 是 Genesis 非常早期的贡献者和核心开发者,写过不少Genesis插件,也是一个全职的Genesis自由顾问。教程还是挺权威的,也是Genesis官方推荐过的。作者也把文章整理成书出版了,在Amazon上卖的,最新版本更新到2018了,一致都是好评。

他博客上的这个系列文章已经很早了,2011年….8年前了,中间有不少东西可能都不准确了,最新版的书我还没有拿到,不知道里面内容的内容相对于博客有多少更新。。。但好在我看了下那本书的目录和博客上的差别不大,就只好一边对照博客文章一边对照代码在看了,如果碰到有些太旧的东西就改一下,不一定会和原文一样,尽量和最新版Genesis的靠拢。

Genesis Explained: Your Step-by-Step Guide to Genesis 

英文原版的,英文好的朋友可以先买来看看

亚马逊购买链接

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • dedecms 漏洞修复方案及解决网站被黑的办法

    前段时间网站被黑了,从百度打开网站直接被劫持跳转到了cai票,du博网站上去,网站的首页index.html文件也被篡改成一些什么北京sai车,pk10,一些c...

    技术分享达人
  • PhpStorm+Wamp配置debug web调试

    在学习php的时候,如果直接报错没有debug,排错过程是很痛苦的。所以配置了一下phpstrom的debug。步骤下面会为大家详细带来。

    十里桃花舞丶
  • php使用pecl安装mongodb扩展

    默认情况下,php并没有安装mongodb扩展,会报Class 'MongoDB\Driver\Query' not found错误。

    章鱼喵
  • Golang实现的持久化消息队列-OPQ

    这是个搁置了有段时间了的个人兴趣项目,还有不少完善工作需要做,这里记录下基本思路和实现,欢迎拍砖。

    levinllin
  • PHP命名空间学习笔记

    从广义上来说,命名空间是一种封装事物的方法。在很多地方都可以见到这种抽象概念。例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来说,它就扮演了命名空间...

    大江小浪
  • 搜索引擎的原理

    搜索引擎蜘蛛(spider),可简称为蜘蛛,本意为搜索引擎机器人(robot),称为蜘蛛的原因是将互联网比喻成蜘蛛网,将机器人比喻成了在网上爬行的蜘蛛,是搜索引...

    阳光岛主
  • 自定义 WordPress 样式

    修改页面头部、脚部的文件路径:wp-content ——》themes ——》twentyten ——》footer.php、header.php

    阳光岛主
  • Linux 搭建 discuz 论坛

    Discuz! 是腾讯(Tencent)旗下 Comsenz 公司推出的以社区为基础的专业建站平台,帮助网站实现一站式服务。让论坛(BBS)、个人空间(SNS)...

    阳光岛主
  • Ubuntu 配置 Apache

    系统环境:Ubuntu 10.10(linux-kernel 2.6.35-22)

    阳光岛主
  • CentOS 安装 PHP

    1.获取PHP安装文件: downloads  或直接下载 php-5.5.9.tar.gz

    阳光岛主

扫码关注云+社区

领取腾讯云代金券