wordpress post 模板选择插件(Single template plugin)

通常在wordpress下发表(或编辑)page 时有一个可以选择 templage 的功能,通过选择不同的 template 我们可以为每个page指定不同的模板,这样以来各个page就不会显得过于呆板,这个功能如此方便好用,只可惜的是在发表(或编辑)post 的时候默认却是没有这个功能的,虽然wp默认没有这个功能,但并不代表我们就不能使用类似page 的template选择功能,通过plugin扩展的方式,我们还是可以很方便的在post下模拟出类似page的模板选择功能。以下是代码:

<?php
/**
Plugin Name: Single template plugin
Plugin URI: http://www.ifcode.com/
Description: Post 模板选择插件

Version: 1.0
Author: Zhang Zhao
Author URI: http://www.ifcode.com/
*/

function get_single_templates() {
$themes = get_themes();
$theme = get_current_theme();
$templates = $themes[$theme]['Template Files'];
$page_templates = array ();

if ( is_array( $templates ) ) {
foreach ( $templates as $template ) {
$template_data = implode( '', file(WP_CONTENT_DIR.$template ));

$name = '';
if ( preg_match( '|Post Name:(.*)$|mi', $template_data, $name ) )
$name = _cleanup_header_comment($name[1]);

if ( !empty( $name ) ) {
$page_templates[trim( $name )] = basename( $template );
}
}
}

return $page_templates;
}

function single_template_dropdown( $default = '' ) {
$templates = get_single_templates();
ksort( $templates );
foreach (array_keys( $templates ) as $template )
: if ( $default == $templates[$template] )
$selected = " selected='selected'";
else
$selected = '';
echo "/n/t<option value='".$templates[$template]."' $selected>$template</option>";
endforeach;
}

function single_templates($post){
$post->single_template = get_post_meta( $post->ID, '_single_template', true );

if ( 0 != count( get_single_templates() ) ) { ?>

<label for="page_template"><?php _e('Post Template') ?></label>
<select name="single_template" id="single_template">
<option value='default'><?php _e('Default Template'); ?></option>
<?php single_template_dropdown($post->single_template); ?>
</select>
<?php
}
}

function add_single_meta_box()
{
if(!function_exists('add_meta_box'))
return false;

add_meta_box('singletemplate', __('Template'), 'single_templates', 'post', 'side', 'core');
}

function save_post_templatedata($postID)
{
if(isset($_POST['single_template']))
if ( !update_post_meta($postID, '_single_template', $_POST['single_template']) )
add_post_meta($postID, '_single_template', $_POST['single_template']);
}

function select_single_template()
{
global $post;

$template = get_post_meta($post->ID, '_single_template', true);

if($template && 'default' != $template) {
$style = substr($template, 0, -4);
$style .= '.css';

if(file_exists(TEMPLATEPATH .'/styles/' . $style)) {
add_action('wp_head', 'single_template_style');
}

return  TEMPLATEPATH .'/'. $template;
}

if(file_exists(TEMPLATEPATH .'/single.php')) {
return  TEMPLATEPATH .'/single.php';
}
}

function single_template_style()
{
global $post;

$template = get_post_meta($post->ID, '_single_template', true);
$style = substr($template, 0, -4);
$style .= '.css';

echo '<link rel="stylesheet" type="text/css" href="' .get_bloginfo('template_directory'). '/styles/' .$style. '" media="screen" />';
}

add_action('admin_menu', 'add_single_meta_box');
add_action('save_post', 'save_post_templatedata');

add_filter("single_template", 'select_single_template');
?>

使用方法:

使用方法:
1、将插件复制到 wp-content/plugins/ 目录下
2、激活插件
3、在当前使用的 theme 目录下重新建立自己 post template.
比如:在default theme下建立一个新的php 文件,名为:single-test.php,文件内容大致如下:

<?php
/**
* Post Name: Single test
*/

get_header();
?>

<div id="content" role="main">

Single template plugin

</div>

<?php get_footer(); ?>

所有的文件必须要以
/**
* Post Name: Single test
*/
开头,插件是以 Post Name: 来对模板进行识别的,后面的插件名字可以自己随便起。
可以在当前使用的 theme 目录下定义针对模板的css文件,css文件存放在css/目录下,文件名同 post template 模板文件名相同即可(程序会自动访问并加载同名的css文件)。
例如为上面single-test.php定义一个css文件 css/single-test.css

插件下载点这里

 

文章来源:http://www.ifcode.net/?p=212

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值