• 黄聪:wordpress后台发布文章,自定义栏目和字段


    添加一个独立的模块,每次添加文章就更方便了。。

    第一步,我们要添加代码,我们把代码放在一个独立的php文件中,先新建一个php文件,比如ash_add_box.php  ,然后在function.php中添加代码加载那个php文件:

    <?php require_once(TEMPLATEPATH . '/ash_add_box.php');?>  

    文件名可随意,注意路径。我这里两个文件都在主题文件夹下。。接下来的工作都是变价ash_add_box.php文件。。在ash_add_box.php中只添加一对<?php  ?>标签就行了,后面所有代码都<?php  ?>之间。

    第二步:首先添加下面两行代码,两个钩子:

    add_action('admin_menu', 'create_meta_box');   
    //在加载管理员界面界面的时候调用create_meta_box函数   
    add_action('save_post', 'save_postdata');   
    //在保存文章的时候调用save_postdata函数  

    自定义模块是在后台,所以在加载管理员界面的时候就调用函数,我们添加这些信息主要是写文章的时候,所以保存文章的时候要调用函数保存文章数据。首先定义变量来存储我们的信息:

          $new_meta_box = array(   
            "description" => array(   
                "name"=>"description",   
                "std"=>"默认描述",   
                "title"=>"描述:"  
            ),   
            "keywords" => array(   
            "name"=>"keywords",   
            "std"=>"默认关键字",   
            "title"=>"关键字:"  
            )      
        );  

    接着添加create_meta_box函数   :

    function create_meta_box(){   
            //先判断函数是否存在   
            if(function_exists('add_meta_box')){   
                //add_meta_box函数在文章编辑页面内添加版块,具体用法放在文章最后   
                add_meta_box('new-meta-box','自定义模块','new_meta_box','post','normal','high');   
                //此函数调用new_meta_box函数   
            }   
        }  

    再添加new_meta_box函数 ,这个函数就是定义模板样式,也就是输出模板的html代码:

    function new_meta_box(){   
            global $post,$new_meta_box;   
            foreach($new_meta_box 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'];   
                echo '<input type="hidden" name="'.$meta_box['name'].'_noncename" id="'.$mata_box['name'].'_noncename" value="'.wp_create_nonce( plugin_basename(__FILE__) ).'"/>';   
                echo '<h4>'.$meta_box['title'].'</h4>';   
                echo '<textarea cols="60" rows="3" name="'.$meta_box['name'].'_value">'.$meta_box_value.'</textarea><br/>';   
            }   
        }  

    有了上面的函数你就可以在后台看到自定义模板了。

    下面就是我们开始添加的钩子中的保存数据的钩子,也就是save_postdata函数 :

    function save_postdata($post_id){   
            global $post,$new_meta_box;   
            foreach($new_meta_box 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));   
            }   
        }  

    到了这里基本工作就完成了,剩下的就是页面调用了,更上一篇文章调用自定义字段一样。

    但是注意这里我们在save_postdata函数中保存数据的函数 add_post_meta()和更新数据的函数 update_post_meta中,字段名称是$meta_box['name']._value也就是分别是description_value 、keywords_value,所以调用的时候:

        $desc="description_value";   
        $key="keywords_value";   
        $description=get_post_meta($post->ID,$desc,true);   
        $keywords=get_post_meta($post->ID,$key,true);  

  • 相关阅读:
    PHP入门
    PHP入门
    PHP入门
    BatsingJSLib 2.3、Ajax上传多个文件
    href的那些事
    从校招网申看华为
    单片机C语言探究--为什么变量最好要赋初值
    Linux学习笔记-Ubuntu添加右键菜单打开终端
    重载--面向对象的鸡肋,强类型语言的软肋
    vs2015发布项目到虚拟主机组策略阻止csc.exe程序问题
  • 原文地址:https://www.cnblogs.com/huangcong/p/2592894.html
Copyright © 2020-2023  润新知