将以下代码添加到functions.php:
function widget_footer_copyright() {
register_sidebar(array(
'id'=>'widget_footer_copyright',
'name'=>'页脚版权信息'
));
}
add_action('widgets_init','widget_footer_copyright');
在模板文件中使用:
<ul><?php dynamic_sidebar(‘widget_footer_copyright’); ?></ul>
标签归档:Wordpress
在WordPress主题中使用自定义Shortcode
WordPress 的 Shortcode 常用的主要有3种:
[shortcode foo=”bar”]
[shortcode]text[/shortcode]
[shortcode foo=”bar”]text[/shortcode]
这里简单介绍第一种的定制方法,编辑以下代码到functions.php:
// [redirect url="?page_id=100"]
function sc_redirect( $atts ){
extract( shortcode_atts( array(
'url' => 'http://mimiz.cn',
), $atts ) );
$result = ‘window.location.href=”‘.home_url(‘/’).$url.'”;’;
return $result;
}
add_shortcode( ‘redirect’, ‘sc_redirect’ );
以上代码作用是创建一个重定向的shortcode。
需要进一步了解shortcode请移步官方文档:
http://codex.wordpress.org/Shortcode_API
在WordPress主题中自定义菜单
1. 首先在主题的functions.php中注册菜单:
register_nav_menus(array(
'primary_nav' => 'Primary Navigation',
'secondary_nav' => 'Primary Navigation'
));
2. 在后台的 Appearance -> Menus 中设置菜单项。
3. 在主题中显示菜单:
wp_nav_menu( array('menu_class' => 'primary_nav', 'theme_location' =>'primary_nav') );
wp_nav_menu(); 函数支持丰富的参数,详情参考官方文档:
http://codex.wordpress.org/Function_Reference/wp_nav_menu
在WordPress中创建自定义的文章类型
例如我想创建一个Events类型,用来发布企业活动事件,其实异常简单,我们分三步来操作:
一、创建Events类型:
编辑functions.php 文件,插入以下代码:
add_action('init', 'register_events');
function register_events() {
register_post_type('events', array(
'labels' => array(
'name' => 'Events',
'singular_name' => 'Event',
'add_new' => 'Add Event',
'add_new_item' => '',
'edit_item' => 'Edit Event',
'new_item' => 'New Event',
'view_item' => 'See Event',
'search_items' => 'Search in Event',
'not_found' => 'No Event',
'not_found_in_trash' => 'No Event'
),
'public' => true,
'taxonomies' => array('category'),
'supports' => array('title','editor','excerpt','thumbnail')
));
}
二、定义Events类型的显示模板:
把single.php复制并命名为single-events.php,自定义HTML显示方式。
三、创建Events文章的列表页面:
1. 创建模板文件page-events.php,插入以下代码:
<?php
/***
Template Name: Events
*/
get_header(); ?>
<?php query_posts(array('post_type'=>'events')); ?>
<?php if ( have_posts() ) while ( have_posts() ) : the_post(); ?>
<?php endwhile; ?>
<?php get_footer(); ?>
2. 创建一个page页面,并选择模板为Event。
从wordpress分类列表的widget中移除某个分类的插件
WordPress的分类小工具会把所有的分类都显示出来,
有时候我们只想显示其中的几个分类,或者隐藏某个分类。
对于这种需求,可以使用wp_list_categories($args)这个模板标签来控制它。
例如只想显示ID为1、3、5的分类:
wp_list_categories('include=1,3,5');
不显示ID为2、4的分类且显示每个分类的日志数:
wp_list_categories('exclude=2,4&show_count=1');
详细说明请参考官方文档:
http://codex.wordpress.org/Template_Tags/wp_list_categories
由于某种原因,我不能直接在模板文件中使用wp_list_categories,
只好把它做成插件的形式使用,翻了下官方的API,
发现wp-includes/default-widgets.php中有个WP_Widget_Categories类是控制分类小工具输出的,
直接毫不犹豫的Copy出来修改wp_list_categories函数,按照插件机制,做成小插件。
以下是插件代码:(也可以从这里下载)
<?php
/*
* Plugin Name: Categories Widget Exclude ID
* Plugin URI: http://mimiz.cn
* Description: A simple plugin allow you remove some of the categories from categories widget.
* Author: Zhang Cheng
* Version: 0.1
* Author URI: http://mimiz.cn
*/
class limited_catagories_list_widget extends WP_Widget {
private $_exclude_id = ‘1’; // Categories ID, you want to remove.
function __construct() {
$widget_ops = array( ‘classname’ => ‘widget_categories’, ‘description’ => __( “A list or dropdown of categories” ) );
parent::__construct(‘categories’, __(‘Categories’), $widget_ops);
}
function widget( $args, $instance ) {
extract( $args );
$title = apply_filters(‘widget_title’, empty( $instance[‘title’] ) ? __( ‘Categories’ ) : $instance[‘title’], $instance, $this->id_base);
$c = ! empty( $instance[‘count’] ) ? ‘1’ : ‘0’;
$h = ! empty( $instance[‘hierarchical’] ) ? ‘1’ : ‘0’;
$d = ! empty( $instance[‘dropdown’] ) ? ‘1’ : ‘0’;
echo $before_widget;
if ( $title )
echo $before_title . $title . $after_title;
$cat_args = array(‘orderby’ => ‘name’, ‘show_count’ => $c, ‘hierarchical’ => $h);
if ( $d ) {
$cat_args[‘show_option_none’] = __(‘Select Category’);
wp_dropdown_categories(apply_filters(‘widget_categories_dropdown_args’, $cat_args));
?>
/* 0 ) {
location.href = “/?cat=”+dropdown.options[dropdown.selectedIndex].value;
}
}
dropdown.onchange = onCatChange;
/* ]]> */
<?php
} else {
?>
<ul>
<?php
$cat_args[‘title_li’] = ”;
$cat_args[‘exclude’] = $this->_exclude_id;
wp_list_categories(apply_filters(‘widget_categories_args’, $cat_args));
?>
</ul>
<?php
}
echo $after_widget;
}
function update( $new_instance, $old_instance ) {
$instance = $old_instance;
$instance[‘title’] = strip_tags($new_instance[‘title’]);
$instance[‘count’] = !empty($new_instance[‘count’]) ? 1 : 0;
$instance[‘hierarchical’] = !empty($new_instance[‘hierarchical’]) ? 1 : 0;
$instance[‘dropdown’] = !empty($new_instance[‘dropdown’]) ? 1 : 0;
return $instance;
}
function form( $instance ) {
//Defaults
$instance = wp_parse_args( (array) $instance, array( ‘title’ => ”) );
$title = esc_attr( $instance[‘title’] );
$count = isset($instance[‘count’]) ? (bool) $instance[‘count’] :false;
$hierarchical = isset( $instance[‘hierarchical’] ) ? (bool) $instance[‘hierarchical’] : false;
$dropdown = isset( $instance[‘dropdown’] ) ? (bool) $instance[‘dropdown’] : false;
?>
<p><label for=”<?php echo $this->get_field_id(‘title’); ?>”><?php _e( ‘Title:’ ); ?></label>
<input class=”widefat” id=”<?php echo $this->get_field_id(‘title’); ?>” name=”<?php echo $this->get_field_name(‘title’); ?>” type=”text” value=”<?php echo $title; ?>” /></p>
<p><input type=”checkbox” class=”checkbox” id=”<?php echo $this->get_field_id(‘dropdown’); ?>” name=”<?php echo $this->get_field_name(‘dropdown’); ?>”<?php checked( $dropdown ); ?> />
<label for=”<?php echo $this->get_field_id(‘dropdown’); ?>”><?php _e( ‘Display as dropdown’ ); ?></label><br />
<input type=”checkbox” class=”checkbox” id=”<?php echo $this->get_field_id(‘count’); ?>” name=”<?php echo $this->get_field_name(‘count’); ?>”<?php checked( $count ); ?> />
<label for=”<?php echo $this->get_field_id(‘count’); ?>”><?php _e( ‘Show post counts’ ); ?></label><br />
<input type=”checkbox” class=”checkbox” id=”<?php echo $this->get_field_id(‘hierarchical’); ?>” name=”<?php echo $this->get_field_name(‘hierarchical’); ?>”<?php checked( $hierarchical ); ?> />
<label for=”<?php echo $this->get_field_id(‘hierarchical’); ?>”><?php _e( ‘Show hierarchy’ ); ?></label></p>
<?php
}
}
function register_category_exclude_widget(){
register_widget(‘limited_catagories_list_widget’);
}
add_action(‘widgets_init’, ‘register_category_exclude_widget’);
?>
配置 WordPress 网络(多站点)功能 及 域名映射
自从Wordpress 3.0开始,新增了很多令人惊喜的特性,比如自定义POST类型,分类升级,自定义菜单,增加网络功能等,其中的网络功能即是传说中的多站点了,它整合了Wordpress MU的核心代码,让我们可以只用一套程序实现像WP MU一样的站群系统。
一、安装:
正常安装Wordpress,如果已经安装过,请先备份网站,然后停用所有插件。
二、激活多站点模式:
编辑文件 wp-config.php
在/* That’s all, stop editing! Happy blogging. */这一行之前加入以下代码:
/* allow multisite */
define(‘WP_ALLOW_MULTISITE’, true);
三、后台配置:
登录WP后台,进入Tools——>Network Setup选择网站地址形式,有子域名和子目录两种,
点击Install按钮后,会提示你继续修改 wp-config.php 文件,
按照提示,首先创建在 wp-content目录中创建 blogs.dir 文件夹,
然后根据说明修改 wp-config.php 和 .htaccess 文件,
最后重新登录系统,登陆地址是:
worpress_url/wp-admin/network/
到这一步,Wordpress网络功能就部署完毕了,
我们可以成功在后台新增二级域名或子目录的站点。
四、新增站点绑定顶级域名:
如果想让子站点绑定独立的顶级域名或其他域名,
需要安装域名映射插件: WordPress MU Domain Mapping
官方下载地址:
http://wordpress.org/extend/plugins/wordpress-mu-domain-mapping/
安装成功后,首先全网络激活插件Network Activate,
然后把插件目录下的 sunrise.php 文件移动到 wp-content/ 目录下,
再次编辑 wp-config.php 文件,增加代码:
define( ‘SUNRISE’, ‘on’ );
刷新一下管理后台,在Settings中新增了2个项目,
在Settings——>Domain Mapping中设置服务器IP和CNAME,
在Settings——>Domains中可以添加新的域名,
Site ID就是需要绑定域名站点在数据库中的ID值,在All Sites中可以看到。
同样的,你也可以进入子站点的控制面板中,
在Tools——>Domain Mapping里面设置需要绑定的域名。
注意事项:
1. 服务器空间需要支持.htaccess 。
2. 开启 WordPress Network 功能后,最好不要把WP放在子目录。
3. 在本机测试时,不要使用127.0.0.1,用localhost代替。
— over —
WordPress 模板机制
这是 WordPress 模板的工作原理,从 WordPress 中文 找到的,
原作是一位国外友人,Tigerkin 做了重绘,在此感谢。
图示 简洁明了,一目了然,被奉为经典,今转帖于此,便于以后查阅。
最近在用WordPress开发通用型企业站,越来越体验到WordPress的灵活易用,
比那些所谓万能的CMS强多了,我还是同意那个观点:
“‘CMS要有很多复杂的功能’是蒙人的。”
毕竟,能提高生产力的工具才是大众所需。
WordPress模板标签手册
这是我在开发Wordpress模板过程中收集的一些常用函数模板标签。
整理出来 给需要的朋友看,也为以后自己查阅方便。
更多详细信息请参考WordPress官方文档(http://codex.wordpress.org/Template_Tags)。
常用的模板标签函数:
: 博客名称
: 博客 Url
: 博客描述
: CSS文件路径
: PingBack Url
: 模板文件路径
: WordPress版本
: Atom Url
: RSS 2.o Url
: 网页Html类型
: 网页编码
: 特定内容页(Post/Page)的标题
: 调用Header模板
: 调用Sidebar模板
: 调用Footer模板
: 显示内容(Post/Page)
: 显示时间,具体参考PHP相关函数
: 正文中的留言链接,在当前窗口打开。
: 正文中的留言链接,在新窗口中打开。
: 内容页(Post/Page)标题
: 内容页(Post/Page) Url
: 特定内容页(Post/Page)所属Category
: 作者
: 特定内容页(Post/Page) ID
: 如果用户已登录并具有权限,显示编辑链接
: 显示Blogroll中的链接
: 调用留言/回复模板
: 显示Page列表
: 显示Categories列表
: 下一篇文章链接
: 上一篇文章链接
: 日历
: 显示内容存档
: 导航,显示上一篇/下一篇文章链接
: 嵌入其他文件,可为定制的模板或其他类型文件
: 输出相应信息
: 显示注册链接
: 显示登录/注销链接
: 将当前内容分页
: 将当前内容截断,以不在主页/目录页显示全部内容
: 网页加载时间(秒)
: 网页加载查询量
传说中的主循环:
基本条件判断:
is_home() : 是否为主页
is_single() : 是否为内容页(Post)
is_page() : 是否为页面页(Page)
is_category() : 是否为分类页(Category/Archive)
is_tag() : 是否为Tag存档页
is_date() : 是否为指定日期存档页
is_year() : 是否为指定年份存档页
is_month() : 是否为指定月份存档页
is_day() : 是否为指定日存档页
is_time() : 是否为指定时间存档页
is_archive() : 是否为存档页
is_search() : 是否为搜索结果页
is_404() : 是否为 “404: Not Found” 错误页
is_paged() : Home/Category/Archive页是否以多页显示
WordPress Tags 变成数字的解决方法
把 WordPress 的首页 index.php 放在其他目录
通常情况下,Wordpress的首页文件index.php默认放在程序根目录,
这意味着如果想把 WordPress 作为网站的首页,那么站点的根目录将会非常杂乱,
按照下面的方法将 WordPress 程序文件放在一个子目录,同时使首页index.php位于站点根目录。
- 将 WordPress 程序文件,存放在一个子目录中,以 wp 文件夹为例。
- 从 wp 文件夹中复制 index.php 和 .htaccess 文件到网站根目录。
- 用文本编辑器打开 index.php 文件,修改 require(‘./wp-blog-header.php’); 为 require(‘./wp/wp-blog-header.php’);
- 登陆后台,进入”Options”面板,中文大概是 “设置” –> “常规”。
- 将”WordPress address (URL)” 修改为WordPress程序文件所在的文件夹。例如:http://MiMiz.cn/wp/
- 将 “Blog address (URL)” 修改为网站的根目录。例如:http://MiMiz.cn/
- 点击 “Update”更新设置。
- 搞定^_^