分类
WordPress

WordPress中14个实用的函数【转】

WordPress临时API

set_transient(), get_transient(), delete_transient()

这个函数类似 于用于存储检索选项数据库表单的get_options()以及update_options()函数。 他们的主要区别在于,你可以给这个临时API函数传递一个时间参数,作为数据库输入的过期日。当参数显示的时间到达之后,输入会被移除。如果你需要缓存数 据或查询某个短期时间内的结果,这会是个相当有用的函数。

set_transient的参数:

set_transient($transient, $value, $expiration);

将某个值保留在数据库中一小时:

set_transient('the_name', $special_query_results, 60*60);

结果值:

$value = get_transient('the_name');

WordPress “定时任务”函数

wp_schedule_event(time(),?'hourly',?'my_schedule_hook');

如果你需要定时执行某段代码,像是检查RSS订阅、数据库备份或是重设数据库值等,就可以用到这个函数。这里有一个关于这个函数的英文教程。

WordPress HTTP API

wp_remote_get(?$url,?$args?=?array()?);

这是个用于检索网页内容的简单函数。函数把检索结果存储在一个数组里。你不仅可以得到网页的结果内容,还可以获取网页的页头信息和相应代码。

轻松获取RSS 订阅

$feed?=?fetch_feed(?$uri?);

fetch_feed是一个用来获取订阅内容的简单WordPress函数。这个函数可以检索、分析并自动缓存订阅内容。

WordPress邮件函数

wp_mail()  wp_mail(?$to,?$subject,?$message,?$headers,?$attachments?);

示例:

Example: $to = 'kriesi@gmail.com'; $subject = 'Hello Kriesi!'; $message = 'This message was sent by wordpress' $mail = wp_mail($to, $subject, $message); if($mail) echo 'Mail delivered';

相当简单实用的函数,利用这个函数你可以发送页头信息和附件、普通文本、HTML信息以及其他各种选项。

计时函数

human_time_diff( $from, $to )

这个函数显示出的时间效果不是普通的时间格式,而是“XXX发布于XXX小时前”这样。

WordPress get_comments函数

get_comments()

在评论循环外检索评论内容。

字符串验证

wp_kses($string, $allowed_html, $allowed_protocols);

如果你需要过滤不受信任的用户输入内容,wp_kses会是个很实用的函数。这个函数确保$string中只出现经许可的HTML元素名称、属性和属性值以及正常的HTML实体。

WordPress文本转换

wptexturize()

这个函数把常用的字符串转换成印刷时采用的正确符号,比如破折号、省略号等,有时也会为某些段落加上排版引号。

wpautop()

给字符串添加<p>标签

WordPress短码API

add_shortcode(), do_shortcode()

add_shortcode()可以快速为你的日志内容创建宏。假设你希望把日志里的某些内容包围在一个div块里,并且加上若干类和id,让你可以创建多个内容栏。你可以用HTML编辑器进行编辑,然后输入下面的内容:

<div class='one_third'>内容</div>

用PHP函数生成WordPress日志

wp_insert_post()

这个函数在数据库中插入文章页面和自定义文章类型。它会过滤变量并执行检查,补充日期/时间等缺失变量。如果用户可以通过你的网站前台提交内容,这个函数会相当有帮助。

用PHP函数生成WordPress评论

wp_insert_comment()

和wp_insert_posts类似,不过wp_insert_comment插入的是评论。

WordPress对象缓存

wp_cache_add(),? wp_cache_set(),? wp_cache_get(),? wp_cache_delete, wp_cache_replace(), wp_cache_flush

WP_Object_Cache是WordPress中用以缓存数据的类。

禁止执行WordPress任务

wp_die()

wp_die终止WordPress运行,显示HTML错误信息。

这个函数与PHP函数die()互为补充。HTML信息显示给用户。推荐仅在进程不能再继续时才使用该函数。

分类
WordPress

wordpress自带编辑器中编辑文章中的图片居中对齐

今天遇到的问题是,wordpress后台文章中插入一张图片,用编辑器对其按钮使它居中时,虽在后台编辑器中居中,但前台文章却没有在段落中居中,本文将解决这个问题。

后台编辑器规定图片对齐时,是给图片img标签添加了alignleft、aligncenter这样的class属性,因此我们必须通过对这几种样式进行规定才能实现这种简单的对其。我给出的规定css代码如下:

.post-content img.alignleft {float:left; margin:0 1em 1em 0}
.post-content img.alignright {float:right; margin:0 0 1em 1em}
.post-content img.aligncenter {display: block; margin-left: auto; margin-right: auto}
.post-content a img.alignleft {float:left; margin:0 1em 1em 0}
.post-content a img.alignright {float:right; margin:0 0 1em 1em}
.post-content a img.aligncenter {display: block; margin-left: auto; margin-right: auto}

其中.post-content是我用一个div把文章段落全部包含,你可以自己去掉或换成自己的亦可。

分类
WordPress

wordpress小工具制作前台后台全解析

wordpress主题制作中对边栏的处理一直是我们比较烦恼的,我们希望边栏的变化更多更复杂,今天我们就来具体讲解下wordpress边栏小工具的制作。

一、让你的主题显示小工具

有些相当简单的主题你会发现后台小工具功能竟然没有打开,边栏自然无法自己定义了。那么怎么让自己的主题支持小工具功能,前台又如何调用后台拖拽的小工具呢?如何让你的小工具多几个,可以自由安排小工具的位置呢?

1、让你的主题支持小工具功能

在新制作的主题文件functions.php中加入下面这段代码(注意,下文的代码均加入到该文件中,后文不提):

if(function_exists(‘register_sidebar’)){
register_sidebar(array(
‘name’=>’首页边栏’,
‘id’ => ‘home-sidebar’,
‘description’ => ”,
‘before_widget’ => ‘<div id=”%1$s”>’,
‘after_widget’ => ‘<div></div></div>’,
‘before_title’ => ‘<div><h3>’,
‘after_title’ => ‘</h3></div>’,
));
}

这样,你进入后台小工具页面的时候就会看到一个名称叫“首页边栏”的小工具挂件区,在这个区域内你可以放置多个小工具,同时在前台可以调用这个小工具区。(说明:前台调用的只能是工具区,而不是某个特定的小工具。)

这些字段我想你应该很容易从其英文名称中得知其用途,name指小工具挂件区的名称,id是等下在前台调用时要用到的挂件区标志,description是该挂件区的描述,后台中可以看到。before_widget/after_widget是前台显示每个小工具时放置在每一个小工具前后的html代码,before_title/after_title则是小工具标题前后的html代码。

到这里,在后台拖拽几个小工具到这个挂件区吧。

2、前台把小工具显示出来

我们用下面的代码再前台调用后台设置好的挂件区:

<?php if(is_active_sidebar(‘home-sidebar’))dynamic_sidebar(‘home-sidebar’); ?>

前文已经说到,我们将前文定义的挂件区id作为参数给dynamic_sidebar(),如果在前面你定义了多个id不同的挂件区,那么可以在前台修改这些参数,从而调用不同的挂件区,例如在首页调用id=home-sidebar的挂件区,在内容页调用id=post-sidebar挂件区。当然,为了让主题更完整,你应该考虑当挂件区没有放小工具的时候的情况,只需要加入else的情况即可。

通过上文,你的主题已经可以很完美的实现挂件的调用、显示,在不同的位置,不同的页面显示不同的挂件了。

二、自己制作一个小工具实现特定用途

wordpress默认的小工具虽然已经够用,但我们还是希望能增加一些新的小工具,例如调用随机文章的小工具,让我可以在首页边栏中间位置显示出来。虽然我们很多主题将自己编制的函数放置到主题文件中,但这样会使该区域的内容固定,不能让这个随机文章区域实现自我安排,还是不爽的,因此我们进行下面的工作,让我的随机文章功能成为一个小工具,可以在后台拖拽放置到特定位置。下文以我制作一个带头像评论列表为例,但中间缺失了文章数等,这部分请参看这篇文章

1、所有代码提前一览

我们将所有代码先列出来,放置到functions.php中,读者可以在读代码过程中自然领会怎么设计自己的小工具。

//添加最新评论小工具,需要插件wp-recentcomments支持,显示的内容在插件设置中设置,下面的函数只负责将评论插件转化为挂件,可以在小工具中自由放置
class RecentCommentsWidget extends WP_Widget
{
/*
** 构造函数
** 声明一个数组$widget_ops,用来保存类名和描述,以便在控制面板正确显示工具信息
** $control_ops 是可选参数,用来定义小工具在控制面板显示的宽度和高度
** 最后是关键的一步,调用WP_Widget来初始化我们的小工具
*/
function RecentCommentsWidget(){
$widget_ops = array(‘classname’=>’recent-comments’,’description’=>’显示带头像评论列表’);
$control_ops = array(‘width’=>250,’height’=>300);
$this->WP_Widget(false,’最新评论’,$widget_ops,$control_ops);
}

function form($instance){
$instance = wp_parse_args((array)$instance,array(‘title’=>’最新评论’));
$title = htmlspecialchars($instance[‘title’]);
echo ‘<p style=”text-align:left;”><label for=”‘.$this->get_field_name(‘title’).’”>标题:<input style=”width:200px;” id=”‘.$this->get_field_id(‘title’).’” name=”‘.$this->get_field_name(‘title’).’” type=”text” value=”‘.$title.’” /></label></p>’;
echo ‘<p>最新评论小工具,需要插件wp-recentcomments支持,显示的内容在插件设置中设置,下面的函数只负责将评论插件转化为挂件,可以在小工具中自由放置</p>’;
}

function update($new_instance,$old_instance){
$instance = $old_instance;
$instance[‘title’] = strip_tags(stripslashes($new_instance[‘title’]));
return $instance;
}

function widget($args,$instance){
extract($args);
$title = apply_filters(‘widget_title’,empty($instance[‘title’]) ? ‘&nbsp;’ : $instance[‘title’]);
echo $before_widget;
echo $before_title . $title . $after_title;
?>
<div><?php wp_recentcomments(); ?></div>
<?php
echo $after_widget;
}
}//评论列表小工具类结束
function RecentCommentsInit(){
register_widget(‘RecentCommentsWidget’);
}
add_action(‘widgets_init’,’RecentCommentsInit’);
//评论列表小工具结束

从上面的代码中你大致能分析出小工具制作的所有要素,接下来详细讲解下。(上面的这个挂件需要你安装插件wp-recentcomments,你将<div><?php wp_recentcomments(); ?></div>修改为你自己的内容,则前台显示为你修改的内容。)

2、构造小工具

构造一个小工具用到上面的类构造class RecentCommentsWidget extends WP_Widget{},类名可自定。

在该类中,总共有4个函数:RecentCommentsWidget()、form($instance)、update($new_instance,$old_instance)、widget($args,$instance)。

RecentCommentsWidget()

函数名可自定义,是用以对该小工具的名称、样式、描述进行定义的。如我的这个小工具名称“最新评论”描述“显示带头像评论列表”。你只需将这些抄过去即可,修改名称和描述。

form($instance)

在后台将该小工具拖拽到挂件区展开后你会看到该函数中规定的内容。我的这个小工具只是显示一个标题设置框和一段文字。

$instance = wp_parse_args((array)$instance,array(‘title’=>’随机文章’,’showPosts’=>10,’cat’=>0,’class’=>’randomPosts’));
$title = htmlspecialchars($instance[‘title’]);
$showPosts = htmlspecialchars($instance[‘showPosts’]);
$cat = htmlspecialchars($instance[‘cat’]);
$class = htmlspecialchars($instance[‘class’]);

如上,可以增加标题、显示数量、显示那些分类下的、显示的时候用什么样式名这些文本框,当然你可以增加自己的内容。总之你要理解这个函数是后台小工具展开时看到的内容即可。

update($new_instance,$old_instance)

更新form()设置的参数值,小工具展开后右下角有个保存按钮,就是用这个函数进行保存啦。照葫芦画瓢修改该函数吧。

widget($args,$instance)

前台显示,前台怎么显示form()中设置的这些值呢?就是用这个函数来控制啦。照葫芦画瓢,修改那几个echo 的内容就可以了,甚至你可以让一个小工具显示一句话,在这里自己编写就可以了。

3、注册小工具,最终完成小工具制作

虽然上面的过程让你已经了解小工具的前后台,但你会发现即使这样做了却得不到任何效果,因为你的小工具还没有注册呢。

function RecentCommentsInit(){
register_widget(‘RecentCommentsWidget’);
}
add_action(‘widgets_init’,’RecentCommentsInit’);

修改上面这几个参数为你自己的类和函数名,赶快到后台看看吧,是不是已经显示了该小工具,并可以拖拽了?自己慢慢消化,可以制作自己完美的边栏挂件啦。

分类
WordPress

基于jquery的wordpress经典下拉菜单

一直在研究wordpress后台菜单设置后前台如何显示出合适的效果,经过很长时间的探索,也没有找到好的方法,这里只是提供一个参考,希望朋友们可以完善并反馈给我。

1、下拉菜单代码部分

<?php wp_nav_menu(‘menu=主导航&theme_location=mainmenu&depth=0&container=&container_class=&menu_id=menu-main&menu_class=top-menu’); ?>

这个菜单代码出来的效果大致如下:

<ul id=”menu-main” class=”top-menu”><li id=”menu-item-345″ class=”menu-item menu-item-type-custom menu-item-object-custom current-menu-item current_page_item menu-item-home menu-item-345″><a href=”http://utubon.sinaapp.com/“>首页</a></li>
<li id=”menu-item-344″ class=”menu-item menu-item-type-custom menu-item-object-custom menu-item-344″><a href=”#“>虚拟机</a>
<ul class=”sub-menu”> <li id=”menu-item-346″ class=”menu-item menu-item-type-post_type menu-item-object-page menu-item-346″><a href=”http://utubon.sinaapp.com/?page_id=204“>业务合作</a></li> <li id=”menu-item-347″ class=”menu-item menu-item-type-post_type menu-item-object-page menu-item-347″><a href=”http://utubon.sinaapp.com/?page_id=202“>主题制定</a></li> <li id=”menu-item-348″ class=”menu-item menu-item-type-post_type menu-item-object-page menu-item-348″><a href=”http://utubon.sinaapp.com/?page_id=168“>关于本站</a></li> <li id=”menu-item-349″ class=”menu-item menu-item-type-post_type menu-item-object-page menu-item-349″><a href=”http://utubon.sinaapp.com/?page_id=199“>友情链接</a></li> <li id=”menu-item-350″ class=”menu-item menu-item-type-post_type menu-item-object-page menu-item-350″><a href=”http://utubon.sinaapp.com/?page_id=104“>标签云</a></li> <li id=”menu-item-351″ class=”menu-item menu-item-type-post_type menu-item-object-page menu-item-351″><a href=”http://utubon.sinaapp.com/?page_id=187“>留言板</a></li>
<li id=”menu-item-352″ class=”menu-item menu-item-type-post_type menu-item-object-page menu-item-352″><a href=”http://utubon.sinaapp.com/?page_id=2“>示例页面</a></li> <li id=”menu-item-353″ class=”menu-item menu-item-type-post_type menu-item-object-page menu-item-353″><a href=”http://utubon.sinaapp.com/?page_id=106“>网站地图</a></li> <li id=”menu-item-354″ class=”menu-item menu-item-type-post_type menu-item-object-page menu-item-354″><a href=”http://utubon.sinaapp.com/?page_id=178“>网站搜索</a></li> <li id=”menu-item-355″ class=”menu-item menu-item-type-post_type menu-item-object-page menu-item-355″><a href=”http://utubon.sinaapp.com/?page_id=203“>网站搭建</a></li> </ul> </li> <li id=”menu-item-333″ class=”menu-item menu-item-type-custom menu-item-object-custom menu-item-333″><a href=”#“>云计算</a> <ul class=”sub-menu”>
<li id=”menu-item-334″ class=”menu-item menu-item-type-taxonomy menu-item-object-category menu-item-334″><a href=”http://utubon.sinaapp.com/?cat=6“>乌徒帮杂言</a></li> <li id=”menu-item-335″ class=”menu-item menu-item-type-taxonomy menu-item-object-category menu-item-335″><a href=”http://utubon.sinaapp.com/?cat=14“>系统核心</a></li> <li id=”menu-item-336″ class=”menu-item menu-item-type-taxonomy menu-item-object-category menu-item-336″><a href=”http://utubon.sinaapp.com/?cat=9“>功能函数</a> <ul class=”sub-menu”> <li id=”menu-item-376″ class=”menu-item menu-item-type-taxonomy menu-item-object-category menu-item-376″><a href=”http://utubon.sinaapp.com/?cat=7“>二次开发</a></li> <li id=”menu-item-377″ class=”menu-item menu-item-type-taxonomy menu-item-object-category menu-item-377″><a href=”http://utubon.sinaapp.com/?cat=5“>WP插件</a></li>
<li id=”menu-item-378″ class=”menu-item menu-item-type-taxonomy menu-item-object-category menu-item-378″><a href=”http://utubon.sinaapp.com/?cat=8“>入门操作</a></li> <li id=”menu-item-379″ class=”menu-item menu-item-type-taxonomy menu-item-object-category menu-item-379″><a href=”http://utubon.sinaapp.com/?cat=4“>WP主题</a></li> <li id=”menu-item-380″ class=”menu-item menu-item-type-taxonomy menu-item-object-category menu-item-380″><a href=”http://utubon.sinaapp.com/?cat=13“>空间域名</a></li> </ul> </li> <li id=”menu-item-337″ class=”menu-item menu-item-type-taxonomy menu-item-object-category menu-item-337″><a href=”http://utubon.sinaapp.com/?cat=7“>二次开发</a></li> <li id=”menu-item-338″ class=”menu-item menu-item-type-taxonomy menu-item-object-category menu-item-338″><a href=”http://utubon.sinaapp.com/?cat=5“>WP插件</a></li>
<li id=”menu-item-339″ class=”menu-item menu-item-type-taxonomy menu-item-object-category menu-item-339″><a href=”http://utubon.sinaapp.com/?cat=8“>入门操作</a></li> <li id=”menu-item-340″ class=”menu-item menu-item-type-taxonomy menu-item-object-category menu-item-340″><a href=”http://utubon.sinaapp.com/?cat=4“>WP主题</a></li> <li id=”menu-item-341″ class=”menu-item menu-item-type-taxonomy menu-item-object-category menu-item-341″><a href=”http://utubon.sinaapp.com/?cat=13“>空间域名</a></li> <li id=”menu-item-342″ class=”menu-item menu-item-type-taxonomy menu-item-object-category menu-item-342″><a href=”http://utubon.sinaapp.com/?cat=27“>业界资讯</a></li> <li id=”menu-item-343″ class=”menu-item menu-item-type-taxonomy menu-item-object-category menu-item-343″><a href=”http://utubon.sinaapp.com/?cat=28“>代码块</a></li> </ul> </li><li id=”menu-item-382″ class=”menu-item menu-item-type-post_type menu-item-object-page menu-item-382″><a href=”http://utubon.sinaapp.com/?page_id=187“>留言板</a></li>
<li id=”menu-item-383″ class=”menu-item menu-item-type-custom menu-item-object-custom menu-item-383″><a href=”http://www.utubon.com“>文档下载</a></li>
</ul>

至于后台菜单的启用,你可以参考这篇文章(请用浏览器搜索功能)。

2、javascript部分

引入jquery:<script type=”text/javascript” src=”http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js”></script>

写下面这段js代码:

$(document).ready(function(){
$(‘ul.top-menu li’).hover(function(){
$(this).find(‘ul:first’).slideDown(400);
$(this).addClass(“hover”);
},function(){
$(this).find(‘ul’).css(‘display’,’none’);
$(this).removeClass(“hover”);
});
function hide_submenu(){
$(‘ul.top-menu li’).find(‘ul’).css(‘display’,’none’);
}
$(‘ul.top-menu li li:has(ul)’).find(“a:first”).append(” &raquo; “);
document.onclick = hide_submenu;
});

3、CSS部分

.menunav ul,.menunav li{
list-style:none;
}
ul.top-menu{
position:relative;
}
ul.top-menu li{
float:left;
}
ul.top-menu li.hover,
ul.top-menu li:hover{
position: relative;
}
ul.top-menu li a{
width:60px;
height:60px;
display:block;
background:#009AD9;
margin:5px;
text-align:center;
line-height:60px;
color:#ffffff;
text-decoration:none;
}
ul.top-menu li a:hover,
ul.top-menu li.hover a{
background:#FF6600;
}
ul.sub-menu{
display:none;
position:absolute;
top:100%;
right:0;
width:180px;
margin:0;
padding:0;
}
ul.sub-menu li{
width:100%;
clear:both;
}
ul.sub-menu li a{
width:100%;
height:30px;
line-height:30px;
margin:0;
text-align:left;
text-indent:10px;
}
ul.sub-menu li a:hover,
ul.sub-menu li.hover a{
background:#FA4602;
}

ul.sub-menu ul{
right:100%;
top:0;
}
ul.sub-menu ul a:hover{
background:#B50000;
}

演示请看这里,如果网址无效或过期,请下面留言哦。

分类
WordPress

解决wordpress复制代码时单双引号成中文字符

很多朋友向我反映从乌徒帮复制过去的代码都不能使用,虽然我在每篇文章下都用红色字体提醒读者要修改内容中的单引号和双引号为英文状态下的单双引号,但这似乎并没有得到读者的重视,很多朋友复制过去代码后都会回问我代码不能用。今天我到网上搜索了下,看到有朋友遇到同样的问题,这里参考过来,修改了乌徒帮的这种情况,并发放给朋友们。

无论在什么语言版本的 WordPress 中'(英文半角引号)总是显示成'(中文全角单引号),英文的三个句号(…)都会被转换为中文的半个省略号(…),双引号也有同样的问题,中文的一对双引号(””)在 WordPress 中显示出来是(“”)。

在用英文写 BLOG 或博文中有代码片断的时候,不但影响显示美观,复制下来的代码基本无法直接使用,原因据说是因为 WordPress 为了避免某些字符在 MySQL 中二义性而改用全角显示和储存这种字符。解决方法如下:

1. 修改源文件:wp-includes/formatting.php

找到以下代码并注释掉:

// static strings $curl = str_replace($static_characters, $static_replacements, $curl); // regular expressions $curl = preg_replace($dynamic_characters, $dynamic_replacements, $curl);

即:

// static strings // $curl = str_replace($static_characters, $static_replacements, $curl); // regular expressions // $curl = preg_replace($dynamic_characters, $dynamic_replacements, $curl);

保存即可。【注意:注意保存的时候,文件格式要选择UTF- 8,否则可能出错!】

2. 另外,针对 WordPress 单引号问题还有个插件可以解决:

Quotmarks Replacer 是一个通过禁用 wptexturize 函数,解决 WordPress 自动将半角的单引号、双引号和省略号转换为全角标点的问题。使后台输入的标点格式与前台读者浏览的标点格式保持一致的插件。

上面修改源代码的方式,也是通过禁用 wptexturize 函数的标点替换部分来达到目的,不想修改源代码的朋友可以直接使用插件。

3. 修改模版的方法最简单:

在主题的 functions.php 里加一句:

remove_filter('the_content', 'wptexturize');

这就可以了,以后WordPress升级也不影响。

但有个缺点:就是只在文章正文里起效,其他文章标题、文章摘要、评论内容、评论摘要、评论作者等区域没有效果。

乌徒帮因为只在文章中有大量代码,所以选择了第3中方法。

分类
WordPress

博客搬家:wordpress换空间应该怎么办

本文将提醒读者规避wordpress博客搬家(换空间)中出错,并详细介绍wordpress搬家的最完整和最不会造成博客差异的方法。

注意:今天frustigor尝试更换空间时,出现了严重的错误,从wordpress后台工具中导出xml文件,在新的博客中上传覆盖竟然发现日志少了很多很多,frustigor使用phpmyadmin挽救了自己的日志。

wordpress搬家有两种

首先,读者要理解博客搬家和换空间的差别,搬家一般指数据的转移,例如将这个博客的文章数据搬到另外的博客中去,目前国内很多博客服务商都提供了搬家服务,如新浪博客、网易、大巴、腾讯等。而换空间则是比较令人头疼的事,我们常常因为更换空间而失去原来的博客数据,或部分失去,造成巨大损失,例如搜索引擎收录减少、访客书签中的地址错误,以及搬家后博客文章的元数据信息和文章ID也会错误。因此深刻理解和稍加练习wordpress换空间是很重要的。本文所指的搬家,正式更换空间的搬家。

wordpress后台导入导出的数据是靠不住的

我经过测试后发现wordpress后台提供的导入导出工具是靠不住的,主要体现在:1、导出数据不全;wordpress导出数据竟然会缺失文章或部分文章元数据。2、导入数据存在绝大的问题;wordpress使用IMPORT插件来实现xml所含数据的导入,但导入之后的博客数据是被打乱了的数据,我们新安装的wordpress会附带一篇文章、一个页面、一个分类,这些在导入之后会继续存在,而导入的文章或分类的ID会因为它们而改变,导入之后的文章元数据也存在巨大问题,发表时间有出入,附件信息也不知所踪,可能会消失。

乌徒帮推荐的完整wordpress搬家(换空间)方法

任何的网站程序都是由程序文件和数据组成,wordpress也是由这两项组成。一套没有经过修改添加的wordpress程序,如果将它的数据放到另外一个同样的程序外壳下,将得到与原博客一模一样的网站。

1、备份文件:备份的文件包括wp-content/所有文件,推荐直接备份该目录,例如主题,插件,这些在搬家后都需要用到;另外,你还应该备份你修改过的wordpress系统文件,或者生成的文件、自己创建的文件。另外,你需要注意的是要下载根目录wp-config.php。

2、备份数据库:推荐使用phpmyadmin备份,这一点虽然有些人不以为然,但我这里只是做推荐和建议,备份数据的方法仁者见仁智者见智,关键是要获取wordpress完整的数据。

3、导入数据库:将备份的数据导入数据库,确保字符集和数据的准确和完整。

4、上传全新的wordpress系统到新的网站空间;

5、修改刚才下载的wp-config.php中的数据库信息,如用户名密码等;然后将wp-config.php上传到根目录。

6、上传覆盖wp-config/目录。

通过上面的方法,不仅可以搬迁数据,同时将博客所启动的主题、插件、图片等其他附件一起搬迁,而且这样搬迁后由于导入的数据库文件中还包含了博客配置数据,因此主题、插件都是已经启动了的。

frustigor在搬迁自己的博客时使用该方法顺利成功,希望读者朋友们也搬迁成功。

分类
WordPress

如何自己设计wordpress评论列表及评论框

20120829更新:虽然文章以前已经将问题说的较为清楚,但是代码部分还存在一定的不足,通过这段时间的琢磨,对comments.php文件的代码进行了调整,所有代码如下:(注意php部分的逻辑,至于HTML结构您可以根据自己的情况进行调整)

wordpress本身有一个调用集合评论列表和评论表单的函数,即comments_template( ”, true );,在模板中使用该函数可以直接显示评论列表和评论框,自己只需进行css样式设计即可。但这种调用并不能体现wordpress高自定义的特点,我们 通过本文来讲解设计自己的不同于wordpress系统本身的评论列表和评论框。

下面是实现自己设计的评论列表及评论框的所有代码,不过需要付费阅读,希望能直接帮到您!

<?php if('open' == $post->comment_status && $parent_comment_status == 'open') : // 如果文章允许评论 ?> <div id="comments">  <?php if(have_comments()) : ?> ?? ?<div>已有<?php comments_number('0','1','%'); ?>条评论 <a id="to-quick-respond" style="color: #bc373a;" href="#respond">快速评论</a></div> ?? ?<ol id="comments-lists"><?php wp_list_comments(array('callback' => 'mytheme_comment'));?></ol> ?? ?<?php if(get_comment_pages_count()->1 == get_option('page_comments')) : // 如果条数大于规定的条数,那么就要翻页了 ?> ?? ??? ?<div id="comment-navi"></div> ?? ?<?php endif; // 翻页导航结束 ?> <?php endif; // 评论列表结束 ?>  <div id="respond"> <?php if(get_option('comment_registration') && !is_user_logged_in()) : //如果文章设置了必须登录才能评论 ?> ?? ?你必须<a href="<?php wp_login_url(get_permalink()); ?>">登录</a>才能评论! <?php else : //文章不用登录就能评论 ?> <form id="commentform" action="<?php bloginfo('url'); ?>/wp-comments-post.php" method="post"> ?? ?<?php if(isset($_GET['replytocom']) && $_GET['replytocom'] != '') : ?> ?? ?<div> ?? ??? ?您正在回复<?php echo comment_author($_GET['replytocom']); ?><a style="color: #f00;" href="#comment-<?php echo $_GET['replytocom']; ?>" rel="nofollow">@<?php echo $_GET['replytocom']; ?>楼</a> <a href="<?php the_permalink(); ?>#comment-<?php echo $_GET['replytocom']; ?>" rel="nofollow">取消</a> ?? ??? ?<!-- 这里需要注意:由于我的主题是用我自己的方式取消回复,如果使用wordpress自己的取消按钮,请使用<?php cancel_comment_reply_link('取消'); ?> --> ?? ?</div> ?? ?<?php endif; ?> ?? ?<?php if(is_user_logged_in()) : // 如果用户已经登录 ?> ?? ?<div>亲爱的<strong><?php echo $user_identity; ?></strong> 您已经登录啦! <a href="<?php echo admin_url('profile.php'); ?>">修改信息</a> <a href="<?php echo wp_logout_url(get_permalink()); ?>">注销</a> 赶快评论啊!</div> ?? ?<?php elseif($comment_author != '') : // 如果用户没有登录,而之前又已经进行了评论,被记录的email信息 ?> ?? ?<div>亲爱的<strong><?php echo $comment_author; ?></strong> 欢迎回来!<a id="toggle-comment-author-info" href="javascript:toggleCommentAuthorInfo();"><?php _e('修改信息'); ?></a> 留下您的回复吧</div> ?? ?<div id="comment-author-info" style="display: none;"><input id="author" type="text" name="author" value="<?php echo $comment_author; ?>" /><label for="author"><?php _e('昵称'); ?><?php if ($req) echo " *"; ?></label> ?? ?<input id="email" type="text" name="email" value="<?php echo $comment_author_email; ?>" /><label for="email"><?php _e('邮箱'); ?><?php if ($req) echo " *"; ?></label> ?? ?<input id="url" type="text" name="url" value="<?php echo $comment_author_url; ?>" /><label for="url"><?php _e('个人主页'); ?></label></div> ?? ?<script type="text/javascript"> ?? ?var changeMsg = '修改信息'; ?? ?var closeMsg = '隐藏信息'; ?? ?function toggleCommentAuthorInfo(){ ?? ??? ?var $info_box = $('#comment-author-info'),$tog_btn = $('#toggle-comment-author-info'); ?? ??? ?$info_box.slideToggle('slow', function(){ ?? ??? ??? ?if($info_box.css('display') == 'none'){ ?? ??? ??? ??? ?$tog_btn.text(changeMsg); ?? ??? ??? ?}else{ ?? ??? ??? ??? ?$tog_btn.text(closeMsg); ?? ??? ??? ?} ?? ??? ?}); ?? ?} ?? ?</script> ?? ?<?php else : //既没登录,也没之前留言情况下 ?> ?? ?<div>填写个人信息,赶快回复吧!</div> ?? ?<div id="comment-author-info"><input id="author" type="text" name="author" value="" /><label for="author"><?php _e('昵称'); ?><?php if ($req) echo " *"; ?></label> ?? ?<input id="email" type="text" name="email" value="" /><label for="email"><?php _e('邮箱'); ?><?php if ($req) echo " *"; ?></label> ?? ?<input id="url" type="text" name="url" value="" /><label for="url"><?php _e('个人主页'); ?></label></div> ?? ?<?php endif; ?> ?? ?<div id="comment-text"><textarea id="comment" name="comment"></textarea></div> ?? ?<div> ?? ??? ?<button id="submit" name="submit" type="submit"><?php _e('提交'); ?></button> ?? ??? ?<span><a id="insert_comment_img" onclick="return insertImg('comment');" href="#">插入图片</a></span> ?? ??? ?<?php if(function_exists('add_mail_to_comment_checkbox'))add_mail_to_comment_checkbox(); ?> ?? ??? ?<input type="hidden" name="redirect_to" value="<?php the_permalink(); ?>" /> ?? ??? ?<?php do_action('comment_form', $post->ID); ?> ?? ??? ?<?php comment_id_fields(); ?> ?? ??? ?<div></div> ?? ?</div> ?? ?<script type="text/javascript"> ?? ?// Ctrl+Enter提交评论 ?? ?$(document).keypress(function(e){ ?? ??? ?if(e.ctrlKey &#038;& e.which == 13 || e.which == 10) { ?? ??? ??? ?$("#submit").click(); ?? ??? ??? ?document.body.focus(); ?? ??? ?} else if (e.shiftKey &#038;& e.which==13 || e.which == 10) { ?? ??? ??? ?$("#submit").click(); ?? ??? ?} ?? ?}); ?? ?</script> </form><?php endif; // 回复部分结束 ?> </div><!-- end of #respond -->  </div><!-- endi of #comment --> <?php endif; //如果文章允许评论的话,到这里结束

代码中有部分内容省略,省略部分在下文会有详解。

一、wordpress评论列表机制

wordpress模板中使用comments_template( ”, true );函数可以直接调用评论列表,但该函数运行时,先检查是否存在commens.php模板文件,如果存在,将该模板引入,不存在,则印出默认样式的评论列表及评论框。默认的列表是<ol><li><ul><li><ul>…联动的嵌套列表,而且wordpress内置了部分css样式。默认情况下,每条评论有错位,显示出评论的深度,但布局并不好看,需要自己写样式表。

二、 设计评论列表

我们接下来要做的是设计自己的comments.php,并在single.php中合适的地方使用comments_template( ”, true );函数调用comments.php模板。我们在comments.php中写的内容将如实被调用,于是我们开始设计自己的评论列表。

1、 如果该文没有评论

<?php if( post_password_required()) : ?> <p>本文评论需密码查看!</p> <?php return;endif; ?>

需要密码,则需要密码才能查看,用一个return截断,不会执行下面的内容。

2、评论列表

<?php if ( have_comments() ) : ?> <h3 id="comments-title"><?php the_title(); ?>上有<?php comments_number('0','1','%'); ?>条评论</h3> <?php if ( get_comment_pages_count() > 1 && get_option( 'page_comments' ) ) : // are there comments to navigate through ?> <nav id="comment-nav-above"> ?? ?<div><?php previous_comments_link('<< 旧的评论'); ?></div> ?? ?<div><?php next_comments_link('新的评论 >>'); ?></div> </nav> <?php endif; // check for comment navigation ?>  <ol><?php wp_list_comments( array( 'callback' => 'mytheme_comment' ) );?></ol>  <?php if ( get_comment_pages_count() > 1 && get_option( 'page_comments' ) ) : // are there comments to navigate through ?> <nav id="comment-nav-below"> ?? ?<div><?php previous_comments_link('<< 旧的评论'); ?></div> ?? ?<div><?php next_comments_link('新的评论 >>'); ?></div> </nav> <?php endif; // check for comment navigation ?>  <?php elseif (!comments_open() && !is_page() && post_type_supports( get_post_type(), 'comments' ) ) : //评论关闭 ?> <?php endif; // end of comment list ?>

如果有评论的话列出评论列表,用到wp_list_comments()函数。同时需要判断评论条数是否过多有分页。如果没有评论,判断是否评论被关闭。

评论翻页的地方,这里虽然使用了previous_comments_linknext_comments_link,但实际上,我们使用paginate_comments_links函数可以实现翻页导航效果,具体使用请看官方文档,最简洁的方法是使用下面的代码:

paginate_comments_links( array('prev_text' => '&laquo;', 'next_text' => '&raquo;') );

3、wp_list_comments()函数

请参看原文http://codex.wordpress.org/Function_Reference/wp_list_comments,是wordpress评论列表机制。在comments.php中使用该函数,需要在functions.php中加入每条评论的呈现方式,在原文中有提到。

我们在comments.php中使用wp_list_comments( array( ‘callback’ => ‘mytheme_comment’ ) );,在functions.php中加入函数

function mytheme_comment($comment, $args, $depth) { ?? ?$GLOBALS['comment'] = $comment; ?> ?? ?<li <?php comment_class(); ?> id="li-comment-<?php comment_ID() ?>"> ?? ??? ?<table id="comment-<?php comment_ID(); ?>" border="0" cellspacing="0" cellpadding="0"> ?? ??? ?<tr> ?? ??? ??? ?<td rowspan="2" align="left" valign="top"><?php echo get_avatar($comment,$size='48',$default='<path_to_url>' ); ?></td> ?? ??? ??? ?<td valign="middle"> ?? ??? ??? ?<?php echo get_comment_author_link().' 于 '.get_comment_date().get_comment_time().' 发表的见解 '; ?> ?? ??? ??? ?<?php edit_comment_link('编辑见解 ','','') ?> ?? ??? ??? ?<?php comment_reply_link(array_merge( $args, array('depth' => $depth, 'max_depth' => $args['max_depth']))) ?> ?? ??? ??? ?</td> ?? ??? ?</tr> ?? ??? ?<tr> ?? ??? ??? ?<td> ?? ??? ??? ?<?php comment_text(); ?> ?? ??? ??? ?<?php if ($comment->comment_approved == '0')echo '<b>您的见解正在审核中,很快就会出现在评论列表~~</b>'; ?> ?? ??? ??? ?</td> ?? ??? ?</tr> ?? ??? ?</table> ?? ?<?php }

这里的列表随意自己布局,建议不要使用这里的table。注意:虽然在开头加入了<li>作为每条评论开头,但请不要在函数结尾加</li>,系统将自动为你添加关闭标签。

三、设计评论框

在comments.php中我们设计自己的评论框,实现布局和功能添加。我需要考虑到如下的一些情况:

1、评论开启的情况下才显示评论框,允许评论

将评论框的所有内容包含在

<?php if ('open' == $post->comment_status) : ?> <?php endif; ?>

中,当评论关闭时即不会显示评论框,访客即不能留言评论了。

2、系统设置必须登录才能评论

<?php if ( get_option('comment_registration') && !$user_ID ) : ?> <p>您必须<a href="<?php echo get_option('siteurl'); ?>/wp-login.php?redirect_to=<?php echo urlencode(get_permalink()); ?>">登录</a>才能发表见解!</p>

3、判断用户是否已经登录或者已经留言过,不用再写入自己的邮件信息

<?php if($user_ID) : ?> <p>您以<a href="<?php echo get_option('siteurl'); ?>/wp-admin/profile.php"><?php echo $user_identity; ?></a>的身份登录 <a href="<?php echo wp_logout_url(get_permalink()); ?>" title="退出">注销</a></p> <?php elseif(''!= $comment_author ): ?> <p>欢迎<?php echo $comment_author; ?>再次光临! <a href="javascript:toggleCommentAuthorInfo();" id="toggle-comment-author-info">更改</a></p>

4、如果没有以上情况的话,就印出需要用户填写自己的昵称、邮件等信息。

最终代码如下:

已在文章最开始全部呈现

您应该自己慢慢读懂本文,并自己确定程序的写法,去掉本文代码中的无用部分,修改增加适合自己的代码,避免忘记关闭if引起的错误。

通过自己设计comments.php可以在评论列表中插入新的功能,例如可以在评论框上方加入一段小广告,增加或修改评论者信息等。

扩展阅读:在评论列表中获取楼层或序号

分类
WordPress

为wordpress添加[code]形式的短代码提供文章速率

wordpress中提供了如[code][/code]这种形式的如论坛中常用的短代码形式,我们只需要添加相应的hook函数,即可在文章编辑时使用这种方法,提供文章编辑的速率和效率。

定义一个短代码初窥

wordpress的最大好处是高度的自定义扩展,我们只需要在主题文件的functions.php中添加如下代码,即可实现一个[-download-]短代码:

function post_short_dowload($atts,$content = null) {
extract(shortcode_atts(array(
‘href’ => ‘http://www.utubon.com’,
‘target’ => ‘_blank’,
‘class’ => ‘post_short_download’
), $atts));
return ‘<span class=”‘.$class.’”><a href=”‘.$href.’” target=”‘.$target.’”>’.$content.'</a></span>’;
}
add_shortcode(‘code_download’, ‘post_short_dowload’);

这样我们在文章中直接使用[code_download href=”http://utubon.com/text.zip”]下载[/code_download]即可在浏览文章时替换为<span class=’post_short_download’><a href=’http://utubon.com/text.zip’下载</a></span>的形式显示在文章中,你可以自己定义post_short_code_download的css样式,实现自己的下载链接。

wordpress短代码详解

1、实现一个简单的插入代替:编辑时插入[-w-],显示时替换为“这是一段被替换出来的文字”。在主题functions.php中插入

function word() { return ‘这是一段被替换出来的文字’;}
add_shortcode(‘w’, ‘word’);

在文章中插入[w]试试看。以后我们就可以用[googlead]来在文章中插入特定的谷歌广告了。add_shortcode()函数即短代码的hook,请自己谷歌该函数的用法。

2、实现有参数的插入:如上文中[code_download?href=”” title=””]下载[/code_download]这样形式的短代码,请在functions.php中插入:

function post_short_dowload($atts,$content = null) {
extract(shortcode_atts(array(
‘href’ => ‘http://www.utubon.com’,
‘target’ => ‘_blank’,
‘class’ => ‘post_short_code_download’
), $atts));
return ‘<span><a href=”‘.$href.’” target=”‘.$target.’”>’.$content.'</a></span>’;
}
add_shortcode(‘code_download’, ‘post_short_dowload’);

这里对代码中的参数进行介绍:

我们要设置$atts,$content两个形参,其中$atts是这个短代码的参数列表,如href,$content是这个短代码的内容,如“下载”字样。

extract(shortcode_atts(array(
‘href’ => ‘http://www.utubon.com’,
‘target’ => ‘_blank’,
‘class’ => ‘post_short_code_download’
), $atts));

是对$atts初始化,使短代码拥有哪些参数,其实我们用这些参数传递为html标签的属性,如我们用参数href作为<a>的链接地址。

return ‘<span><a href=”‘.$href.’” target=”‘.$target.’”>’.$content.'</a></span>’;是将这些参数返回,显示的内容即这里规定,你需要将参数们按照你的想法在这里将他们实现为html代码形式。

测试:[download href=”http://www.utubon.com” class=”ceshi_download”]下载[/download]

在使用时的一些注意点

1、在可视化编辑中可以直接使用,无需切换到html编辑模式下;

2、每一个短代码都要写一个function和add_shortcode(),太多可能导致functions.php太大,建议只是定义一些重要的短代码;

3、可以结合其他函数、js,实现更多可爱有效的功能。

分类
WordPress

wordpress条件判断函数:判断页面和状态信息

这么重要的函数我之前竟然没有发布,真是失误。

我们在制作模板的时候经常会对要显示的当前页面进行判断,对用户是否登录等状态信息进行判断,wordpress中有一套相对完整的判断函数,让我们可以自由的自己决定在不同页面是否显示或隐藏不同的页面元素。

wordpress判断该页面是不是首页/分类页/页面
The Main Page 首页
is_home()
判断是否为首页.
The Front Page 首页头版消息设置
is_front_page()
判断是否为首页头版消息. (无论是日志或是页面).当系统显示博客主页且管理面板的设置>阅读菜单下 “主页显示为”选项设为最近发表的文章”,或者’设置>阅读菜单下”主页显示为”选项设为且”主页”是当前被显示的页面时,is_front_page() 标签返回TRUE。
The Administration Panels 管理控制面板
is_admin()
判断是否为后台管理控制面板.
A Single Post Page 单篇日志
is_single()
判断是否为任何单篇日志.
is_single(’17′)
判断是否为ID17的单篇日志.
is_single(‘Irish Stew’)
判断是否标题为”Irish Stew”的单篇日志.
is_single(‘beef-stew’)
判断是否别名为 “beef-stew”的单篇日志.
is_single(array(17,’beef-stew’,’Irish Stew’))
判断是否为ID17, 或别名为”beef-stew”, 或标题为 “Irish Stew”的单篇日志.
is_single(array(17, 19, 1, 11))
判断是否为ID 17, 19, 1, 11 的文章.
is_single(array(‘beef-stew’, ‘pea-soup’, ‘chili’))
判断是否别名为 “beef-stew”, 别名为 “pea-soup” 或 别名为 “chili” 的单篇日志.
is_single(array(‘Beef Stew’, ‘Pea Soup’, ‘Chili’))
判断是否标题为 “Beef Stew”,标题为 “Pea Soup” 或标题为 “Chili” 的单篇日志.
A Sticky Post 置顶文章
is_sticky()
判断是否为置顶文章.
is_sticky(’17′)
判断是否为ID17的置顶文章.
A Post Type
is_post_type($post_type)
Returns true if the value in $post_type is a valid registered post type. This should not be confused with testing to see if a given post is of a particular post type. Note: this conditional tag became available with Version 3.0.
is_post_type(‘book’)
Returns true if book is a registered post type.
A Post Type is Hierarchical
is_post_type_hierarchical($post_type)
Returns true if this $post_type has been set with hierarchical support when registered. Note: This ability was added at Version 3.0.
is_post_type_hierarchical(‘book’)
Returns true if the book post type was registered as having support for hierarchical.
A Comments Popup 评论的弹出窗口
is_comments_popup()
判断是否为评论的弹出窗口.
Any Page Containing Posts 评论
comments_open()
判断当前文章是否允许评论.
pings_open()
判断当前文章是否允许广播(pingback).
A PAGE Page 页面
is_page()
判断是否任何页面.
is_page(’42′)
判断是否ID 42的页面.
is_page(‘About Me And Joe’)
判断是否标题为”About Me And Joe” 的页面.
is_page(‘about-me’)
判断是否别名为 “about-me” 的页面.
is_page(array(42,’about-me’,’About Me And Joe’))
判断是否为 ID 42, 或别名 “about-me”, 或标题 “About Me And Joe” 的页面.
A Category Page 分类归档
is_category()
判断是否为任何分类页.
is_category(’9′)
判断是否为ID9的分类页.
is_category(‘Stinky Cheeses’)
判断是否名称为 “Stinky Cheeses”的分类归档页.
is_category(‘blue-cheese’)
判断别名是否为 “blue-cheese”的分类归档页.
is_category(array(9,’blue-cheese’,’Stinky Cheeses’))
判断是否ID为 9, 或者别名为 “blue-cheese”, 或者名称为 “Stinky Cheeses”的分类归档页.
in_category(’5′)
判断当前文章的分类ID是否为5
in_category( array( 1,2,3 ) )
判断当前文章的分类ID是否为 1, 2, 或 3.
!in_category( array( 4,5,6 ) )
判断当前文章的分类ID是否不是 4, 5, 或 6 .
A Tag Page 标签归档
is_tag()
判断是否为标签页
is_tag(‘mild’)
判断是否为别名 ‘mild’ 的标签归档页.
is_tag(array(‘sharp’,’mild’,’extreme’))
判断别名是否为 “sharp”, “mild”, 或 “extreme” 的标签归档页.
has_tag()
判断当前文章是否有标签.
has_tag(‘mild’)
判断当前文章是否有标签 ‘mild’.
has_tag(array(‘sharp’,’mild’,’extreme’))
判断当前文章是否包含一个数组中的标签.
A Taxonomy Page 分类法页面
is_tax()
显示任何分类法归档页面时,is_tax()会返回TRUE。.
is_tax(‘mild’)
示分类法归档页面别名为“mild”时, is_tax(‘mild’)返回TRUE.
is_tax(array(‘sharp’,’mild’,’extreme’))
当前分类法归档别名为数组中的任一个”sharp”, “mild”, 或 “extreme”时,is_tax(array(‘sharp’,’mild’,’extreme’)) 返回TRUE.
A Registered Taxonomy 注册过的分类法
is_taxonomy()
当某一种分类法通过register_taxonomy()注册, is_taxonomy()? 返回TRUE.
An Author Page 作者归档
is_author()
判断是否为作者归档页.
is_author(’4′)
判断是否为ID4的作者归档页.
is_author(‘Vivian’)
判断是否为昵称 “Vivian”的作者归档页.
is_author(‘john-jones’)
判断是否为昵称 “john-jones” 的作者归档页.
is_author(array(4,’john-jones’,’Vivian’))
判断是否为 ID 4, 或者昵称 “john-jones”, 或昵称 “Vivian” 的作者标签页.
A Date Page 日期归档页
is_date()
判断是否为日期归档页.
is_year()
判断是否为按年归档页.
is_month()
When a monthly archive is being displayed.
is_day()
判断是否为按天归档页.
is_time()
判断是否按小时, “分钟”, “秒”归档页.
Any Archive Page 归档页
is_archive()
是否归档页.
A Search Result Page 搜索结果页
is_search()
是否搜索页.
A 404 Not Found Page 未找到页面
is_404()
是否404页面.
A Paged Page 分页
is_paged()
判断是否有分页. 需要将 <!–nextpage–> 快速标签插入到文章中才能将文章分成多页.
An Attachment 附件
is_attachment()
判断是否为附件文档. 附件是通过编辑器上传工具上传的图片或其他文件. 附件能显示在相应的页面或模版中.
A Single Page, Single Post or Attachment 独立页面、单篇日志或附件
is_singular()
当is_single(), is_page() 或is_attachment()返回TRUE时,is_singular() 也返回TRUE。.
is_singular(‘book’)
True when viewing a post of the post type book. Introduced with Version 3.0.
is_singular(array( ‘newspaper’, ‘book’ ))
True when viewing a post of the post type newspaper or book. Introduced with Version 3.0.
A Syndication
is_feed()
网站需要使用RSS订阅时,is_feed()返回TRUE。一般情况下会用到is_feed()标签的是WordPress系统和插件开发人员,普通 WordPress用户很少用到is_feed()标签.
A Trackback 引用通知
is_trackback()
网站需要将WordPress钩子勾入Trackback。一般情况下会用到这个标签的是WordPress系统和插件开发人员,普通WordPress 用户很少用到is_feed()标签.
A Preview 草稿预览
is_preview()
判断文章是否显示在草稿预览模式.
Has An Excerpt 摘要
has_excerpt()
判断当前文章是否有摘要.
has_excerpt(’42′)
判断ID42的文章是否有摘要.
Inside The Loop 循环
in_the_loop()
判断目前是否在WordPress主循环中. 该标签适用于插件开发人员, 若目前在WordPress主循环中, 该标签返回TRUE.
Is Sidebar Active 边栏
is_active_sidebar()
检查现有侧边栏是否被激活(是否启用).若侧边栏被启用,is_active_sidebar() 返回TRUE,否则返回FALSE.

乌徒帮http://www.utubon.com还发明了一种判断是否开启了固定链接的函数:

function is_permalink(){
if(get_option(‘permalink_structure’)) return true;
else return false;
}

呵呵,很简单吧。

分类
WordPress

wordpress插件制作初级教程

对于wordpress使用和开发者,想要实现网站某些功能,要么通过在主题中加入相关函数以实现,要么制作自己的插件。本文将初步讲解wordpress插件制作,用实例来讲解。

本文只是实现一个只有一个文件的插件,功能简单,如果你需要有更多更细节的功能,可按本文的思路不断开发。

一、如何让插件起作用

1、插件文件头部声明:

<?php
/*
Plugin Name: Name Of The Plugin
Plugin URI: http://URI_Of_Page_Describing_Plugin_and_Updates
Description: A brief description of the Plugin.
Version: The Plugin’s Version Number, e.g.: 1.0
Author: Name Of The Plugin Author
Author URI: http://URI_Of_The_Plugin_Author
*/
?>

将上面的代码拷贝到weibo.php。

2、将插件文件放在wordpress目录/wp-content/plugins/下,到后台是否可以看到有了一个新插件,激活它。

二、让插件拥有功能

完成上面第一步之后,插件没有任何功能,接下来我们要让插件拥有功能。

1、定义一个功能函数

<?php
function add_to_header(){
?>
<script>alert(‘这是一个插件’);</script>
<?
}
?>

如果再wordpress模板中调用该函数,将弹出警告框,提示“这是一个插件”。

2、将这个函数通过add_action实现其功能

<?php?add_action(‘wp_head’, ‘add_to_header’, 1); ?>

因为之前我们已经激活了插件,所以我们刷新页面时会弹出警告框。关于add_action(),你可以查看官方文件获悉其用法。

同时,你还应该了解函数add_filter(),它也将在你的插件开发中不断出现。

三、添加插件后台设置功能

在一些情况下,你需要你的插件拥有后台设置功能,并且显示为你后台设置的数据。添加后台设置的代码如下:

1、定义一个函数,用来显示后台设置的界面

<?php
function weibo_option(){
echo ‘<div class=”wrap”>’;
echo ‘<h2>微博通同步</h2>’;
echo ‘<form method=”post” action=”options.php”>’;
echo wp_nonce_field(‘update-options’);
echo ‘<table class=”form-table”>’;
echo ‘<tr valign=”top”>’;
echo ‘<th scope=”row”>用户名 <a href=”http://www.wbto.cn/?app=wp”>注册</a></th>’;
echo ‘<td><input type=”text” name=”wbto_username” value=”‘.get_option(‘wbto_username’).’” /></td>’;
echo ‘</tr>’;
echo ‘<tr valign=”top”>’;
echo ‘<th scope=”row”>密码</th>’;
echo ‘<td><input type=”password” name=”wbto_password” value=”‘.get_option(‘wbto_password’).’” /></td>’;
echo ‘</tr>’;
echo ‘</table>’;
echo ‘<input type=”hidden” name=”action” value=”update” />’;
echo ‘<input type=”hidden” name=”page_options” value=”wbto_username,wbto_password” />’;
echo ‘<p class=”submit”>’;
echo ‘<input type=”submit” name=”submit” id=”submit” class=”button-primary” value=”保存更改” />’;
echo ‘</p>’;
echo ‘</form>’;
echo ‘</div>’;
}
?>

2、让这个后台界面显示出来,并让数据可以更新和使用

<?php
function wbto_menu() {
add_options_page(‘微博通同步设置’, ‘微博通同步’, 8, __FILE__, ‘weibo_options’);
}
add_action(‘admin_menu’, ‘wbto_menu’);
?>

3、如何使用这些设置的数据

我们用get_option()函数来获取这些设置的数据,你同时需要了解update_option()和delete_option()函数。你可以看到上面的表单都提交到了options.php,那么每一个name值将对应get_option()的id,例如本例中,我们可以用get_option(‘wbto_username’)来获取后台设置的微博通用户名。

四、总结:插件开发的一般程式+实例

通过上文的学习,你可以到wordpress微博通同步插件一文自己阅读这个插件的代码,并自己尝试修改得到自己想要的功能。

wordpress插件制作的一般程式:

Step 1:定义插件的信息

/*
* Plugin Name: ABitNo IN Head
* Plugin URI: http://www.utubon.com/
* Version: 0.1
* Author: frustigor
* Description: Put annotation ‘ABitNo is here’ to the header
*/

Step 2:创造一个Class和相关的function

if(!class_exists(‘AbitnoInHead’)) {
class AbitnoInHead {
function abitno_in_head() {
echo(‘<!– ABitNo is here ! –>’);
}
}
}

Step 3:实例化创建的Class

if( class_exists(‘AbitnoInHead’) ) {
$abitno_head = new AbitnoInHead();
}

Step 4:添加Action和Filter

if(isset ($abitno_head)){
add_action(‘wp_head’, array(&$abitno_head, ‘abitno_in_head’), 1);
}

整个插件的一般框架即包含:声明+功能函数+后台界面函数+wordpress挂钩(action、filter)。