The Technology database of Duke Yin

Hooks简介1:基本的WordPress构建块

WordPress钩子可以说是WordPress开发的基础,构成了核心功能的很大一部分,迄今为止几乎所有可用的插件和主题都在使用它。 对于刚开始使用WordPress开发的用户来说,钩子的概念也可能有些令人生畏。 今天,我们将深入了解WordPress钩子的确切含义,以及它们如何在您成为WordPress摇滚明星的途中为您提供帮助。

无论如何,WordPress钩子到底是什么?

WordPress钩子实质上是一种触发器,允许用户使用简短的代码片段来修改WordPress主题或插件的区域,或将自己的代码添加到WordPress的各个部分而无需修改原始文件。 例如,“当WordPress选择要加载的模板文件时,运行我们的自定义代码”或“当为每个帖子生成内容时,在内容末尾添加社交书签链接”。 一旦我们对不同类型的钩子有了更多的了解,这些示例将得到扩展。

挂钩可以分为“动作”和“过滤器”挂钩,前者允许在各个点插入自定义代码(与JavaScript中的事件不同),后者允许对内容的各种位进行操作(例如,内容页面或博客文章)。 让我们仔细看看其中的每个,对吧?

动作挂钩

动作钩子是WordPress核心,主题和插件代码中的指定点,可以在外部资源(钩子所在范围的范围之外……在核心,主题或插件中)插入其他代码,并由此插入自定义代码以执行他们可能需要的其他功能。 一个例子是常用的wp_head操作钩,许多主题和插件都使用它来注入其他CSS样式表,处理代码或它们需要放置在WordPress主题的XHTML结构的<head></head>标签之间的任何其他内容。 这就是包含wp_head();的原因wp_head(); 在所有WordPress主题中。

要挂接一个动作,请在主题的functions.php文件(或插件的代码)中创建一个函数,然后使用add_action()函数将其挂接,如下所示:

<?php
	add_action( 'wp_head', 'wpcandy_actionhook_example' );

	function wpcandy_actionhook_example () {

		echo '<meta name="description" content="This is the meta description for this page." />' . "
";

	} // End wpcandy_actionhook_example()
?>

上面的代码在主题的<head>标签之间添加了文本“ Hello WPCandy Readers!”。 将“ wp_head”与“ get_header”一起放置在对add_action()的调用中将在主题上方显示此文本。

我想用一个句子来解释动作挂钩的方式是:“到此为止, 那就去做。”

过滤钩

过滤器挂钩用于操纵输出。 例如,可以在每篇博客文章的内容末尾添加一行或文本(或超链接,或签名)。 筛选器挂钩还可用于截断文本,更改内容的格式或几乎任何其他编程操作要求(例如,添加或覆盖值数组)。

使用add_filter()函数将自定义代码添加为过滤器。 以下代码仅在查看完整的博客文章屏幕时,才在每个博客文章的末尾添加签名:

<?php
	add_filter( 'the_content', 'wpcandy_filterhook_signoff' );

	function wpcandy_filterhook_signoff ( $content ) {

		if ( is_single() ) {

			$content .= '<div class="sign-off">Th-th-th-th-th That\'s all, folks!</div>' . "
";

		} // End IF Statement

		return $content;

	} // End wpcandy_filterhook_signoff()
?>

上面的代码仅在单个博客文章屏幕上才在我们博客文章内容的末尾添加一个新的div标签。

过滤器挂钩类似于在PHP使用str_replace()函数。 您给它一些数据,操作,替换或重新格式化数据,最后将新内容退还出去。

对于一些常见问题的回答

自定义钩子仅适用于已激活的主题或插件吗?

由主题或插件添加的自定义挂钩和过滤器,仅在该主题或插件处于活动状态时才适用。 但是,有很多钩子是全局的( get_header , wp_headwp_footer是三个示例)。 如果您想定期切换主题并维护您已挂接到这些主题或其他全局挂钩或过滤器上的功能,建议您将其写入插件。

主题和插件可以指定自定义过滤器和操作。 我们将在第二部分中对此进行更多介绍。

在哪里可以了解有关动作和过滤器挂钩的更多信息?

毫无疑问,我最喜欢的资源是WordPress Codex。 尽管有很多关于过滤器和动作钩子应用程序的在线教程,但当他们从马的嘴里听到时,就可以最好地理解它们。 食品法典委员会提供了有用的示例,以及最新的和翔实的说明,有助于收集对插件API(处理操作和过滤器挂钩的API)的总体了解。

对。 现在,我们已经回答了几个问题,让我们展示一些可以直接用于任何WordPress主题的实际示例。

在每个帖子的末尾添加“时间前”时间显示。

<?php
	add_filter( 'the_content', 'wpcandy_time_ago' );

	function wpcandy_time_ago ( $content ) {

		$content .= "
" . __( 'Posted ', 'wpcandy' ) . human_time_diff( get_the_time('U'), current_time('timestamp') ) . __( ' ago', 'wpcandy' );

		return $content;

	} // End wpcandy_time_ago()
?>

使用WordPress条件标签来检测用户的Web浏览器,并将带有其名称的类添加到body标签。

<?php
add_filter('body_class','browser_body_class');
function browser_body_class($classes) {
	global $is_lynx, $is_gecko, $is_IE, $is_opera, $is_NS4, $is_safari, $is_chrome, $is_iphone;

	if($is_lynx) $classes[] = 'lynx';
	elseif($is_gecko) $classes[] = 'gecko';
	elseif($is_opera) $classes[] = 'opera';
	elseif($is_NS4) $classes[] = 'ns4';
	elseif($is_safari) $classes[] = 'safari';
	elseif($is_chrome) $classes[] = 'chrome';
	elseif($is_IE) $classes[] = 'ie';
	else $classes[] = 'unknown';

	if($is_iphone) $classes[] = 'iphone';
	return $classes;
}
?>

删除WordPress 3.1管理栏。

<?php add_filter( 'show_admin_bar', '__return_false' ); ?>

那 Twenty Ten 呢?

通过引入Twenty Ten作为WordPress默认主题,该主题在主题文件中收到了大量文档,并为此专门创建了几个自定义钩子或可插入函数。 让我们看一下如何使用这些挂钩来增强“Twenty Ten”。

TwentyTen主题中的主要自定义钩子有一个相对简单的用途:将内容添加到页脚中的功劳区域。 这是通过挂钩到新的“ twentyten_credits”动作挂钩来完成的。 这是一个例子:

<?php
	add_action( 'twentyten_credits', 'wpcandy_credits' );

	function wpcandy_credits () {

		$html = '';

		$html .= 'Proudly brought to you by <a href="http://wpcandy.com/">WPCandy</a>.' . "
";

		echo $html;

	} // End wpcandy_credits()
?>

上面的功能向“ Twenty Ten ”主题的页脚区域添加了一条简单的信用额度文本。 在第二部分中,我们将讨论可插拔功能,这些功能可在二十十主题中使用,尤其是可增强和自定义主题中帖子内容上方和下方的输出。

Credit: http://wpcandy.com/teaches/how-to-use-wordpress-hooks/#.Xcd9qFUza70

# #

评论关闭