首页 > php教程 > php手册 > 正文

wordpress 后台页面模板动态切换

php中文网
发布: 2016-06-06 20:08:15
原创
2290人浏览过

简单的说明下. 在后台 新建页面 的时候, 有个页面属性 - 模板, 想必大家都知道这是什么功能. 但是页面可能是多样化..比如: 很多时候..可能不同 页面, 需要不同的定制, 所有我考虑到这个. 就想出了一个办法. 就是 当我选择 模板?的时候就让后台的 项目自动添

简单的说明下.

在后台 新建页面 的时候, 有个页面属性 -> 模板, 想必大家都知道这是什么功能.

未命名

但是页面可能是多样化..比如:

未命名

很多时候..可能不同 页面, 需要不同的定制, 所有我考虑到这个. 就想出了一个办法. 就是 当我选择 模板?的时候就让后台的 项目自动添加需要的 模块

未命名

比如我选择了一个 茶园页面模板 就刷出 一个本类介绍模块?.

未命名

html动物介绍滑块切换页面模板
html动物介绍滑块切换页面模板

一款html动物介绍滑块切换页面模板

html动物介绍滑块切换页面模板 64
查看详情 html动物介绍滑块切换页面模板

好了..直接上代码吧.

首先要后台加载 javascript select事件?触发重新提交URL. 这一步要写个 js 后台的时候导入:

define('MTHEME_JS', get_template_directory_uri() . '/js' );
function admin_enqueue_scripts(){
	wp_enqueue_script( 'jquery' );
	wp_enqueue_script( 'template', MTHEME_JS . '/admin/template.js', 'jquery', COAUTHORS_PLUS_VERSION, true);
}
add_action( 'admin_enqueue_scripts', 'admin_enqueue_scripts' );
登录后复制

?tempate.js:

jQuery(document).ready(function($) {
	if($('#page_template').length > 0){
		var uri = new Uri(window.location.href);
		var val = uri.getQueryParamValue('temp');
		$('#page_template').on('change', function(){
			var v = $(this).val();
			if(v != 'default'){
				v = v.split('/');
				//v = encodeURIComponent(v);
				//v = URLencode(v);
				if(uri.getQueryParamValue('temp')){
					window.location.href = uri.replaceQueryParam('temp', v[0]+"_"+v[1]);
				}else{
					window.location.href = uri.addQueryParam('temp', v[0]+"_"+v[1]);
				}
			}
		});
		if(val){
			$('#page_template').val(val.replace(/_/g, '/'));
		}
	}
});
登录后复制

这样给 选择模板 下拉框绑定了事件, ?当你选择的时候 模板 的时候.会发现页面重定向了 多了一个参数?&temp=XXXX.php?那我们在?functions.php?里就可以写入判断了. 下面是完整的 PHP

<?php
/**
 * 后台初始化编辑器默认内容布局
 * 通过 temp 变量动态修改默认编辑器布局
 * 
 */
if ($_GET ['temp'] || ($_GET ['action'] == 'edit' && $_GET ['post']) || $_POST ['post_type'] == 'page') {
	global $temp_name, $_meta_boxes;
	$_meta_boxes = array (
			// 茶事列表模板
			'page-templates/teamatter-page.php' => array(),
			// 茶人页面模板
			'page-templates/teamasters-page.php' => array(
					'method'	=> 'teamasters',
					'content'	=> '<div class="content-col-main">头部本页介绍</div>
							 <div class="content-col-main">这里可以加入幻灯片</div>
							 <div class="content-col-main">
								<h2>茶人语录</h2>
								<div class="house_list clear">
									<div class="house_list_single alignleft">
										<div class="title clear">
											<p class="alignleft">名称</p>
											<div class="alignleft">
												<h2>
													标题
												</h2>
											</div>
										</div>
										<div class="the_content clear">
											<div class="cthumbnail alignleft">
												上传图片
											</div>
											<div class="c_text alignleft">
												内容
											</div>
										</div>
									</div>
								</div>
						</div>',
					'element' => array(
						"description" => array (
								"name" => "teagarden_information",
								"std" => "这里填默认的网页描述",
								"title" => "本类介绍:"
						)
					)
				),
			// 茶园页面模板
			'page-templates/teagarden-page.php' => array(
					'method'	=> 'teagarden',
					'content'	=> '',
					'element' => array(
						"description" => array (
								'name' => "teagarden_information",
								'std' => "这里填默认的网页描述",
								'title' => "本类介绍:",
								'type'	=> 'editor'
						)
					)
				),
			// 茶礼页面模板
			'page-templates/teaceremony-page.php' => array(),
			// 茶道列表模板
			'page-templates/teataoism-page.php' => array(),
			// 茶道总览模板
			'page-templates/teataoismtotal-page.php' => array(),
			// 茶馆列表模板
			'page-templates/teahouses-page.php' => array(),
			// 茶馆总览模板
			'page-templates/teahouseoverview-page.php' => array(),
	);
	$temp_name = str_replace ( "_", "/", $_GET ['temp'] );
	// 判断是什么类型的
	function return_tepmlate($temp_name) {
		global $current_screen, $temp_name, $_meta_boxes, $temp_css;
		foreach ($_meta_boxes as $k => $_box){
			if($k == $temp_name){
				return $_box['content'];
			}
		}
	}
	function custom_editor_content($content) {
		global $current_screen, $temp_name, $temp_css;
		$content = return_tepmlate ( $temp_name );
		return $content;
	}
	function custom_editor_style() {
		global $current_screen, $temp_css;
		add_editor_style ( array (
				'editor-style.css',
				'editor-style.css' 
		) );
	}
	//返回自定义值
	function _return_defined($defined){
		global $temp_name, $_meta_boxes;
		foreach ($_meta_boxes as $k => $_box){
			if($k == $temp_name){
				return $_box[$defined];
			}
		}
	}
	add_filter ( 'default_content', 'custom_editor_content' );
	add_action ( 'admin_head', 'custom_editor_style' );
	if ($_GET ['post'] && ! $_GET ['temp']) {
		$post = get_page ( $_GET ['post'] );
		$temp_name = $post->page_template;
		$method = _return_defined('method');
		if($method){
			$method();
		}
	} elseif ($_GET ['post'] && $_GET ['action'] == 'edit') {
		$method = _return_defined('method');
		if($method){
			$method();
		}
	} elseif ($_GET ['post_type'] == 'page'){
		$method = _return_defined('method');
		if($method){
			$method();
		}
	}
	if ($_POST) {
		add_action ( 'save_post', 'save_postdata' );
	}
}
function teamasters(){
}
// 茶园
function teagarden() {
	global $temp_name, $_meta_boxes;
	if(!_return_defined('element')){
		return '';
	}
	// 在'add_meta_boxes'挂载 add_xz_box 函数
	add_action ( 'add_meta_boxes', 'add_heads_box' );
	function add_heads_box() {
		add_meta_box ( 'head_box', '本类介绍 - 文章头部内容', 'head_box', 'page', 'advanced', 'core' );
	}
	function head_box($post) { // 显示设置区域的回调函数
		global $temp_name, $_meta_boxes;
		$description = _return_defined('element');
		if($description){
			foreach ( $description as $meta_box ) {
				$meta_box_value = get_post_meta ( $post->ID, $meta_box ['name'] . '_value', true );
				if ($meta_box_value == "")
					$meta_box_value = $meta_box ['std'];
				if($meta_box ['title']){
					echo '<h4>' . $meta_box ['title'] . '</h4>';
				}
				switch ($meta_box['type']){
					case 'textarea':
						echo '<textarea cols="145" rows="6"
						name="'.$meta_box['name'].'_value">'.$meta_box_value.'</textarea>';
						break;
					case 'text':
						echo '<input type="text" name="' . $meta_box ['name'] . '_value" id="' . $meta_box ['name'] . '_text"  value="' . $meta_box_value . '" />';
						break;
					case 'editor':
						wp_editor ( str_replace ( '\"', '"', $meta_box_value ), $meta_box ['name'] . '_value', $settings = array (
						quicktags => 1,
						tinymce => 1,
						media_buttons => 0,
						textarea_rows => 4
						) );
						break;
				}
				echo '<input type="hidden" name="' . $meta_box ['name'] . '_noncename" id="' . $meta_box ['name'] . '_noncename" value="' . wp_create_nonce ( plugin_basename ( __FILE__ ) ) . '" />';
				// 自定义字段标题
				//echo '<h4>' . $meta_box ['title'] . '</h4>';
				// 自定义字段输入框
				// echo '<textarea cols="145" rows="6"
				// name="'.$meta_box['name'].'_value">'.$meta_box_value.'</textarea><br
				// />';
			}
		}
	}
}
// 保存数据
function save_postdata($post_id) {
	global $post, $_meta_boxes, $temp_name;
	if($_meta_boxes){
		foreach ($_meta_boxes as $key => $value){
			if($key == $post->page_template){
				if($value['element']){
					foreach ( $value['element'] as $meta_box ) {
						if (! wp_verify_nonce ( $_POST [$meta_box ['name'] . '_noncename'], plugin_basename ( __FILE__ ) )) {
							return $post_id;
						}
						if ('page' == $_POST ['post_type']) {
							if (! current_user_can ( 'edit_page', $post_id ))
								return $post_id;
						} else {
							if (! current_user_can ( 'edit_post', $post_id ))
								return $post_id;
						}
						$data = $_POST [$meta_box ['name'] . '_value'];
						if (get_post_meta ( $post_id, $meta_box ['name'] . '_value' ) == "")
							add_post_meta ( $post_id, $meta_box ['name'] . '_value', $data, true );
						elseif ($data != get_post_meta ( $post_id, $meta_box ['name'] . '_value', true ))
						update_post_meta ( $post_id, $meta_box ['name'] . '_value', $data );
						elseif ($data == "")
						delete_post_meta ( $post_id, $meta_box ['name'] . '_value', get_post_meta ( $post_id, $meta_box ['name'] . '_value', true ) );
					}
				}
			}
		}
	}
}
登录后复制

接下来就完事了…..我只是做了一个 例子, 希望大家给点意见或者更好的办法, 也希望我的办法能解决大家和我一样的情况….

忘了说:这只支持3.5版本, 要支持 3.4 需要改这里:

//因为3.5 里面get_page 可以返回 模板的值
$temp_name = $post->page_template;
//而且 3.4 里面并没有所以要用其他函数来获取.
$temp_name = get_post_meta( $post->ID, '_wp_page_template', true );
登录后复制

如上一改就行了~~~~

相关标签:
WPS零基础入门到精通全套教程!
WPS零基础入门到精通全套教程!

全网最新最细最实用WPS零基础入门到精通全套教程!带你真正掌握WPS办公! 内含Excel基础操作、函数设计、数据透视表等

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号