本文主要介绍了讲解WordPress钩子hook的概念及基本用法,hook是WordPress中调用函数的重要用法,也是开发WordPress各种功能和插件的时候经常用到的。
WordPress常用两种钩子,一种叫做动作(action),还有一种叫做过滤器(filter)。
动作钩子概念
动作钩子是WP代码执行到某处或某个事件发生时触发的一系列函数,插件可以利用动作钩子API在WP代码执行的特定点之前插入一系列函数以控制执行。它跟过滤钩子极像,唯一不同的是过滤钩子返回一个处理后的值,而动作钩子仅完成函数执行并不返回值,如果钩子不存在则返回NULL并新增该钩子。
动作钩子原理
由于动作钩子和过滤钩子几乎一样,所以它们的实现原理也是一样的。它主要利用一个全局变量$wp_filter,增加动作函数时使用add_action()函数给全局变量$wp_filter增加了一个数组元素,这个元素键名中含有钩子名,值中含有对应函数及执行优先级等信息,在调用do_action()函数使用动作钩子时,它通过循环查找出所有跟钩子关联的函数并将其依次调用,最后返回处理后的数据。
语法结构
add_action($hook,$function_to_add,$priority = 10,$accepted_args = 1)
add_action()作用:该函数用于给指定的动作钩子$hook添加指定的挂载函数$function_to_add,同时它可以确定挂载函数执行优先级及其可接收参数个数;
参数
$hook 为钩子名
$function_to_add 为挂载函数名
可选参数$priority为该挂载函数执行的优先级,默认为10,该数字越小则越早执行,数字相同则按其添加到钩子上的顺序执行,越早添加越早执行
可选参数$accepted_args确定挂载函数接收的参数个数,默认为1
只将概念的话可能会有点难以理解,下面我们结合一个例子进行讲解。wp_head 是一个很常用的动作钩子,在开发主题过程中,开发者都会在 head 标签里加上 wp_head() 函数,事实上,正是这个函数调用了 wp_head 钩子,如果没有这段代码则有的插件将不能正常工作,该函数位于wp-includes/general-template.php文件中,原函数如下:
function wp_head() {
do_action('wp_head');
}
我们这样解释do_action函数:do_action执行一个“动作”,这个动作名称就是这个参数”wp_head”,这个wp_head动作是不需要定义的,do_action还有定义的功能,也就是先前不需要定义这个wp_head是什么、要干嘛,而do_action就定义了一个名叫wp_head的动作,并执行它。
wp_enqueue_scripts钩子主要用来前台调用css和js文件,其中需要了解下这两个函数:wp_enqueue_style和wp_enqueue_script
第一种方法
function tone_front_cssscript(){
//全局加载样式
wp_enqueue_style( 'style', get_template_directory_uri() . '/style.css' );
//全局加载js脚本
wp_enqueue_script( 'jquery-min', get_template_directory_uri() .'/js/jquery.min.js' );
}
add_action( 'wp_enqueue_scripts', 'tone_front_cssscript' );
第二种方法,先注册css或js,再进行调用
function tone_admin_cssscript(){
wp_register_style('custom_wp_admin_css', get_template_directory_uri() . '/style.css');
wp_enqueue_style( 'custom_wp_admin_css' );
wp_register_style('custom_wp_admin_script', get_template_directory_uri() . '/js.css');
wp_enqueue_script( 'custom_wp_admin_script' );
}
add_action( 'admin_enqueue_scripts', 'tone_admin_cssscript' );
使用 is_single() 只在文章加载脚本或CSS
id为文章的ID就可以让脚本和css只加载到那篇文章。当然,如果直接使用 is_single() (不填ID),就会在所有文章加载脚本和CSS。
function myScripts() {
if ( is_single(id) ) {
wp_enqueue_style( 'style', get_template_directory_uri() . '/style.css' );
wp_enqueue_script( 'jquery-min', get_template_directory_uri() .'/js/jquery.min.js' );
}
}
add_action( 'wp_enqueue_scripts', 'myScripts' );
使用 is_page() 只在页面加载脚本或CSS
id为页面的ID就可以让脚本和css只加载到那个页面。当然,如果直接使用 is_page() (不填ID),就会在所有页面加载脚本和CSS。
function myScripts() {
if ( is_page(id) ) {
wp_enqueue_style( 'style', get_template_directory_uri() . '/style.css' );
wp_enqueue_script( 'jquery-min', get_template_directory_uri() .'/js/jquery.min.js' );
}
}
add_action( 'wp_enqueue_scripts', 'myScripts' );
get_post_thumbnail_id()函数主要是用来获取文章缩略图ID,通过该函数,如果当前文章设置了特色图像,就可以返回该特色图像的ID,如果没有设置则返回null值。
语法
<?php get_post_thumbnail_id( $post_id ); ?>
参数
$post_id – 文章ID,默认为空
实例请参考本篇文章:
wp_get_attachment_image_src()函数
1 ??一、修改文章页面模板single.php
如何在WordPress中每篇文章的末尾添加原文链接?
使用WordPress建站的朋友,若想要添加“原创文章若转载,请注明本文链接:”,实际上非常简单。
这里就分享2种在WordPress文末添加本文链接URL的方法。
在WordPress主题模板文件中,打开single.php,搜索以下PHP代码:
<?php the_content(); ?>
这行PHP代码的下面,添加以下PHP代码 ▼
<p>原创文章如转载,请注明本文链接: <a href="<?php the_permalink() ?>" title="<?php the_title(); ?>"><?php the_permalink(); ?></a></p>
建议这种方法,不仅可以添加到博客日志页面的链接,包括feed也是可以。
打开主题文件夹中的function.php文件,并在最后添加以下PHP代码(复制和粘贴时请注意中文和英文标点符号):
<?php function feed_copyright($content) { if(is_single() or is_feed() or is_page()) { $content.= '<div> » 本文来自:<a title="我们网站" href="https://www.wordpressx.com/" target="_blank">我们网站</a> » <a rel="bookmark" title="'.get_the_title().'" href="'.get_permalink().'" target="_blank">《'.get_the_title().'》</a></div>'; $content.= '<div> » 本文链接地址:<a rel="bookmark" title="'.get_the_title().'" href="'.get_permalink().'" target="_blank">'.get_permalink().'</a> »英雄不问来路,转载请注明出处,谢谢。</div>'; $content.= '<div> » 有话想说:<a title="给我留言" href="'.get_permalink().'#respond" target="_blank">那就赶紧去给我留言吧.</a></div>'; $content.= '<div> » 欢迎加入我们网站的 Telegram 频道:<a rel="external nofollow" title="点此加入我们网站的 Telegram 频道" href="" target="_blank">https://www.wordpressx.com/go/tgchannel</a></div>'; } return $content; } add_filter ('the_content', 'feed_copyright'); ?>
希望我们网站( https://www.wordpressx.com/ ) 分享的《WordPress文章末端如何添加本文URL?WP原文链接PHP代码》,对您有帮助。
1 为什么网站无法显示带有google-adsense命名的图片?
WordPress为何无法显示带有google-adsense命名的图片?
在我们网站发布文章,想要揭露网上合法贷款骗局,首张图片命名中包含“google-ads”,一直无法显示该图片。
起初以为是空间商禁止了此类图片名称,就想到在本地电脑上做个测试。
在本地电脑测试后,发现WordPress文章编辑器仍然无法显示带有google-ads命名的图片:
google-ads.jpg
google-adsense.jpg
google-ads.png
google-adsense.png
在前台也无法显示此类图片。
多想想为什么,也许就会想到答案。
突然想到,是因为不希望错误点击自己的AdSense广告,索性启用了广告屏蔽插件,不料竟然连带有google-ads命名的图片也自动屏蔽了。
所以为了避免已启用广告屏蔽插件的访客,无法查看显示带有google-ads命名的图片,建议不要以“google-ads”作为图片名称。
不以“google-ads”作为图片名称,重命名为其它名称即可。
例如:将图片重命名为“ggads
”或“gg-adsense
”。
在此做个记录,以免忘记犯错又浪费时间了。
顺便提醒所有使用WordPress建站的朋友,需要注意避免带有“google-ads
”或“google-adsense
”之类命名的图片。
扩展阅读:
WordPress外链特色图片插件:Featured Image from URL
WordPress如何添加外链特色图片?Featured Image from URL插件设定虽然用WordPress建站有很多优势,但是在WordPress默认的媒体库,并不是那么好用:上传图片会自动裁剪生成各种尺寸……
希望我们网站( https://www.wordpressx.com/ ) 分享的《WordPress为何无法显示带有google-adsense命名的图片?》,对您有帮助。