有朋自远方来,不亦乐乎。
为wordpress添加metabox模块
原创 橘子书  17 Aug/23 3.39K 6 A+

自带的meta box模块功能,在我看来就跟shortcode(短代码)一样强大。

因此一般而言,一个强大的主题后台框架,都会包含以下三个方面的面板:themes-option、、shortcode。

以前,我或多或少都有介绍到themes-option跟shortcode:

轻量级主题后台框架

折腾主题,免不了要接触到主题的后台框架。 有能力的大神自己写,惰惫的大神二开或者套用市面上的开源主题框架。至于小白...

发布时间:2017/06/26 作者:橘子书 评论:4
WordPress 文章内链短代码

文章内链短代码这个功能,我最早是在banyuner.com(帅气小琦琦)里遇见。只是后来才知道大发贱志有写过一篇教程。 不过当...

发布时间:2017/06/24 作者:橘子书 评论:6
WordPress 文章内引用评论

早上在大发贱志的博客,看到一篇关于引用评论短代码的技术文章,觉得太牛了。 港真的,在文章内插入评论内容的小功能真心...

发布时间:2017/06/23 作者:bigfa 评论:5
纯代码写一个图文短代码

本来今天想安安静静地当个睡男子,然后没想到折腾了一天的代码(主要是去拆代码玩。) 然后吧,晚上龙笑天下问我知更鸟《...

发布时间:2016/11/20 作者:橘子书 评论:0
纯代码实现“自媒体吸粉神器”

前几天推荐了“微信公众号涨粉”插件,本来想就此作罢。 今天突然觉得很多人可能会更需要代码版的吸粉神器,毕竟都是一群爱...

发布时间:2016/10/08 作者:橘子书 评论:0

辣么,今天就说一下如何为wordpress写metabox模块。

文章自定义字段metabox模块

以文章的自定义字段为例,只需将以下的代码扔到functions函数,或者新建一个php文件,然后在functions引入该文件:

$new_meta_boxes =
array(
	"description" => array(
		"name" => "description",
		"std" => "",
		"title" => "SEO文章描述(留空,则自动截取首段一定字数作为文章描述)",
		"type"=>"textarea"),

	"keywords" => array(
		"name" => "keywords",
		"std" => "",
		"title" => "SEO文章关键词,多个关键词用半角逗号隔开(留空,则以文章标签TAG为关键词)",
		"type"=>"text"),

);

// 面板内容
function new_meta_boxes() {
    global $post, $new_meta_boxes;
	//获取保存
    foreach($new_meta_boxes as $meta_box) {
        $meta_box_value = get_post_meta($post->ID, $meta_box['name'].'', true);

        if($meta_box_value != "")
        	//将默认值替换为已保存的值
            $meta_box['std'] = $meta_box_value;

        echo'<input type="hidden" name="'.$meta_box['name'].'_noncename" id="'.$meta_box['name'].'_noncename" value="'.wp_create_nonce( plugin_basename(__FILE__) ).'" />';

        //选择类型输出不同的html代码
        switch ( $meta_box['type'] ){
            case 'title':
                echo'<h4>'.$meta_box['title'].'</h4>';
                break;
			case 'text':
                echo'<h4>'.$meta_box['title'].'</h4>';
                echo '<span class="form-field"><input type="text" size="40" name="'.$meta_box['name'].'" value="'.$meta_box['std'].'" /></span><br />';
                break;
            case 'textarea':
                echo'<h4>'.$meta_box['title'].'</h4>';
                echo '<textarea cols="60" rows="3" name="'.$meta_box['name'].'">'.$meta_box['std'].'</textarea><br />';
                break;
            case 'radio':
                echo'<h4>'.$meta_box['title'].'</h4>';
                $counter = 1;
                foreach( $meta_box['buttons'] as $radiobutton ) {
                    $checked ="";
                    if(isset($meta_box['std']) && $meta_box['std'] == $counter) {
                        $checked = 'checked = "checked"';
                    }
                    echo '<input '.$checked.' type="radio" class="kcheck" value="'.$counter.'" name="'.$meta_box['name'].'_value"/>'.$radiobutton;
                    $counter++;
                }
				break;
            case 'checkbox':
                if( isset($meta_box['std']) && $meta_box['std'] == 'true' )
                    $checked = 'checked = "checked"';
                else
                    $checked  = '';
                echo '<br /><input type="checkbox" name="'.$meta_box['name'].'" value="true"  '.$checked.' />';
                echo'<label>'.$meta_box['title'].'</label><br />';
				break;
        }
    }
}

// 创建面板
function create_meta_box() {
    global $theme_name;

    if ( function_exists('add_meta_box') ) {
        add_meta_box( 'new-meta-boxes', '文章相关设置', 'new_meta_boxes', 'post', 'normal', 'high' );
    }
}

// 保存数据
function save_postdata( $post_id ) {
    global $post, $new_meta_boxes;

    foreach($new_meta_boxes 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'].''];

        if(get_post_meta($post_id, $meta_box['name'].'') == "")
            add_post_meta($post_id, $meta_box['name'].'', $data, true);
        elseif($data != get_post_meta($post_id, $meta_box['name'].'', true))
            update_post_meta($post_id, $meta_box['name'].'', $data);
        elseif($data == "")
            delete_post_meta($post_id, $meta_box['name'].'', get_post_meta($post_id, $meta_box['name'].'', true));
    }
}

// 触发
add_action('admin_menu', 'create_meta_box');
add_action('save_post', 'save_postdata'); 

页面自定义字段metabox模块

以页面关键词、描述的自定义字段为例,只需将以下的代码扔到functions函数,或者新建一个php文件,然后在functions引入该文件:

$new_meta_page_boxes =
array(
	"description" => array(
		"name" => "description",
		"std" => "",
		"title" => "文章描述(留空,则自动截取首段一定字数作为文章描述)",
		"type"=>"textarea"),

	"keywords" => array(
		"name" => "keywords",
		"std" => "",
		"title" => "文章关键词,多个关键词用半角逗号隔开(留空,则以文章标签TAG为关键词)",
		"type"=>"text")
);

// 面板内容
function new_meta_page_boxes() {
    global $post, $new_meta_page_boxes;
	//获取保存
    foreach($new_meta_page_boxes as $meta_box) {
        $meta_box_value = get_post_meta($post->ID, $meta_box['name'].'', true);

        if($meta_box_value != "")
        	//将默认值替换为已保存的值
            $meta_box['std'] = $meta_box_value;

        echo'<input type="hidden" name="'.$meta_box['name'].'_noncename" id="'.$meta_box['name'].'_noncename" value="'.wp_create_nonce( plugin_basename(__FILE__) ).'" />';

        //选择类型输出不同的html代码
        switch ( $meta_box['type'] ){
            case 'title':
                echo'<h4>'.$meta_box['title'].'</h4>';
                break;
			case 'text':
                echo'<h4>'.$meta_box['title'].'</h4>';
                echo '<span class="form-field"><input type="text" size="40" name="'.$meta_box['name'].'" value="'.$meta_box['std'].'" /></span><br />';
                break;
            case 'textarea':
                echo'<h4>'.$meta_box['title'].'</h4>';
                echo '<textarea cols="60" rows="3" name="'.$meta_box['name'].'">'.$meta_box['std'].'</textarea><br />';
                break;
            case 'radio':
                echo'<h4>'.$meta_box['title'].'</h4>';
                $counter = 1;
                foreach( $meta_box['buttons'] as $radiobutton ) {
                    $checked ="";
                    if(isset($meta_box['std']) && $meta_box['std'] == $counter) {
                        $checked = 'checked = "checked"';
                    }
                    echo '<input '.$checked.' type="radio" class="kcheck" value="'.$counter.'" name="'.$meta_box['name'].'_value"/>'.$radiobutton;
                    $counter++;
                }
				break;
            case 'checkbox':
                if( isset($meta_box['std']) && $meta_box['std'] == 'true' )
                    $checked = 'checked = "checked"';
                else
                    $checked  = '';
                echo '<br /><input type="checkbox" name="'.$meta_box['name'].'" value="true"  '.$checked.' />';
                echo'<label>'.$meta_box['title'].'</label><br />';
				break;
        }
    }
}

function create_meta_page_box() {
    global $theme_name;

    if ( function_exists('add_meta_box') ) {
        add_meta_box( 'new-meta-boxes', '页面SEO设置', 'new_meta_page_boxes', 'page', 'normal', 'high' );
    }
}

function save_page_postdata( $post_id ) {
    global $post, $new_meta_page_boxes;

    foreach($new_meta_page_boxes 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'].''];

        if(get_post_meta($post_id, $meta_box['name'].'') == "")
            add_post_meta($post_id, $meta_box['name'].'', $data, true);
        elseif($data != get_post_meta($post_id, $meta_box['name'].'', true))
            update_post_meta($post_id, $meta_box['name'].'', $data);
        elseif($data == "")
            delete_post_meta($post_id, $meta_box['name'].'', get_post_meta($post_id, $meta_box['name'].'', true));
    }
}

add_action('admin_menu', 'create_meta_page_box');
add_action('save_post', 'save_page_postdata'); 

——以上代码摘自懿古今的《nana主题

至于其他的自定义字段写法,请自行模仿里面的代码例子。

延伸阅读

其实只要将一些相关的文章,汇总连贯起来,有心的博友应该会发现:一个轻量级的简单主题后台框架,已经成形(ps:再新建一个shortcode.php,把部署短代码功能的代码统一放到一起)。

纯代码为wordpress添加站点关键词与描述

站点的关键词与描述,应该算是最基础的SEO了。 然而,我并不懂SEO。 前几天在折腾(二开)一个板子,发现页首(head)...

发布时间:2017/08/22 作者:橘子书 评论:10

昨天写的文章,跟今天的文章有点挂钩。唔,两篇文章配合到一块,就是一个SEO功能(网站关键词与描述)的实现。

阅读全文

目前评论:6   其中:访客  3   博主  3

发表评论

莫慌,小狮子正在努力加载评论...
  1. 励志语录
    励志语录1 ( 2017.08.24 13:19:00 )  地板

    代码,完全看不懂啊!

    觉得很不错。

  2. 在线看小说
    在线看小说1 ( 2017.08.23 23:08:35 )  板凳

    这个有点意思,对SEO应该有用吧

  3. 东不正
    东不正2 ( 2017.08.23 22:14:03 )  沙发

    前排就坐!