分类目录归档:wordpress

WordPress插件开发实例教程-版权插件

本文记录WordPress插件开发实例过程, 本文以版权显示为例子进行

说明:本教程仅限学习,高手请绕道

开发程序:WordPress 3.9-RC1

使用主题:Twenty Fourteen

在开始之前,需要注意三件事情

I、给插件取一个个性化的名字,越个性化越好,以防和其他插件重名冲突。

II、代码里面,一定要包含注释,不为自己,也要为想修改你代码的别人想想。

III、尽量用最新版的 WordPress 进行开发和测试。

插件名称和插件结构

一般来说,都是在 wp-content\plugins 目录下建立一个文件夹,文件夹名就是插件的名称,我们插件名字为"copyright_plugin",文件结构如下。

\wp-content\plugins\copyright_plugin下有copyright_plugin.php和readme.txt

这里的 readme.txt 文件中包含了一些插件的介绍,使用说明等信息,主要是提交到 WordPress 官方网站时候用到的,可以参考他们给的模板 http://wordpress.org/extend/plugins/about/readme.txt,另外还有插件截图预览的功能,需要另外添 加图片,但是我们现在是练习,不需要提交到官网,所以暂时先不涉及这些。

插件的核心

总的来说,插件的核心是两个 function,用来添加 Hooks(中文译为钩子)

add_action ($hookname, $callbackfunction)
add_filter ($hookname,$callbackfunction)

这两个方法相当重要,几乎所有的插件都要用到他们。

Actions,我理解就是 wordpress 核心代码预留的一些特殊的切入点,或者说是在执行一些特定事件时候发生,例如文章发布时,或者访客留言时触发。
Filters,应该就是 wordpress 执行时,对数据传输过程的一种过滤机制,例如当文章保存到数据库的过程,或者文章从事数据库中取出,展现到浏览器中的这个过程。

我们今天要制作的插件,应该是用 Filters,因为我们要在文章显示在浏览器之前,在最后面加上一段字符窜,用来显示版权信息,后面添加菜单项的时候,也要用到 Actions。

插件概要信息

用文本编辑器打开 copyright-plugin.php 文件,输入如下信息:

<?php  
/*
Plugin Name: Copyright plugin
Plugin URI: http://www.xxxx.com/plugins/
Description: 此插件将在文章正文最下面,显示一行版权信息
Version: 1.0.0
Author: xcxc
Author URI: http://www.xxxx.com/
License: GPL
*/
?>

保存好文件,然后登录 WordPress 后台,打开插件菜单,应该就可以看到这个插件,已经显示在插件列表里面了,并且可以启用这个插件试试,不过没有任何效果,因为到目前为止,这个插件还没有实现任何功能。

为插件实现功能

修改copyright_plugin.php

<?php  
/*
Plugin Name: Copyright plugin
Plugin URI: http://www.xxxx.com/plugins/
Description: 此插件将在文章正文最下面,显示一行版权信息
Version: 1.0.0
Author: xcxc
Author URI: http://www.xxxx.com/
License: GPL
*/
 
/* 此插件将在文章正文最下面,显示一行版权信息 */ 
function display_copyright() {  
    return "<p style='color:red'>本站点所有文章均为原创,转载请注明出处!</p>";  
}  
?>

保存好这个文件,然后打开正在用的主题文件夹,打开index.php 文件夹,找到 get_template_part( 'content', get_post_format() ); 并在下面添加如下代码

if(function_exists('display_copyright')) {  
    echo display_copyright();  
}  

function_exists 是判断 display_copyright 函数是否存在,因为当插件停用的时候,主题代码里面是找不到这个函数的,所以要判断一下,防止出错。

然后在 wordpress 后台启用该插件,再打开首页看看效果吧!

至此,这段代码,应该可以勉强算是一个插件了。之所以说勉强,是因为这个插件存在一个问题,需要手工去修改主题代码,如果用户换了主题的话,需要在新主题里面再次修改代码,这个不好。

改良插件

还记得我们前面说过的 Hooks (钩子)吗,我们要开始用 Filter 钩子了!

代码修改copyright_plugin.php如下:

<?php  
/*
Plugin Name: Copyright plugin
Plugin URI: http://www.xxxx.com/plugins/
Description: 此插件将在文章正文最下面,显示一行版权信息
Version: 1.0.0
Author: xcxc
Author URI: http://www.xxxx.com/
License: GPL
*/
add_filter( 'the_content',  'display_copyright' );  
 
/* 这个函数在日志正文结尾处添加一段版权信息,并且只在 首页 页面才添加 */ 
function display_copyright( $content ) {  
    if( is_home() )  
        $content = $content . "<p style='color:red'>本站点所有文章均为原创,转载请指明出处!</p>";  
 
    return $content;  
}  
?>

参看以上代码,其中 the_content 是钩子的名字,display_copyright 是回调函数名称。这样一来,只要启用插件就可以实现功能,无需去修改主题了,请把刚才在index.php 文件中添加的代码删掉,然后启用插件,看看效果吧,显示效果应该是一样的,无论怎么换主题,还是会自动显示版权信息。

is_home是判断是不是主页

更进一步

至此一个真正的插件算是完成了。但是此插件将版权信息直接写在代码里,如果用户想自定义版权信息的话,需要修改插件的源代码,仍然不方便,所以此插件仍需改进。其实,我们可以在 WordPress 后台中为插件单独添加一个菜单和页面,用户可以在这里来自定义设置设置版权信息,信息可以保存在数据库里面。

先附上完整代码,后面会做说明

<?php  
/*
Plugin Name: Copyright plugin
Plugin URI: http://www.xxxx.com/plugins/
Description: 此插件将在文章正文最下面,显示一行版权信息
Version: 1.0.0
Author: xcxc
Author URI: http://www.xxxx.com/
License: GPL
*/

/* 注册激活插件时要调用的函数 */ 
register_activation_hook( __FILE__, 'display_copyright_install');   

/* 注册停用插件时要调用的函数 */ 
register_deactivation_hook( __FILE__, 'display_copyright_remove' );  

function display_copyright_install() {  
    /* 在数据库的 wp_options 表中添加一条记录,第二个参数为默认值 */ 
    add_option("display_copyright_text", "<p style='color:red'>本站点所有文章均为原创,转载请注明出处!</p>", '', 'yes');  
}

function display_copyright_remove() {  
    /* 删除 wp_options 表中的对应记录 */ 
    delete_option('display_copyright_text');  
}

if( is_admin() ) {
    /*  利用 admin_menu 钩子,添加菜单 */
    add_action('admin_menu', 'display_copyright_menu');
}

function display_copyright_menu() {
    /* add_options_page( $page_title, $menu_title, $capability, $menu_slug, $function);  */
    /* 页名称,菜单名称,访问级别,菜单别名,点击该菜单时的回调函数(用以显示设置页面) */
    add_options_page('Set Copyright', 'Copyright Menu', 'administrator','display_copyright', 'display_copyright_html_page');
}

function display_copyright_html_page() {
    ?>
    <div>  
        <h2>Set Copyright</h2>  
        <form method="post" action="options.php">  
            <?php /* 下面这行代码用来保存表单中内容到数据库 */ ?>  
            <?php wp_nonce_field('update-options'); ?>  
 
            <p>  
                <textarea  
                    name="display_copyright_text" 
                    id="display_copyright_text" 
                    cols="40" 
                    rows="6"><?php echo get_option('display_copyright_text'); ?></textarea>  
            </p>  
 
            <p>  
                <input type="hidden" name="action" value="update" />  
                <input type="hidden" name="page_options" value="display_copyright_text" />  
 
                <input type="submit" value="Save" class="button-primary" />  
            </p>  
        </form>  
    </div>  
<?php  
}  

add_filter( 'the_content',  'display_copyright' );  
 
/* 这个函数在日志正文结尾处添加一段版权信息,并且只在 首页 页面才添加 */ 
function display_copyright( $content ) {  
    if( is_home() )  
        $content = $content . get_option('display_copyright_text'); 
 
    return $content;  
}  
?>

说明:

以下代码自己要是在启用插件时和停用插件时调用,注释中已经写得很详细了。

/* 注册激活插件时要调用的函数 */ 
register_activation_hook( __FILE__, 'display_copyright_install');   

/* 注册停用插件时要调用的函数 */ 
register_deactivation_hook( __FILE__, 'display_copyright_remove' );  

function display_copyright_install() {  
    /* 在数据库的 wp_options 表中添加一条记录,第二个参数为默认值 */ 
    add_option("display_copyright_text", "<p style='color:red'>本站点所有文章均为原创,转载请注明出处!</p>", '', 'yes');  
}

function display_copyright_remove() {  
    /* 删除 wp_options 表中的对应记录 */ 
    delete_option('display_copyright_text');  
}

添加菜单和页面的代码如下:

if( is_admin() ) {
    /*  利用 admin_menu 钩子,添加菜单 */
    add_action('admin_menu', 'display_copyright_menu');
}

function display_copyright_menu() {
    /* add_options_page( $page_title, $menu_title, $capability, $menu_slug, $function);  */
    /* 页名称,菜单名称,访问级别,菜单别名,点击该菜单时的回调函数(用以显示设置页面) */
    add_options_page('Set Copyright', 'Copyright Menu', 'administrator','display_copyright', 'display_copyright_html_page');
}

至此,已经可以在后台看到菜单项了,但是点击的话,还会出错,因为还没有添加对应的页面(如何自定义添加后台菜单位置

下面开始添加页面,主要代码如下:

function display_copyright_html_page() {
    ?>
    <div>  
        <h2>Set Copyright</h2>  
        <form method="post" action="options.php">  
            <?php /* 下面这行代码用来保存表单中内容到数据库 */ ?>  
            <?php wp_nonce_field('update-options'); ?>  
 
            <p>  
                <textarea  
                    name="display_copyright_text" 
                    id="display_copyright_text" 
                    cols="40" 
                    rows="6"><?php echo get_option('display_copyright_text'); ?></textarea>  
            </p>  
 
            <p>  
                <input type="hidden" name="action" value="update" />  
                <input type="hidden" name="page_options" value="display_copyright_text" />  
 
                <input type="submit" value="Save" class="button-primary" />  
            </p>  
        </form>  
    </div>  
<?php  
}

现在再去点击刚才新加的菜单,可以显示出来一个页面了,我们可以在这里设置版权信息文本。

另外还有如下代码要修改

/* 这个函数在日志正文结尾处添加一段版权信息,并且只在 首页 页面才添加 */ 
function display_copyright( $content ) {  
    if( is_home() )  
        $content = $content . get_option('display_copyright_text'); 
 
    return $content;  
}

将原来的静态化文本,改成动态的,之所以要这么改,是因为我们已经将数据存到数据库里面了,这里要从数据库里面取出数据。

来源:http://www.cnblogs.com/xcxc/p/3664408.html

WordPress 优化Title、Description和Keywords

不 少童鞋都喜欢安装诸如All in one seo 这样的优化插件,其实,这样的WordPress插件无非就是优化 Title,Meta的Description和Keywords。当然了,有不少免费主题在初期开发的时候,都没有优化Description和 Keywords。

Title 优化

Title 的优化很简单,只要使用下面的代码替换header.php文件中默认的Title调用代码就可以啦:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<title><?php
	global $page, $paged;
	$site_description = get_bloginfo( 'description', 'display' );
 	if ($site_description && ( is_home() || is_front_page() )) {
		bloginfo('name');
		echo " - $site_description";
	} else {
		echo trim(wp_title('',0));
		if ( $paged >= 2 || $page >= 2 )
			echo ' - ' . sprintf( __( '第%s页' ), max( $paged, $page ) );
		echo ' | ' ;
		bloginfo('name');
	}
?></title>

以上代码的特色:

1.如果设置了网站副标题,就像是副标题:倡萌的自留地 - 专注于WordPress主题开发

2.如果文章或存档目录有分页,显示分页:WordPress 优化 Description和Keywords - 第2页 | 倡萌的自留地

Description和Keywords优化

使用下面的代码替换header.php文件中默认的Description和Keywords调用代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php if (is_home() || is_front_page())
	{
	$description = "输入首页的描述文字";
	$keywords = "输入首页的关键词";
	}
	elseif (is_category())
	{
	$description = strip_tags(trim(category_description()));
	$keywords = single_cat_title('', false);
	}
	elseif (is_tag())
	{
	$description = sprintf( __( '与标签 %s 相关联的文章列表'), single_tag_title('', false));
    $keywords = single_tag_title('', false);
	}
	elseif (is_single())
	{
     if ($post->post_excerpt) {$description = $post->post_excerpt;} 
	 else {$description = mb_strimwidth(strip_tags($post->post_content),0,110,"");}
    $keywords = "";
    $tags = wp_get_post_tags($post->ID);
    foreach ($tags as $tag ) {$keywords = $keywords . $tag->name . ", ";}
	}
	elseif (is_page())
	{
	$keywords = get_post_meta($post->ID, "keywords", true);
	$description = get_post_meta($post->ID, "description", true);
	}
	?>
<meta name="keywords" content="<?php echo $keywords ?>" />
<meta name="description" content="<?php echo $description?>" />

用上述的方法,Keywords就是文章的tags,Description是发表日志时的摘要,如果没有添加摘要,就是该文章截取110个字作为摘要。

由于Page页面不支持填写标签tag和摘要,所以借助自定义字段来输出关键词和描述。使用字段 keywords 添加关键词,使用字段 description 添加描述文字。

注:本文的代码最后更新于 2013-4-24。

WP2PCS插件——用百度网盘备份媒体资源

百度网盘在2012年上线了PCS服务,其实这就相当于开放了API了,而无论是哪个网盘,在开放API后不免会被各大技术宅们进行一番折腾,而今天就给大家推荐来自某民间团队的基于百度网盘的WordPress插件——WP2PCS!

那 么这个插件有什么用呢?这个插件的主要功能就是将网站的数据定时备份到百度网盘,并且将媒体资源托管到百度网盘,至此就不用担心媒体资源的存储问题。而同 时解决的还有水印的问题,因为在以前,中小站长为了保证视频资源加载的速度和稳定性,大多把视频资源上传到优酷,土豆等专业的视频分享网站,而上传到这些 网站虽稳定性和速度有了保证,但也意味着辛辛苦苦做的视频要被打上水印,这使得不少站长都十分郁闷(至少我的好友都这样),好了啦!废话不多说了,下面是 正题时间。

官方网站:点击直达

插件分为个人标准版、开发创意版、企业专业版,而不同版本有不同的针对人群,普通站长的话推荐使用个人标准版,而本篇文件也将使用个人标准版进行使用演示。

本插件的不适合使用的范围:

* 超大型网站

* 开启MULTISITE的多站点网站

* 网站空间剩余不足三分之一

* 没有读写权限或读写权限受限制的空间

* 服务器memory limit, time limit比较小的

* 服务器PHP不支持ZipArchive类

* 服务器主机在外国的,会有网络延迟,或因为某些原因,导致无法使用

插件的使用方法较简单,这里就简单的说一下就好了。

 

首先第一步,获得百度的授权

选择保存在自己的网盘吧! 托管于第三方多少有点不放心啊!然后就是登录百度账号,然后确认授权。而如果你是默认自动登录的话,可能会出现以下提示:

 Fatal error: Call to undefined function wp_log() in /home/ltoproco/public_html/wp-content/plugins/wp2pcs/wp2pcs.php on line 179

如果遇上以上问题,只要重新进入插件设置页面即可!

授权成功后,会看到网盘的空间使用量和一些设置选项卡,别急,我会一个个的讲的!

定时备份

首先是定时备份,定时备份这类的插件在WordPress中可谓是数不胜数了,但是备份到百度网盘的速度和稳定性明显比较高啊!

这 里的选项一般按自己的需要选择,而提示一下大家,此备份过程是打包后再上传到百度网盘去,这个过程需要消耗一定的流量,大家根据情况酌情选择,而由于要上 传的原因,所以海外主机什么的多少有点蛋疼,如果是海外主机建议备份到DropBox中。备份完成后,在百度网盘的相应目录可以看到压缩包。 (P.S:apps目录即为百度网盘中我的应用数据目录)

增量备份

增量备份就是通过对文件检查,只上传经过修改的文件, 已经备份过的,但没有发生变化的文件不进行备份,从而节省了大量资源,不过默认的10s一次的备份频率实在是太频繁了,强烈建议大家把频率改为60s一 次,但频率还是很高的,所以对于小型VPS和共享的虚拟主机并不建议开启该功能。选项与定时备份并无太大差别,这里就不赘述了!

PCS存储

最后终于是重点了,但是看着好像有很多选项,而实际上你需要设置的只有“使用网盘中的哪个目录”这个选项而已,其他的依照默认即可。而选择了这个目录后,你就可以在网站中调用这个目录下的图片、音频和视频等的附件。

而如果要在网站中添加百度网盘的媒体资源的话,在“添加媒体”中有一个“百度网盘”的选项,在那里可以看到网盘中已有的附件,也可以在该页面直接上传。

来源:http://www.xnces.com/wp2pcs.html

WordPress插件WP2PCS-SY备份数据到网盘

WP2PCS-SY是基于WP2PCS插件修改而来,在原版本的基础上取消了外链,另增加了新的功能,并做了完善, 主要功能就是把WordPress和网盘(PCS,个人云存储)连接在一起的插件。它的两项基本功能就是:将wordpress的数据库、文件备份到网盘,以防止由于过失而丢失了网站数据;把网盘作为网站的后备箱,存放图片、附件,解决网站空间不够用的烦恼,这个时候,你可以在网站内直接引用网盘上的文件,并具有防盗链功能。
WP2PCS-SY将你的WordPress定时备份到百度网盘,把百度网盘作为附件存储空间,解决你的网站后顾之忧。(本插件不适合用于大型网站文件的备份,如GB级数据的备份)

WP2PCS官方网站 http://www.wp2pcs.com
WP2PCS-SY官方网站:http://syncyhome.duapp.com

与原版对比修改内容如下:

1、修改了授权模式,采用自有APIkey的时候不会再向第三方网站传输APIkey和 securtkey,直接和百度服务器通信,减少了泄露Securtkey的风险;使用wp2pcs-sy的APIkey的话刷新码也存储在本地 (wp2pcs-sy承诺永不存储用户的refreshtoken和accesstoken),并定期刷新accesstoken,不用再手动刷新 accesstoken;
2、在多媒体下面增加了一个百度网盘的菜单,可以浏览百度网盘中上传目录下的文件,不用再到编辑文章页面才可以浏览到图片等,同时也可以通过此页面上传单个文件;
3、多媒体-百度网盘和编辑文章插入图片的页面显示的图片全部是图片的缩略图(原版本中获取的是完整图片文件),加快了图片的浏览;
4、增加了浏览网盘文件时的排序功能,可按修改时间倒排或顺排、按文件名倒排或顺排;
5、增加了文件名对特殊字符及空格的支持,文件名可支持除PCS规定不能使用的字符外的所有字符;
6、取消了外链功能,采用直链也不存在泄露accesstoken的风险;
7、增加了普通文件、mp3、通用媒体文件的缓存功能;
8、增加了对缓存文件清理的功能;
9、增加了防盗链功能;
10、优化了数据库备份功能,原版本中在BAE上备份很难成功,优化后很少失败;
11、修复了原版本中下载文件失败的bug;
12、优化了在加载下一页图片时失败,导致下一页按钮不可见的问题;
13、所有功能免费开放。

安装方法:

1、把wp2pcs-sy文件夹上传到/wp-content/plugins/目录
2、在后台插件列表中激活它
3、在“插件-WP2PCS-SY”菜单中,点击授权按钮,等待授权跳转在授权过程中,如果你已经登录了百度账号,会直接跳转;如果没有登录百度账号,会要求你登录,登录之后一定要勾选同意授权网盘(PCS)服务,否则无法使用插件中的服务。
4、如果授权成功,你会进入到插件的使用页面。
5、初始化所有信息。
6、如果不能正常访问网盘,点击重新授权按钮重新授权。
7、如果在BAE上备份不成功,可修改wordpress根目录下的wp-cron.php,在文件开头增加语句“set_time_limit(0);”看能否正常备份。

下载地址:

本地下载:http://syncyhome.duapp.com/index.php/dlfile/wp2pcs-sy.zip
从WordPress官网下载:https://wordpress.org/plugins/wp2pcs-sy/

下面的图片就是存储在PCS上的。screenshot-1.jpgscreenshot-2.jpgscreenshot-3.jpgscreenshot-4.jpgscreenshot-5.jpg

 

来源:http://syncyhome.duapp.com/index.php/tag/wordpress/

WordPress 相关文章插件 – Yet Another Related Posts Plugin

来源:http://www.neoease.com/yet-another-related-posts-plugin/

相关文章在博客中能够引导用户访问更多可能感兴趣的文章, 不仅增加了用户粘度, 对用户体验的提高, 也是 SEO 内链优化的重要一环.

大概两年前吧, 我开始使用 Yet Another Related Posts Plugin (YARPP) 这款相关文章插件, 与其他类似插件比较, 它有很多优点, 也有一些问题, 本文我会介绍一下这些优缺点和提供一些使用建议.

为什么选择 YARPP 相关文章插件?

WordPress 的相关文章插件选择很多, 但做得好的没几个. 我原本用的是另一款插件: WordPress Related Posts.

WordPress Related Posts 的原作者是国内知名博客我爱水煮鱼 (现在已经卖给了一老外开发), 我也贡献过一些代码, 用了好几个年头了, 而且我发布的所有主题都默认支持这款插件. 当时这款插件的问题是相关文章不精准, 自定义程度低, 所以我换了...

YARPP 的卖点正是 WordPress Related Posts 的不足, 页面结构和相关特征高度的自定义. 界面上, 你可以使用默认的模板和简单的调整, 或者选择自己编写写的模板, 在 $post 对象可用的数据项中, 基本你想将界面做成什么样子都可以.

相关文章模板

而在筛选相关文章的功能上更是强大, 用户可以对相关因子 (如: 标题, 内容, 标签和分类等) 进行给予不同的权值.

相关文章特征因子

相比于其他欧美开发者制作的相关组件, 因为 YARPP 的作者是个日本人, 基本上对汉字的支持也非常好, 适合国人使用.

YARPP 相关文章插件的缺点

YARPP 功能是强大了, 但操作也更加复杂, 很难实现安装完即可使用, 必须做一些设定, 尽管这不难. 借 Denis (我爱水煮鱼的作者) 的话: 多数用户看到整个面板的选项就可能将插件卸载掉了. 另外, 因为相关因子较多, 如果网站的文章少, 会匹配不到或者是能匹配到少量的文章.

是不是文章多了就比较好? 也不一定, 插件需要为相关文章生成缓存数据, 如果设置不当加之文章太多就会宕机. 当然, 万篇以内应该是没问题的. 而现在 WordPress Related Posts 为了解决相关文章不精准的问题, 也开始使用类似的缓存方式, 同样不能避免这个问题.

使用 YARPP

下载和安装

  1. 插件页面下载.
  2. 解压上传到 {WordPress 目录}/wp-content/plugin/ 目录.
  3. yarpp-templates 目录内的 PHP 文件拷贝到正在使用的主题根目录.
  4. http://{你的网址}/wp-admin/plugins.php 激活插件.

配置插件

进入 Settings > Related Posts (YARPP) 进行插件配置, 我相信一般人都可以看懂. "Display options for your website" 中有几点需要注意的:

  1. Automatically display 这里是选择自动加载的选项, 如果勾选, 则自动在文章后面追加相关文章列表.
  2. 最新的一些版本, 插件已经支持带缩略图的相关文章, 但需要你的主题本身支持 Featured Images 功能.
  3. 如果选择自定义模板, 请确定在主题根目录存在以 yarpp-template- 作为前缀命名的 PHP 文件. 你可以在插件的 yarpp-templates 目录找到这些文件.

后话

我这里建议刚入门的 WordPress 用户还是使用 WordPress Related Posts 比较好, 容易上手, 也避免找不到相关文章; 而追求更精准更可控的那些整天折腾的用户, YARPP 更加适合.

如果主题支持 Featured Images, 最新版本的 YARPP 的已经支持带缩略图的展现模式了. 如果你的主题不支持 Featured Images 功能, 也可以结合《WordPress 缩略图的方法》提及的方法制作带缩略图的插件模板.