鲍成龙
你怕不怕,这辈子就是上辈子所说的下辈子?
鲍成龙

相信大家都知道插件的安装文件在什么地方吧,没错就在WP-Content->plugins里面,我们所安装的插件都存放在了这个文件夹里面。当我们刚开始搭建好WordPress网站的时候,里面会默认提供两个插件,一个是Akismet(过滤垃圾评论插件)和一个hello插件(显示歌词的插件)。我们可以打开hello.php这个文件,这个插件相当于我们制作插件的入口,通过查看里面的内容,就可以知道创建一个插件的方法。如下:

<?php
/**
 * @package Hello_Dolly
 * @version 1.6
 */
/*
Plugin Name: Hello Dolly
Plugin URI: http://wordpress.org/plugins/hello-dolly/
Description: This is not just a plugin, it symbolizes the hope and enthusiasm of an entire generation summed up in two words sung most famously by Louis Armstrong: Hello, Dolly. When activated you will randomly see a lyric from <cite>Hello, Dolly</cite> in the upper right of your admin screen on every page.
Author: Matt Mullenweg
Version: 1.6
Author URI: http://ma.tt/
*/
// 上面分别是 插件的名称,插件URL地址,插件描述,插件作者,插件版本,作者地址. 这些内容使用 '/*  */' 注释符号括住

这里要注意的是你创建的插件名称和插件文件夹名称必须是唯一的,独一无二的,这样避免与其他插件发送冲突。可以去Google或者百度先验证一下这个名字到底是不是独一无二的。还有就是你的取的插件名字得让别人明白你的插件是干什么的,文件夹名称不能使用中文名称,下面就简单的说一下流程。

首先你需要考虑所制作插件的复杂度,如果很简单可以直接创建一个文件,如果涉及的文件较多,需要创建一个文件夹。不管哪种需要名称的唯一性,比如创建一个插件文件夹名为my_plugin,然后在文件中创建下面的信息。

/**
 * @package Hello_Dolly
 * @version 1.6
 */
/*
Plugin Name: My Plugin
Plugin URI: http://www.myplugin.com
Description: 我制作的第一个WP插件
Author: myname
Version: 1.0
Author URI: http://www.cnblogs.com/fxmbz
*/

标准的插件信息至少要有插件名称,这样WordPress才能识别你的插件。其他信息将显示在控制面板插件管理页面中。 标准插件信息对各行顺序没有要求。 创建好之后你的后台便会出现你刚刚创建的插件。这样你的插件就算创建成功了,还有一般在插件信息的下面可以添加版权信息。

/*
  Copyright 年份  作者名  (email : 你的邮箱)
  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2 of the License, or
  (at your option) any later version.
  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.
  You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 */

如果大家想把插件提交到WordPress官网(插件提交与推广参考:https://codex.wordpress.org/Plugin_Submission_and_Promotion),或者给用户有一个很好的说明。可以添加一个名称为 Readme.txt 的文件。里面可以介绍插件的功能、安装方法、使用说明、适用的WordPress版本、插件更新信息等。

插件的创建还是比较容易的。大家可以根据自己的习惯和需求添加一些其它内容,比如可以写一个html页面专门来介绍你的插件。还有就是在开始制作插件之前多多研究下已有插件的写法,每个插件的制作方法千变万化,如果有不错的方法要及时做好总结。这样我们在开发的过程中可以少走很多弯路。

本章总结:

1. WordPress插件,文件放置的目录:wordpress/wp-content/plugins/myplugin/myplugin.php

2. WordPress插件,的声明范本

3. 实现简单的插件功能(在wp后台头部输出自定义字符串)

/**
 * @package My Plugin
 * @version 1.6
 */
/*
Plugin Name: My Plugin
Plugin URI: http://www.cnblogs.com/fxmbz/p/4059678.html
Description: 我制作的第一个WP插件,这个插件就是在后台页面的头部显示一段文字
Author: zhangxl
Version: 1.0
Author URI: http://www.cnblogs.com/fxmbz
*/
/*
  Copyright 年份  作者名  (email : 你的邮箱)
  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2 of the License, or
  (at your option) any later version.
  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.
  You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 */
// 在wp后台头部输出自定义的字符串
add_action('admin_head', 'my_first_plugin');
function my_first_plugin() {
    echo '<h1>我制作的第一个WP插件</h1>';
}

 

鲍成龙

register_taxonomy()函数为自定义的Post type添加自定义分类功能。

语法结构

<?php register_taxonomy($taxonomy, $post_type, $args); ?> //为自定义的Post type添加自定义分类功能

参数

$taxonomy添加的类的名称

$post_type注册的自定义类型

$labels的详细参数

‘name’ – 分类的通用名称,通常为复数
‘singular_name’ – 此分类法的一个对象的名称
‘search_items’ – 搜索项目文字。默认为__(’搜索标签’)或__(’搜索类别’)
‘popular_items’ – 热门项目文字。默认为__(’热门标签’)或null
‘all_items’ – 所有项目文本。默认为__(’所有标签’)或__(’所有类别’)
‘parent_item’ – 父项文本。此字符串不用于非分层分类法,例如帖子标记。默认值为null或__(’父类别’)
‘parent_item_colon’ – 与结果相同parent_item,但:结尾为冒号,__(’父类别:’)
‘edit_item’ – 编辑项目文本。默认为__(’编辑标签’)或__(’编辑类别’)
‘update_item’ – 更新项目文本。默认为__(’更新标签’)或__(’更新类别’)
‘add_new_item’ – 添加新项目文本。默认为__(’添加新标签’)或__(’添加新类别’)
‘new_item_name’ – 新项目名称文本。默认为__(’新标签名称’)或__(’新类别名称’)
‘separate_items_with_commas’ – 分类项元框中使用逗号文本的单独项目。此字符串不用于分层分类法。默认值为__(’带逗号的单独标签’)或null
‘add_or_remove_items’ – 添加或删除项目文本,并在禁用JavaScript时在元框中使用。此字符串不用于分层分类法。默认值为__(’添加或删除标记’)或null
‘choose_from_most_used’ – 从分类法元框中使用的最常用文本中进行选择。此字符串不用于分层分类法。默认值为__(’从最常用的标签中选择’)或null
‘menu_name’ – 菜单名称文字。此字符串是提供菜单项的名称。默认为name的值

$args的详细参数

public- 否应在管理UI中公开此分类

  1. show_ui – 是否生成用于管理此分类的默认UI。默认值:如果未设置,则默认为public参数的值
  2. show_in_nav_menus – true使此分类在导航菜单中可供选择,默认值:如果未设置,则默认为public参数的值
  3. show_tagcloud – 是否允许Tag Cloud小部件使用此分类,默认值:如果未设置,则默认为show_ui参数的值
  4. 增加几个参数类型。分别是
    show_in_rest ,rest_baserest_controller_class。第一个参数可以理解为是否在 REST API 中显示,所以参数值必须是 true;第二个参数可以理解为通过哪个 REST API 显示数据,所以参数值最好是自定义文章类型的别名,且必须是英文或是拼音,比如:bbs;第三个参数可以理解为采用哪个 REST API 的控制类,所以参数值必须是使用文章的控制类:WP_REST_Posts_Controller。加上这三个参数项,基本上自定义文章类型的 REST API 就创建成功了。
<?php$labels = array(
        'name' => '产品分类',
        'singular_name' => '产品分类',
        'search_items' =>  '搜索产品' ,
        'all_items' => '所有产品' ,
        'parent_item' => null,
        'parent_item_colon' => null,
        'edit_item' => '编辑产品' ,
        'update_item' => '更新产品' ,
        'add_new_item' => '添加产品' ,
        'new_item_name' => '新产品',
        'separate_items_with_commas' => '' ,
        'add_or_remove_items' => '添加或删除',
        'choose_from_most_used' => '从经常使用的类型中选择',
        'menu_name' => '产品分类',
    );
    register_taxonomy(
        'products', array('product'),
        array(
            'labels' => $labels,
            'hierarchical' => true,
            'show_ui' => true,
            'query_var' => true,
        )
    );?>

前台调用

自定义分类法的分类列表页面模板文件是taxonomy.php或taxonomy-{taxonomy_slug}.php,taxonomy.php是所有自定义分类法默认调用的模板文件,taxonomy-{taxonomy_slug}.php则是指定自定义分类法调用的模板文件,比如本教程中创建的自定义分类法products,使用taxonomy-products.php文件即可指定调用。

TIPS

强调一点,添加过新的自定义分类之后一定要更新下固定连接,只需要点击保存设置就行,不然前台是调用不出来的。

 

鲍成龙

上网的时候我们会发现很多网站都有繁体版本,通过导航栏上的一个按钮就可以把网页上的文字从简体中文变成繁体中文。同时,通过浏览博客的访客地域统计发现有相当多的台湾以及香港地区的读者,而他们很可能不能识别大多数简繁体不同的中文,因此为博客添加一个简繁转换是非常必要的。虽然谷歌浏览器可以添加一个语言转换插件或者自带语言转换功能,但一来转换有时非常不稳定,可能出现服务器错误,而来并非所有访客都使用Chrome浏览器。因此我介绍的这个简繁转换,是通过js的方式实现的。下面我就以WordPress为例说明一下。

 

1、下载简繁转换js文件

 

下载地址:

[button url="https://baochenglong.cn/wp-content/uploads/2020/03/zh-cn-tw.zip" types="down"]zh-cn-tw[/button]

2、将下载的 zh-cn-tw.js 文件放置网站服务器一定目录下,例如我放在使用的主题的javascripts文件夹下

 

3、打开主题的 footer.php 文件,添加以下代码引入js

<script src="/zh-cn-tw.js"></script>

当然,src值是根据你放置js位置决定的

 

4、在所需要添加简繁转换按钮的地方加入以下代码

<a id="StranLink" class="class">繁體</a>

这个 id 一定要是 StranLink,class由自己决定,并可以自定义样式,或者也可以用一个 div 包围起来再自定义样式。

鲍成龙

有时候我们需要用到is_home()来判断是不是wordpress的首页,从而进行一些相关配置,但是有一点需要注意,当你的首页不是默认的index.php的时候,比如是在后台指定了一个页面。这种情况下is_home也会失效。

也就是说这样子的情况下就不能再用is_home来判断了。而是要用is_front_page来进行判断。is_front_page是判断当前页是不是指定的首页。

记录

 

鲍成龙
<script type="text/javascript">
setTimeout(function(){//黑衣探花定时器 
$(".jinsom-slider").css("display","none");//将图片的display属性设置为none
},
5000);//设置5000毫秒即5秒
</script>

鲍成龙
html{
 filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);
    -webkit-filter: grayscale(100%);
    -moz-filter: grayscale(100%);
    -ms-filter: grayscale(100%);
    -o-filter: grayscale(100%);
    filter: grayscale(100%);
    filter: gray;
}
鲍成龙

域名邮箱申请地址:http://ym.163.com/

 

路径:登陆模块→邮件配置

 

邮件主机:smtp.ym.163.com

 

普通端口:25

 

SSL端口:994

 

邮件授权码/密码:填写你的域名邮箱登陆密码即可

 

鲍成龙

 

the_time()和data()区别是返回类型不停,前者是void,后者是string。两者的使用方法基本相同。

WordPress The_time()的使用方法

代码示例1:

//wordpress the_time()函数 
<? php the_time('Y年n月j日'); ?>

 

输出效果:

2020年1月16日

the_time()函数的传入值里除了几个字母有讲究, 其它的内容可以完全自定义,下面是为大家总结的wordpress the_time()函数各参数的表示意义,请注意字母的大小写往往代表不同的含义

  • 参数z:    描述:天数                          示例:365
  • 参数Y:    描述:年份                          示例:2020
  • 参数y:    描述:年份                          示例:20
  • 参数W:    描述:周数                         示例:51
  • 参数w:    描述:星期                          示例:4
  • 参数T:    描述:时区                          示例:CST
  • 参数S:    描述:序列型数字的后缀      示例:st/th
  • 参数r:    描述:完整的日期时间        示例:Thu,16 Jan 2020 20:30:10 +0800
  • 参数O:    描述:时区                       示例:+0800
  • 参数n:    描述:月份                        示例:1
  • 参数M:    描述:月份                      示例:Jan
  • 参数m:    描述:月份                      示例:01
  • 参数l:    描述:星期                        示例:星期四
  • 参数A:    描述:上下午                   示例:AM/PM
  • 参数a:    描述:上下午                   示例:am/pm
  • 参数H:    描述:分钟                     示例:06
  • 参数h:    描述:分钟                     示例:6
  • 参数G:    描述:小时                    示例:06
  • 参数g:    描述:小时                    示例:6
  • 参数F:    描述:月份                    示例:一月
  • 参数D:    描述:星期                   示例:四
  • 参数j:    描述:日期                    示例:6
  • 参数d:    描述:日期                   示例:06

为了大家对以上参数的用法有个比较直观深入的了解,下面提供几个实例供大家参考:

1.怎样用Wordpress输出时间:年 月 日,

如:2020年1月16日:

//怎样用wordpress输出时间:年 月 日 
<?php the_time('Y年n月j日'); ?>

2.怎样用Wordpress输出时分秒时间:,

如:12:00:00:

//怎样用wordpress输出时分秒时间:
<?php the_time('G:i:s');?>

3.怎样用Wordpress输出星期几:

如:2020年1月16日星期四:

//怎样用wordpress输出星期几:
<?php the_time('Y年n月j日l') ;?>

注意

在最后还要强调一个问题,就是当你使用中文版的wordpress时,它会很智能的将你的某些时间参数转换成中文的输出方式,比如月份。有时我们可能并不需要这样智能的转换,而只是希望利用阿拉伯数字进行输出,那么应该怎么去解决这个问题呢?
其实解决问题的办法也不难,只是要求我们将时间函数的参数进行一些修改即可:
比如说我们原来输出月份的代码如下:

//这个输出结果时会自动将月份转换成中文
<?php the_time('M');?>

我们只需要将以上代码替换成下面这样就行了:

//修改后的代码
<?php echo date('M',get_the_time('U'));?>

WordPress时间函数 Data()

上面介绍了wordpress data()函数的使用方法,data函数的参数和the time相同,在此不一一赘述。需要提醒的还是:如果你要在网页中直接输出时间请用the_time(),如果需要调用时间,比如把它传给一个变量,写进数据库等等,就要使用data()了。

一句话:

<?php the_time() ?>等价于<?php echo data() ?>

鲍成龙

wordpress 移除用户角色添加新角色并赋予角色能力/权限,一看这个标题就知道是关于用户的,也就是说用户角色跟那些开放了用户注册登陆的站有关。WordPress 提供的 5 类用户角色与权限,除了管理员好使之外,其它角色很多时候都不好用。这时候我们就需要添加我们自己的用户角色,比如普通用户、VIP 用户等等。并且给它们赋予不同的权限,方便我们实现我们需要的业务逻辑。WordPress 也知道自己的角色与权限不够大家用,于是提供了相应的函数供我们 DIY。

移除角色

WordPress 自带的订阅者对我们几乎没有作用,因此可以考虑移除它,你也可以不移除。

remove_role($data)

参数是角色名字,WordPress 的角色名如下:

订阅者:subscriber

投稿者:contributor

作者:author

编辑:editor

管理员:administrator

比如移除订阅者:

remove_role( 'subscriber' );//移除订阅者

将代码放在主题的 functions.php 中即可。

 

添加角色

//添加普通用户角色
add_role('pt_user', '普通用户', array(
'read' => false, //读权限
'edit_posts' => false,//编辑权限
'delete_posts' => false, //删除权限));

 

这样就可以添加一个名为普通用户的角色,为了与上面 WordPress 自带的角色名形成对比,特意写成下面的形式:

普通用户:pt_user

同样将代码放在主题的 functions.php 中即可。

比如不让普通用户拥有查看部分内容,就不给普通用户赋予读权限,在使用时,只需判断用户是否具有读权限即可,如下

if ( is_user_logged_in()  && current_user_can( 'read' ) ) {
//有权限
}else{
//没有权限}


修改添加角色后,我们在后台可以看到目前拥有的角色,如下:

WordPress移除用户角色添加新角色并赋予角色能力/权限

另外,在移除了订阅者后,新用户注册将默认无身份,我们可以在给用户注册时指定用户角色来赋予新用户默认角色。具体请查看用户注册函数 WordPress 函数 wp_insert_user 注册新用户中的参数介绍。

 

修改角色

$user = new WP_User( $ID );
$user->set_role( 'pt_user' );


直接设置角色,将覆盖已拥有角色,WordPress 允许拥有多个角色!

鲍成龙

本文是“WordPress 路径相关函数总结”系列文章的最后一篇文章,在 讲完站点路径相关函数主题路径相关函数插件路径相关函数后,最后要讲讲的是 WordPress 中还有一组用define定义的常量代表路径。

WP_CONTENT_DIR

wp-content目录的服务器绝对路径,例如

/home/user/public_html/wp-content

 

WP_CONTENT_URL

wp-content目录的URI地址,例如

http://xxx.com/wp-content

WP_PLUGIN_DIR

插件目录的服务器绝对路径,例如

/home/user/public_html/wp-content/plugins

WP_PLUGIN_URL

插件目录的URI地址,例如

http://xxx.com/wp-content/plugins

TEMPLATEPATH

当前启用主题目录的服务器绝对路径,相当于get_template_directory()例如

/home/user/public_html/wp-content/themes/twentyeleven

STYLESHEETPATH

当前启用主题目录的服务器绝对路径,相当于get_stylesheet_directory(),与TEMPLATEPATH的区别在于如果使用child theme,该常量指向child theme目录。

 

鲍成龙

这一篇则是针对WordPress 插件的函数,对于开发WordPress 插件的开发者很有帮助.

 

plugins_url()

获取当前插件的目录的URI,例如一个插件位于/wp-content/plugins/myplugin下,该目录下放有插件的主文件名为myplugin.php,在myplugin.php中执行下面的代码,结果如下

echo plugins_url();
//输出:http://xxx.com/wp-content/plugins
echo plugins_url('',__FILE__);
//输出:http://xxx.com/wp-content/plugins/myplugin
echo plugins_url('js/myscript.js',__FILE__);
//输出:http://xxx.com/wp-content/plugins/myplugin/js/myscript.js

 

plugin_dir_url()

返回当前插件的目录URI,例如

echo plugin_dir_url( __FILE__ );
//输出:http://xxx.com/wp-content/plugins/myplugin/

注意结尾有反斜杠。

plugin_dir_path()

返回当前插件目录的服务器绝对路径,例如

echo plugin_dir_path( __FILE__ );
//输出:/home/user/public_html/wp-content/plugins/myplugin/

可以用来引用文件,例如

<?php
define( 'MYPLUGINNAME_PATH', plugin_dir_path(__FILE__) );
require MYPLUGINNAME_PATH . 'includes/class-metabox.php';
require MYPLUGINNAME_PATH . 'includes/class-widget.php';
?>

plugin_basename()

返回调用该函数的插件文件名称(包含插件路径)

例如在插件myplugin下的myplugin.php文件中调用该函数,结果如下

echo plugin_basename(__FILE__);
//输出:myplugin/myplugin.php

如果在myplugin/include/test.php文件中调用(test.php通过include引用到myplugin.php中),结果如下

echo plugin_basename(__FILE__);
//输出:myplugin/include/test.php

 

鲍成龙

这一篇则是针对WordPress 主题的函数,对于开发WordPress 主题的开发者很有帮助;相关函数也可以在WordPress 官方文档找到相应的更详细的用法。

还是以本站 http://xxx.com 为例子:

get_theme_root_uri()

获取存放主题的目录URI

echo get_theme_root_uri();
//输出:http://xxx.com/wp-content/themes

get_theme_root()

获取存放主题的目录的服务器绝对路径

echo get_theme_root();
//输出:<tt>/home/user/public_html/wp-content/themes</tt>

get_theme_roots()

获取主题目录的目录名称,如果你的主题目录是/wp-content/themes,则

echo get_theme_roots();
//输出:/themes

get_stylesheet_directory()

获取当前启用的主题目录的服务器绝对路径,例如

/home/user/public_html/wp-content/themes/twentyeleven

可以用来include文件,例如

<?php include( get_stylesheet_directory() . '/includes/myfile.php'); ?>

get_stylesheet_directory_uri()

获取当前启用的主题目录的URI,例如

echo get_stylesheet_directory_uri();
//输出:http:/xxx.com/wp-content/themes/twentyeleven

可以使用在需要主题目录URI的场合,例如图片

<img src="<?php echo get_stylesheet_directory_uri() ?>/images/1.png" alt="" title="" width="" height="" />

get_template_directory_uri()

如果当前启用的主题是一个child theme,该函数返回parent theme的主题目录URI,用法与get_stylesheet_directory_uri()类似。

get_template_directory()

如果当前启用的主题是一个child theme,该函数返回parent theme的主题目录的服务器绝对路径,用法与get_stylesheet_directory()类似。

get_template()

获取当前启用主题的主题目录名称,例如现在启用的主题为twentyeleven,则

echo get_stylesheet();
//输出:twentyeleven

 

get_stylesheet()

获取当前启用主题的主题目录名称,与get_template()的区别是,如果用了child theme,则返回child theme的目录名称。