wordpress给博客主题添加自定义主题设置页面

如果想给主题添加自定义的主题页面呢?

先来看看Ryan’s提供的方法:如何在wordpress主题中添加设置页面。

读完这篇文章,相信我们已经可以为主题添加一个主题设置页面了,嗯,但是好像还有些问题:

    如何在顶级菜单中添加多个设置页面?
    设置页面中我想添加css和js,怎么实现?
    必须要把那么多的代码都写在functions文件中吗?
    要让使用者选择文章分类,自定义页面,图片上传等等复杂的业务选项呢?

ok,下面我们动手来解决上面几个问题:
先看最终实现的效果:

先看最终实现的效果:

 

 

 

 

 

注:以下代码较长,如有密集恐惧症者慎入,头晕恶心,偶感不适者可下载代码包后酌情考虑!
下载源代码包:options.zip
1、添加顶级菜单和子菜单

在functions.php中加入以下代码:

    <?php
    
    //添加设置菜单,注意add_menu_page和add_submenu_page的写法
    //参考:http://lizhenzhen8911.blog.163.com/blog/static/96400189201292442712309/
    add_action('admin_menu', 'options_admin_menu');
    function options_admin_menu(){
    add_menu_page( '主题设置', '主题设置', 'administrator', 'base-settings', 'BaseSettings', '', 100);
    add_submenu_page('base-settings', '基本设置', '基本设置', 'administrator', 'base-settings', 'BaseSettings');
    add_submenu_page('base-settings', '高级设置', '高级设置', 'administrator', 'advanced-settings', 'AdvancedSettings');
    }
    
    //加载设置文件
    add_action('admin_head', 'OptionFile');
    function OptionFile(){
    require_once( get_template_directory() . '/inc/option.php' ); //代码解耦
    }
    
    ?>

然后我们在主题根目录下面新建一个inc文件夹,并新建option.php放入其中,加入以下代码:

    <?php /**主题设置项更新页面**/
    
    //成功提示
    define('SuccessInfo','<div class="updated"><p><strong>设置已保存。</strong></p></div>');
    
    //基本设置
    function BaseSettings(){
    if ($_POST['update_options']=='true') {
    // 数据更新验证
    update_option('text-demo', $_POST['text-demo']); //input
    update_option('textarea-demo', $_POST['textarea-demo']); //textarea
    update_option('select-demo', $_POST['select-demo']); //select
    if ($_POST['checkbox-demo']=='on') { $display = 'checked'; } else { $display = ''; }
    update_option('checkbox-demo', $display); //checkbox
    echo SuccessInfo;
    }
    require_once(get_template_directory().'/inc/base.php'); //代码解耦
    add_action('admin_menu', 'BaseSettings');
    }
    
    //高级设置
    function AdvancedSettings(){
    if ($_POST['update_options']=='true') {
    update_option('categories-demo', $_POST['categories-demo']); //Categories
    update_option('pages-demo', $_POST['pages-demo']); //Pages
    update_option('upload-demo', $_POST['upload-demo']); //Upload
    echo SuccessInfo;
    }
    require_once(get_template_directory().'/inc/advanced.php'); //代码解耦
    add_action('admin_menu', 'AdvancedSettings');
    }
    
    ?>

在inc文件夹下新建base.php,加入以下代码:

    <div class="wrap">
    <h2>基本设置</h2>
    <form method="POST" action="">
    <input type="hidden" name="update_options" value="true" />
    
    <table class="form-table">
    <tbody>
    <tr valign="top">
    <th scope="row"><label for="text-demo">文本框(text)示例</label></th>
    <td>
    <input type="input" name="text-demo" id="text-demo" class="regular-text" value="<?php echo get_option('text-demo'); ?>" />
    <p class="description">说明文字</p>
    </td>
    </tr>
    <tr valign="top">
    <th scope="row"><label for="textarea-demo">文本域(textarea)示例</label></th>
    <td><textarea name="textarea-demo" id="textarea-demo" class="large-text"><?php echo get_option('textarea-demo'); ?></textarea></td>
    </tr>
    <tr valign="top">
    <th scope="row"><label>下拉列表(Select)示例</label></th>
    <td><select name ="select-demo">
    <?php $colour = get_option('select-demo'); ?>
    <option value="gray" <?php if ($colour=='gray') { echo 'selected'; } ?>>灰色</option>
    <option value="blue" <?php if ($colour=='blue') { echo 'selected'; } ?>>浅蓝</option>
    </select></td>
    </tr>
    <tr valign="top">
    <th scope="row"><label for="checkbox-demo">复选框(checkbox)示例</label></th>
    <td><input type="checkbox" name="checkbox-demo" id="checkbox-demo" <?php echo get_option('checkbox-demo'); ?> /> 任何人都可以注册</td>
    </tr>
    </tbody>
    </table>
    <p><input type="submit" class="button-primary" name="admin_options" value="更新数据"/></p>
    </form>
    </div>

在inc下新建advanced.php,加入以下代码:

    <div class="wrap">
    <h2>高级设置</h2>
    <form method="POST" action="">
    <input type="hidden" name="update_options" value="true" />
    
    <table class="form-table">
    <tbody>
    <tr valign="top">
    <th scope="row">选择文章分类</th>
    <td>
    <?php wp_dropdown_categories(array('name' =>'categories-demo','hide_empty' => 0,'orderby' => 'name','show_count' => 1,'selected' =>get_option('categories-demo'),'hierarchical' => true,'show_option_none' =>'全部分类','echo' => 1)); ?>
    </td>
    </tr>
    <tr valign="top">
    <th scope="row">选择页面</th>
    <td><?php wp_dropdown_pages(array('name' =>'pages-demo')); ?></td>
    </tr>
    <tr valign="top">
    <th scope="row">图片选择&图片上传</th>
    <td><input type="text" name="upload-demo" value="<?php echo get_option('upload-demo'); ?>"/><a id="upload-demo" class="cp_upload_button button" href="#">上传</a></td>
    </tr>
    </tbody>
    </table>
    <p><input type="submit" class="button-primary" name="admin_options" value="更新数据"/></p>
    </form>
    </div>
    <?php wp_enqueue_media(); ?> <!-- 必须 -->
    <script>
    //调用媒体库上传图片
    jQuery(document).ready(function(){
    var upload_frame;
    var value_id;
    jQuery('.cp_upload_button').live('click',function(event){
    value_id =jQuery( this ).attr('id');
    event.preventDefault();
    if( upload_frame ){
    upload_frame.open();
    return;
    }
    upload_frame = wp.media({
    title: '选择图片',
    button: {
    text: '插入',
    },
    multiple: false
    });
    upload_frame.on('select',function(){
    attachment = upload_frame.state().get('selection').first().toJSON();
    jQuery('input[name='+value_id+']').val(attachment.url);
    //jQuery('img').attr("src",attachment.url);//图片预览
    });
    
    upload_frame.open();
    });
    });
    </script>

注意在wordpress后台中,jQuery的控制权并没有移交给$,所以不能直接是用$代替,可参考《wordpress插件后台界面中如何使用JQuery》。

2、添加自定义css和js

需要添加自定义的css和js可在主函数文件(functions.php)中通过add_action(“admin_print_styles”)函数实现,示例如下:

    //后台自定义选项样式
    add_action("admin_print_styles", "OptionsStyle" );
    function OptionsStyle(){
    wp_enqueue_style( "admin_css", get_template_directory_uri() . "/inc/options.css" );
    }

Over!以上代码只说明了一个大概的流程,代码也做了解耦处理,便于二次开发和维护。如果发现错误或者更好的实现办法,请不吝赐教。

时间: 2024-10-21 09:16:56

wordpress给博客主题添加自定义主题设置页面的相关文章

新浪wordpress云博客插件跟主题上传问题

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 新浪推出来的云平台为我们想做wordpress博客的朋友们提供了很大的帮助,这样就不需要自己买空间跟域名,直接借助新浪云这个平台建立自己的二级域名博客了,虽然是二级域名的博客,但是这样的博客推广总比第三方平台的博客要好的多.下面来讲一下新浪云博客是怎么上传主题跟插件的吧. 其实一开始都比较简单,只要注册账号,然后再云平台的"应用仓库

WordPress 更改博客主题后的注意事项

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 WordPress博客主题繁多,安装使用一个主题一段时间后难免会更换新的博客主题,但是更改博客主题并不是上传安装即可,还需要注意一些事项,下面博客吧介绍下WordPress更改博客主题后需要注意哪些事项. 1.浏览器兼容 由于各个浏览器之间的差异,和主题作者没有每个浏览器进兼容bug处理,所以部分主题会对某些浏览器有不兼容的现象,会出现错位.

阿里云ECS服务器搭建wordpress个人博客网站【详细图文教程】

阿里云ECS服务器搭建wordpress个人博客网站[小白专用的图文教程] 在阿里云上搭建使用个人博客主要分为以下几个步骤: 1.购买阿里云ECS主机 2.购买域名 3.申请备案 4.环境配置 5.安装wordpress 6.域名解析 声明一下,本人对服务器端的知识不是很熟悉,但一心想做个自己的个人网站装一下哔,特此记录一下完整的配置过程,也算是给其他小白们的一剂福利吧.   开发环境: 物理机版本:Win 7 旗舰版(64位) xshell版本:Xshell 5 Build 0806 xftp

PS设计教程之制作WordPress新闻博客模板

通常在第一次制作新闻博客模板,很难把握方向.这篇教程将为你提供如何在Adobe Photoshop中制作WordPress新闻博客主题的参考.该主题包括页眉区,图片轮换区域(包含特色文章,最近消息,按照分类显示,侧边栏,widget).如果你是初学者,跟着本教程一步一步来就可以.如果你有一定基础,亦可从本教程中获得新的收获. 点击图片,进行全屏预览. 本教程需用到的资源 · Search · 社交图标 第1步:创建文档 在PS中创建一个1200像素 x 1700像素的文档 标尺工具在本教程中非常

PS设计制作WordPress新闻博客模板

通常在第一次制作新闻博客模板,很难把握方向.这篇教程将为你提供如何在Adobe Photoshop中制作WordPress新闻博客主题的参考.该主题包括页眉区,图片轮换区域(包含特色文章,最近消息,按照分类显示,侧边栏,widget).如果你是初学者,跟着本教程一步一步来就可以.如果你有一定基础,亦可从本教程中获得新的收获. 点击图片,进行全屏预览. 本教程需用到的资源 · Search · 社交图标 第1步:创建文档 在PS中创建一个1200像素 x 1700像素的文档 标尺工具在本教程中非常

wordpress开源博客主题开发文件结构讲解

下面是WordPress主题文件层次结构,它会告诉你:当WordPress显示特定的页面类型时,会使用哪个模板文件呢?只有了解了以下主题层次结构,你才能知道你的WordPress主题到底需要写哪些文件. 怎么看下面的文件层次结构? 以主页为例,下面有2个文件home.php和index.php,WordPress程序会从你的主题文件夹中依次查找这两个文件:         如果找到home.php,则使用home.php作为博客首页模板,即使你的主题文件夹中有index.php:        

WordPress搭建博客优化技巧

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 WordPress是世界上使用最多的博客程序,现在每天有成千上万的人选择WordPress来搭建属于自己的独立博客.在这样的网络环境下,我 们如何让自己的博客更加符合搜索引擎的胃口呢?在接下来的文章里我将会分享如何快速的对WordPress 进行搜索引擎优化,让你的网站对搜索引擎更加友好.如果你已经知道一些技巧并且使用了,那么下面这些技巧可以

如何使用阿里云虚拟主机搭建博客(三)设置篇

七.博客设置 安装好博客系统后我们下面就通过登录进入仪表盘开设置网站内容 提示:关于博客设置这里就介绍通用的功能,因为你使用的主题的设置都不太一样,需要你去探索,所以这里只介绍些常用的功能: 下面我们首先进行主题安装 漂亮主题可以吸引更多人来访问你的博客,当然文章也要精彩哟!! 方式一 直接登录后台上传主题压缩包安装主题.具体流程:进入后台点击左侧导航菜单中外观->主题->安装主题->上传->选择文件(主题压缩包)->现在安装,安装完成后启用即可. 方式二 搜索主题安装.具体

WordPress独立博客防黑入门浅析

中介交易 SEO诊断淘宝客 站长团购 云主机 技术大厅 根据最新消息,到了3721.html">2014年病毒增长规模首次成为近年来的高点,这说明现在的网络安全并没有想象中那么强,特别是现在很多自媒体的拥趸,由于很多自媒体专家都并非专业的网络技术出身,很多都是新闻记者或者各种写手,所以计算机网站维护水平还是相对较差,这就导致了这些独立博客成了黑客攻击的重要场所. 特别是当前在搭建个人独立博客方面最为出色的WordPress平台,更是成了黑客攻击的重点,因此加强WordPress平台的防黑能