前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Genesis框架从入门到精通(4):框架的内置动作(续)

Genesis框架从入门到精通(4):框架的内置动作(续)

作者头像
丘壑
发布2019-03-13 10:22:17
6200
发布2019-03-13 10:22:17
举报
文章被收录于专栏:一丘一壑一丘一壑

在本系列的前一篇 Genesis框架从入门到精通(3):框架的内置动作 ,我解释了在哪里找Genesis 的内置动作,以及如何使用钩子移除,移动或改变动作。在这篇文章的中,我将继续讲解如何使用自定义的函数、在添加动作时使用既有函数的技巧,以及怎样使用Genesis函数。

使用自定义的函数

Genesis的函数是很好用,但是如果当你想在网站上添加其他内容时呢?你要自己写一个函数,并使用add_action()把它挂载到某一个钩子上。 (请记住,add_action(), remove_action() 实际上只是指明了代码要在什么位置执行)。编写一个函数听起来好像复杂的样子,特别是对不熟悉php的人。不过它真的很容易。函数分为几个关键部分,可以看成是某种按顺序执行的任务模板。让我们看一下这个generic函数

代码语言:javascript
复制
function generic( $arg='foo' ) {
    echo $arg;
}

很简单。一个函数包括6个部分,第1行就包括了其中的4个基础部分。单词“function”是第一部分,它告诉php“记住这个函数,后面要用到”。“generic”是函数名,这样你就可以用这个名字来调用代码并执行,而不是每次都要写同样的一大啪啦的代码。当然,这个例子中没那么多代码,也不会节省太多打字量,但在实际开发中它可能会有很多代码。

说一下函数的名称。 “generic”是一个非常糟糕的可怕的名称。太短,没有描述性,而且……太通用了(generic的意思就是通用)。名称的长度不是问题。PHP的函数名字并不要求最少几个字符,名称太短问题是不好确定唯一性的,也不能很好的描述函数的作用。

函数名称必须是唯一的。你不能拥有两个具有相同名称的函数,否则你可能会收到报错并把网站搞崩溃。子主题里函数通常使用子主题名称或缩写作为前缀,这可以很大程度上避免函数重名导致的问题。

函数名字也应该是有意义的。虽然这不是强制要求。我可以随便写一个处理标题输出的函数叫child_function_a,只要其他函数没有叫这个名字,它就可以用,但是当我需要调用它的时候,我可能记不住这个名字,而且很可能会忘记什么它是干什么用的了。 叫“child_do_title”要好得多,因为它告诉我它是子主题中的一个函数,它会去“处理标题”或输出标题。

第一行的下一部分($arg ='foo')是函数的“参数”。函数可以不需要参数,也可以有多个参数。在这个例子里,我设置了一个参数的“默认”值,但是在调用该函数时可以用别的值来替换它。如果没有参数,就写成 function generic(){} ,可能大部分时候你都会这么用。再往下,只是把这个参数给打印(echo)出来。这意味着,函数在哪里执行,它就会把这个值打印输出到函数所在的位置,如果我想输出“bar”而不是默认的“foo”,那就写成 generic('bar') 。在配合钩子使用时,这个函数可能会更有意义。

在参数之后是左大括号 { ,开始写函数的代码, {} 之间的所有内容都是函数的“内脏”,在调用函数时,这里的代码都会运行(稍后将详细介绍)。函数部分以右大括号“}”结束,因此php引擎知道在哪里停止。

这就是一个完整的函数了,但是你可能会想“我又不懂php,就会点html和css,这玩意对我没啥用”,就像我刚开始学的时候一样。好消息是,如果你会写html并想使用html,也是可以的。

代码语言:javascript
复制
function generic_html() { ?>

Now I'm in html, this will print out using whatever 
<strong>html</strong> markup I give it.

<?php }

你甚至可以混合使用html和php:

代码语言:javascript
复制
function generic_html_php() { ?>

<p>See, still in html, no need for any fancy php, 
unless I need something dynamic, 
like the date <?php echo date(); ?>.</p>

<p>Pretty easy, and that date function 
loads inline just like it would in a template file</p>

<?php }

使用自定义的动作

好,你现在可以编写一个简单的函数了,但你需要将它添加到Genesis吗?嗯,这是最简单的部分,只需写出来你想怎么用这个函数就行了。需要在标题之前执行代码吗?

代码语言:javascript
复制
add_action( 'genesis_before_header', 'generic' );

关于怎么使用其他钩子和动作来调整位置,可以看之前的两篇文章。

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

Genesis框架从入门到精通(3):框架的内置动作

现在你已经了解了如何通过钩子向Genesis添加自己的代码,但是还有很多东西需要学习。

使用已有函数

一个常见的需求就是是将插件与Genesis集成。通常,有的插件会包含一段使用说明:“打开模板文件并将此代码添加到您希望显示的位置”。这比较难搞,因为有的子主题中并没有这个文件,而在Genesis中这个文件可能只有一行genesis();  怎么办呢?用动作(action)就行。我们来看看Add to Any插件。正常情况下,这个插件很容易集成,可以自动运行,但是假设你想在文章信息旁边的位置显示。插件的安装说明说要通过编辑器将一些代码添加到模板文件中。

代码语言:javascript
复制
<?php if( function_exists('ADDTOANY_SHARE_SAVE_KIT') ) { ADDTOANY_SHARE_SAVE_KIT(); } ?>

你不能直接在Genesis的文件里修改,因此你需要把这段代码写成一个动作函数。可以这样做

代码语言:javascript
复制
add_action( 'genesis_after_post_content', 'child_do_add_to_any' );
/**add the add to any function after post content if the function exists*/
function child_do_add_to_any() {
    if( function_exists('ADDTOANY_SHARE_SAVE_KIT') ) 
        ADDTOANY_SHARE_SAVE_KIT(); 
}

足够简单明了,但我们可以通过结合函数和动作来更简化一点。请记住,在 add_action() 这条语句里,“回调函数”部分只是指明要使用的函数,只要这个函数存在,任何函数都可以,所以你可以改为

代码语言:javascript
复制
if( function_exists('ADDTOANY_SHARE_SAVE_KIT') ) 
    add_action( 'genesis_after_post_content', 'ADDTOANY_SHARE_SAVE_KIT' );

如何调用Genesis函数

“调用函数”这个说法的意思就是告诉函数开始运行。如果你以前编辑过模板,很可能在你不知道的时候就已经调用过函数。如果你在模板文件里添加了什么东西或者其他操作,你就是在调用该函数了。当你使用钩子时,你也是在调用一个函数,你就是告诉在函数运行之前告诉它要在哪里运行。这意味着钩子函数可以与“普通”函数互换。就像你可以在钩子中使用另一个函数一样,你可以在也不使用钩子的情况下调用Genesis函数。

一个很好的用法就是在自定义 home.php 文件中。你可能修改了一个子主题的 home.php 文件,加入了一些自定义的内容,但你希望在某些内容之后再把博客上的文章也显示出来。看看 genesis/lib/structure/loops.php 文件,你会发现是 genesis_do_loop()调用了 genesis_standard_loop(),所以你可以在home.php文件中添加这个函数,你希望文章显示在哪里就添加在哪里

代码语言:javascript
复制
<?php genesis_standard_loop(); ?>

这适用于任何Genesis函数。如果你想将导航菜单放在主页上,可以像这样添加

代码语言:javascript
复制
<?php genesis_do_nav(); ?>

我希望通过这三篇文章把让钩子的实际意义讲明白了。

接下来是关于过滤器的教程,还有一些重要的Genesis函数需要关注。


原文链接:Genesis Explained Framework Actions Continued

如果你不了解php的函数,推荐你看看下面这个免费教程

PHP入门-函数篇

简介:本教程结合实例形式分析了PHP关于自定义函数的创建、返回值、默认值、参数、值传递、作用域 以及可变函数、嵌套函数、递归函数、闭包函数的使用等相关技巧。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-02-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用自定义的函数
  • 使用自定义的动作
  • 使用已有函数
  • 如何调用Genesis函数
  • PHP入门-函数篇
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档