如何为多个帖子类型创建自定义字段?

时间:2011-12-15 作者:rpeg

我已经创建了多种帖子类型,现在想为每种帖子类型创建多个自定义字段。我不完全知道该怎么做,但更具体地说,我认为我在试图保存元字段数据时做错了什么。

我以本教程中的项目为基础:http://wefunction.com/2008/10/tutorial-creating-custom-write-panels-in-wordpress/

到目前为止,自定义字段为其中一种帖子类型(Project post type)正确保存。元数据不适用于其他帖子类型。

我的代码如下所示,但是查看教程和解释如何为多种帖子类型设置它可能更容易。

<?php 

    //Meta boxes with upload fields 


if ( is_admin() ) { 
    function add_post_enctype() { 
        echo "<script type=\'text/javascript\'> 
                  jQuery(document).ready(function(){ 
                      jQuery(\'#post\').attr(\'enctype\',\'multipart/form-data\'); 
                  }); 
              </script>"; 
    } 
    add_action(\'admin_head\', \'add_post_enctype\'); 
} 



//Project Meta Box Variable Array 

$project_meta_boxes = 
    array( 
        "start" => array( 
        "name" => "start", 
        "type" => "start" 
    ), 

    "image" => array( 
        "name" => "mainimage", 
        "std" => "", 
        "type" => "image", 
        "title" => "Main Image" 
    ),  

//END Project Meta Box Variable Array 



//Product Meta Box Variable Array 

$product_meta_boxes = 
    array( 
        "start" => array( 
        "name" => "start", 
        "type" => "start" 
    ),  

    "google_checkout" => array( 
        "name" => "google_checkout", 
        "std" => "", 
        "type" => "text", 
        "title" => "Google Checkout Link", 
        "description" => "Purchase Link" 
    ), 

        "end" => array( 
        "name" => "end", 
        "type" => "end" 
    ), 
); 

//END Product Meta Box Variable Array 





//Feature Meta Box Variable Array 

$feature_meta_boxes = 
    array( 
        "start" => array( 
            "name" => "start", 
            "type" => "start" 
        ),  

    "url" => array( 
        "name" => "url", 
        "std" => "", 
        "type" => "text", 
        "title" => "URL for featured item", 
        "description" => "URL" 
    ), 

    "feature_post_id" => array( 
        "name" => "feature_post_id", 
        "std" => "", 
        "type" => "text", 
        "title" => "Post ID for featured item", 
        "description" => "Post ID" 
    ), 

    "tagline" => array( 
        "name" => "tagline", 
        "std" => "", 
        "type" => "text", 
        "title" => "Tagline", 
        "description" => "Tagline to your post" 
    ), 

    "featureimage" => array( 
        "name" => "bannerimage", 
        "std" => "", 
        "type" => "image", 
        "title" => "Feature Image" 
    ),  

    "end" => array( 
        "name" => "end", 
        "type" => "end" 
    ), 
); 

//END Feature Meta Box Variable Array 





//Product Meta Boxes ========================= 
//============================================ 

function product_meta_boxes() { 
    global $post, $product_meta_boxes; 

    foreach($product_meta_boxes as $meta_box) { 
        $meta_box_value = get_post_meta($post->ID, $meta_box[\'name\'].\'\', true); 

        if($meta_box_value == "") 
        $meta_box_value = $meta_box[\'std\']; 

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

        echo "<div class=\'optionsbox\'><style type=\'text/css\'>.optionsbox { 
            display:block; 
            width:auto; 
            float:none; 
            overflow: hidden; 
        } 

        .optionsbox input, .optionsbox textarea { 
            outline:none; 
            padding:5px; 
            color:#999; 
        } 

        .optionsbox input:focus, .optionsbox textarea:focus { 
            border-color:#999; 
            color:#666; 
        } 

        .optionsbox p { 
            margin-bottom:20px; 
        } 

        .optionsbox label { 
            width:140px; 
            display:block; 
            float:left; 
            margin-top:3px; 
        } 

        .optionsbox small { 
            padding-left:140px; 
            padding-top:3px; 
            color:#999; 
        } 
        </style>"; 

        } else if($meta_box[\'type\'] == "end") {  
            echo \'</div>\'; 
        } else if($meta_box[\'type\'] == "image") {  
            echo $meta_box[\'before\']; 
            echo \'<div style="background:#f4f4f4;padding:10px;height:120px;margin:0 0 20px 0;display:block">\'; 

            if($meta_box_value) {  
                echo \'<img style="float:right" src="\'.get_bloginfo(\'template_directory\').\'/scripts/timthumb.php?src=\'.$meta_box_value.\'&w=120&h=120" alt="" />\';  
            } 

            echo\'<p><label for="\'.$meta_box[\'name\'].\'_upload">\'.$meta_box[\'title\'].\'</label>\'; 
            echo\'<input type="file" name="\'.$meta_box[\'name\'].\'_upload" size="55" /><br />\'; 
            echo\'<small>Upload image here</small></p>\'; 

            echo\'<p><label>&nbsp;</label>\'; 
            echo\'<input type="text" name="\'.$meta_box[\'name\'].\'" value="\'.$meta_box_value.\'" size="55" /><br />\'; 
            echo\'<small>or add a URL to the image here</small></p>\'; 

            echo \'</div>\'; 

        } else if($meta_box[\'type\'] == "text") {  
            echo $meta_box[\'before\']; 

            echo\'<p style="margin-bottom:20px;"><label style="width:140px;display:block;float:left;margin-top:3px;" for="\'.$meta_box[\'name\'].\'">\'.$meta_box[\'title\'].\'</label>\'; 
            echo\'<input style="color:#666;" type="text" name="\'.$meta_box[\'name\'].\'" value="\'.$meta_box_value.\'" size="55" /><br />\'; 
            echo\'<small style="padding-left:140px;padding-top:3px;">\'.$meta_box[\'description\'].\'</small></p>\'; 

        } else if($meta_box[\'type\'] == "checkbox") {  

            echo $meta_box[\'before\']; 
            echo\'<p style="margin-bottom:20px;"><label style="width:140px;display:block;float:left;margin-top:3px;" for="\'.$meta_box[\'name\'].\'">\'.$meta_box[\'title\'].\'</label>\'; 
            if($meta_box_value) {  
                $checked = "checked=\\"checked\\"";  
            } else {  
                $checked = "";  
            } 
            echo \'<input style="display:block;float:left;width:20px;margin:5px 0 0 0;" \'.$checked.\' type="checkbox" name="\'.$meta_box[\'name\'].\'" /><br/>\'; 
            echo\'<small style="clear:both;padding-left:140px;padding-top:3px;display:block;">\'.$meta_box[\'description\'].\'</small></p>\'; 

        } else if($meta_box[\'type\'] == "textarea") {  

            echo $meta_box[\'before\']; 
            echo\'<p style="margin-bottom:20px;"><label style="width:140px;display:block;float:left;margin-top:3px;" for="\'.$meta_box[\'name\'].\'">\'.$meta_box[\'title\'].\'</label>\'; 
            echo\'<textarea style="color:#666;" name="\'.$meta_box[\'name\'].\'" cols="50" rows="4">\'.stripslashes($meta_box_value).\'</textarea><br />\'; 
            echo\'<small style="padding-left:140px;padding-top:3px;">\'.$meta_box[\'description\'].\'</small></p>\'; 

        }  

    } 
} 








//Project Meta Boxes ========================= 
//============================================ 

function project_meta_boxes() { 
    global $post, $project_meta_boxes; 

    foreach($project_meta_boxes as $meta_box) { 
        $meta_box_value = get_post_meta($post->ID, $meta_box[\'name\'].\'\', true); 

        if($meta_box_value == "") 
        $meta_box_value = $meta_box[\'std\']; 

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

        echo "<div class=\'optionsbox\'><style type=\'text/css\'>.optionsbox { 
            display:block; 
            width:auto; 
            float:none; 
            overflow: hidden; 
        } 

        .optionsbox input, .optionsbox textarea { 
            outline:none; 
            padding:5px; 
            color:#999; 
        } 

        .optionsbox input:focus, .optionsbox textarea:focus { 
            border-color:#999; 
            color:#666; 
        } 

        .optionsbox p { 
            margin-bottom:20px; 
        } 

        .optionsbox label { 
            width:140px; 
            display:block; 
            float:left; 
            margin-top:3px; 
        } 

        .optionsbox small { 
            padding-left:140px; 
            padding-top:3px; 
            color:#999; 
        } 
        </style>"; 

        } else if($meta_box[\'type\'] == "end") {  
            echo \'</div>\'; 
        } else if($meta_box[\'type\'] == "image") {  
            echo $meta_box[\'before\']; 
            echo \'<div style="background:#f4f4f4;padding:10px;height:120px;margin:0 0 20px 0;display:block">\'; 

            if($meta_box_value) {  
                echo \'<img style="float:right" src="\'.get_bloginfo(\'template_directory\').\'/scripts/timthumb.php?src=\'.$meta_box_value.\'&w=120&h=120" alt="" />\';  
            } 

            echo\'<p><label for="\'.$meta_box[\'name\'].\'_upload">\'.$meta_box[\'title\'].\'</label>\'; 
            echo\'<input type="file" name="\'.$meta_box[\'name\'].\'_upload" size="55" /><br />\'; 
            echo\'<small>Upload image here</small></p>\'; 

            echo\'<p><label>&nbsp;</label>\'; 
            echo\'<input type="text" name="\'.$meta_box[\'name\'].\'" value="\'.$meta_box_value.\'" size="55" /><br />\'; 
            echo\'<small>or add a URL to the image here</small></p>\'; 

            echo \'</div>\'; 

        } else if($meta_box[\'type\'] == "text") {  
            echo $meta_box[\'before\']; 

            echo\'<p style="margin-bottom:20px;"><label style="width:140px;display:block;float:left;margin-top:3px;" for="\'.$meta_box[\'name\'].\'">\'.$meta_box[\'title\'].\'</label>\'; 
            echo\'<input style="color:#666;" type="text" name="\'.$meta_box[\'name\'].\'" value="\'.$meta_box_value.\'" size="55" /><br />\'; 
            echo\'<small style="padding-left:140px;padding-top:3px;">\'.$meta_box[\'description\'].\'</small></p>\'; 

        } else if($meta_box[\'type\'] == "checkbox") {  

            echo $meta_box[\'before\']; 
            echo\'<p style="margin-bottom:20px;"><label style="width:140px;display:block;float:left;margin-top:3px;" for="\'.$meta_box[\'name\'].\'">\'.$meta_box[\'title\'].\'</label>\'; 
            if($meta_box_value) {  
                $checked = "checked=\\"checked\\"";  
            } else {  
                $checked = "";  
            } 
            echo \'<input style="display:block;float:left;width:20px;margin:5px 0 0 0;" \'.$checked.\' type="checkbox" name="\'.$meta_box[\'name\'].\'" /><br/>\'; 
            echo\'<small style="clear:both;padding-left:140px;padding-top:3px;display:block;">\'.$meta_box[\'description\'].\'</small></p>\'; 

        } else if($meta_box[\'type\'] == "textarea") {  

            echo $meta_box[\'before\']; 
            echo\'<p style="margin-bottom:20px;"><label style="width:140px;display:block;float:left;margin-top:3px;" for="\'.$meta_box[\'name\'].\'">\'.$meta_box[\'title\'].\'</label>\'; 
            echo\'<textarea style="color:#666;" name="\'.$meta_box[\'name\'].\'" cols="50" rows="4">\'.stripslashes($meta_box_value).\'</textarea><br />\'; 
            echo\'<small style="padding-left:140px;padding-top:3px;">\'.$meta_box[\'description\'].\'</small></p>\'; 

        }  

    } 
} 




//Feature Meta Boxes ========================= 
//============================================ 

function feature_meta_boxes() { 
    global $post, $feature_meta_boxes; 

    foreach($feature_meta_boxes as $meta_box) { 
        $meta_box_value = get_post_meta($post->ID, $meta_box[\'name\'].\'\', true); 

        if($meta_box_value == "") 
        $meta_box_value = $meta_box[\'std\']; 

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

        echo "<div class=\'optionsbox\'><style type=\'text/css\'>.optionsbox { 
            display:block; 
            width:auto; 
            float:none; 
            overflow: hidden; 
        } 

        .optionsbox input, .optionsbox textarea { 
            outline:none; 
            padding:5px; 
            color:#999; 
        } 

        .optionsbox input:focus, .optionsbox textarea:focus { 
            border-color:#999; 
            color:#666; 
        } 

        .optionsbox p { 
            margin-bottom:20px; 
        } 

        .optionsbox label { 
            width:140px; 
            display:block; 
            float:left; 
            margin-top:3px; 
        } 

        .optionsbox small { 
            padding-left:140px; 
            padding-top:3px; 
            color:#999; 
        } 
        </style>"; 

        } else if($meta_box[\'type\'] == "end") {  
            echo \'</div>\'; 
        } else if($meta_box[\'type\'] == "image") {  
            echo $meta_box[\'before\']; 
            echo \'<div style="background:#f4f4f4;padding:10px;height:120px;margin:0 0 20px 0;display:block">\'; 

            if($meta_box_value) {  
                echo \'<img style="float:right" src="\'.get_bloginfo(\'template_directory\').\'/scripts/timthumb.php?src=\'.$meta_box_value.\'&w=120&h=120" alt="" />\';  
            } 

            echo\'<p><label for="\'.$meta_box[\'name\'].\'_upload">\'.$meta_box[\'title\'].\'</label>\'; 
            echo\'<input type="file" name="\'.$meta_box[\'name\'].\'_upload" size="55" /><br />\'; 
            echo\'<small>Upload image here</small></p>\'; 

            echo\'<p><label>&nbsp;</label>\'; 
            echo\'<input type="text" name="\'.$meta_box[\'name\'].\'" value="\'.$meta_box_value.\'" size="55" /><br />\'; 
            echo\'<small>or add a URL to the image here</small></p>\'; 

            echo \'</div>\'; 

        } else if($meta_box[\'type\'] == "text") {  
            echo $meta_box[\'before\']; 

            echo\'<p style="margin-bottom:20px;"><label style="width:140px;display:block;float:left;margin-top:3px;" for="\'.$meta_box[\'name\'].\'">\'.$meta_box[\'title\'].\'</label>\'; 
            echo\'<input style="color:#666;" type="text" name="\'.$meta_box[\'name\'].\'" value="\'.$meta_box_value.\'" size="55" /><br />\'; 
            echo\'<small style="padding-left:140px;padding-top:3px;">\'.$meta_box[\'description\'].\'</small></p>\'; 

        } else if($meta_box[\'type\'] == "checkbox") {  

            echo $meta_box[\'before\']; 
            echo\'<p style="margin-bottom:20px;"><label style="width:140px;display:block;float:left;margin-top:3px;" for="\'.$meta_box[\'name\'].\'">\'.$meta_box[\'title\'].\'</label>\'; 
            if($meta_box_value) {  
                $checked = "checked=\\"checked\\"";  
            } else {  
                $checked = "";  
            } 
            echo \'<input style="display:block;float:left;width:20px;margin:5px 0 0 0;" \'.$checked.\' type="checkbox" name="\'.$meta_box[\'name\'].\'" /><br/>\'; 
            echo\'<small style="clear:both;padding-left:140px;padding-top:3px;display:block;">\'.$meta_box[\'description\'].\'</small></p>\'; 

        } else if($meta_box[\'type\'] == "textarea") {  

            echo $meta_box[\'before\']; 
            echo\'<p style="margin-bottom:20px;"><label style="width:140px;display:block;float:left;margin-top:3px;" for="\'.$meta_box[\'name\'].\'">\'.$meta_box[\'title\'].\'</label>\'; 
            echo\'<textarea style="color:#666;" name="\'.$meta_box[\'name\'].\'" cols="50" rows="4">\'.stripslashes($meta_box_value).\'</textarea><br />\'; 
            echo\'<small style="padding-left:140px;padding-top:3px;">\'.$meta_box[\'description\'].\'</small></p>\'; 

        }  

    } 
} 








//Create Meta Boxes 

function create_meta_box() { 
    global $theme_name; 

    // Create Meta boxes for Project Post Type 
    if ( function_exists(\'add_meta_box\') ) { 
        foreach ( array(\'projects\') as $type ) { 
            add_meta_box( \'project-meta-boxes\', \'Project Options\', \'project_meta_boxes\', $type, \'normal\', \'high\' ); 
        } 
    } 

    // Create Meta boxes for Product Post Type 
    if ( function_exists(\'add_meta_box\') ) { 
        foreach ( array(\'products\') as $type ) { 
            add_meta_box( \'product-meta-boxes\', \'Product Options\', \'product_meta_boxes\', $type, \'normal\', \'high\' ); 
        } 
    } 

    // Create Meta boxes for Feature Post Type 
    if ( function_exists(\'add_meta_box\') ) { 
        foreach ( array(\'features\') as $type ) { 
            add_meta_box( \'feature-meta-boxes\', \'Feature Options\', \'feature_meta_boxes\', $type, \'normal\', \'high\' ); 
        } 
    } 


} 


function save_postdata( $post_id ) { 
    global $post, $project_meta_boxes, $product_meta_boxes, $feature_meta_boxes; 
    $post_id = wp_is_post_revision($post_id); 


    //Project 
    foreach($project_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; 
        } 

    $imageuploadlocation = ""; 
    $metaboxname = ""; 
    $metaboxname_upload = ""; 

    if($meta_box[\'type\'] == \'image\') { 

        $metaboxname = $meta_box[\'name\']; 
        $metaboxname_upload = $metaboxname.\'_upload\'; 

    if($_FILES[$metaboxname_upload][\'name\'] != "") { 
        $overrides = array( \'test_form\' => false); 
        $imagefile=wp_handle_upload($_FILES[$metaboxname_upload], $overrides); 
        $imageuploadlocation = $imagefile[\'url\']; 
        delete_post_meta($post_id, $metaboxname, get_post_meta($post_id, $metaboxname, true)); 
        add_post_meta($post_id, $metaboxname, $imageuploadlocation, true); 
    } else { 
        $imageuploadlocation = get_post_meta($post_id, $metaboxname, true); 
        delete_post_meta($post_id, $metaboxname, get_post_meta($post_id, $metaboxname, true)); 
        add_post_meta($post_id, $metaboxname, $_POST[$metaboxname], true); 
    }  

    } else { 
        $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)); 
    } 

    } 




    //Product 
    foreach($product_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; 
        } 

    $imageuploadlocation = ""; 
    $metaboxname = ""; 
    $metaboxname_upload = ""; 

    if($meta_box[\'type\'] == \'image\') { 

        $metaboxname = $meta_box[\'name\']; 
        $metaboxname_upload = $metaboxname.\'_upload\'; 

    if($_FILES[$metaboxname_upload][\'name\'] != "") { 
        $overrides = array( \'test_form\' => false); 
        $imagefile=wp_handle_upload($_FILES[$metaboxname_upload], $overrides); 
        $imageuploadlocation = $imagefile[\'url\']; 
        delete_post_meta($post_id, $metaboxname, get_post_meta($post_id, $metaboxname, true)); 
        add_post_meta($post_id, $metaboxname, $imageuploadlocation, true); 
    } else { 
        $imageuploadlocation = get_post_meta($post_id, $metaboxname, true); 
        delete_post_meta($post_id, $metaboxname, get_post_meta($post_id, $metaboxname, true)); 
        add_post_meta($post_id, $metaboxname, $_POST[$metaboxname], true); 
    }  

    } else { 
        $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)); 
    } 

    } 





    //Feature 
    foreach($feature_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; 
        } 

    $imageuploadlocation = ""; 
    $metaboxname = ""; 
    $metaboxname_upload = ""; 

    if($meta_box[\'type\'] == \'image\') { 

        $metaboxname = $meta_box[\'name\']; 
        $metaboxname_upload = $metaboxname.\'_upload\'; 

    if($_FILES[$metaboxname_upload][\'name\'] != "") { 
        $overrides = array( \'test_form\' => false); 
        $imagefile=wp_handle_upload($_FILES[$metaboxname_upload], $overrides); 
        $imageuploadlocation = $imagefile[\'url\']; 
        delete_post_meta($post_id, $metaboxname, get_post_meta($post_id, $metaboxname, true)); 
        add_post_meta($post_id, $metaboxname, $imageuploadlocation, true); 
    } else { 
        $imageuploadlocation = get_post_meta($post_id, $metaboxname, true); 
        delete_post_meta($post_id, $metaboxname, get_post_meta($post_id, $metaboxname, true)); 
        add_post_meta($post_id, $metaboxname, $_POST[$metaboxname], true); 
    }  

    } else { 
        $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\', 12); 
?>

2 个回复
最合适的回答,由SO网友:Brent 整理而成

我刚刚深入研究了我构建的最后两个WordPress项目,深入研究了自定义帖子类型和自定义字段,这两个项目经常使用后端的元盒来实现。

在上一个项目中,我全力以赴地使用WP Alchemy metabox class 用于WordPress。它不是一个真正的插件,而是一个PHP类,它借助WordPress,允许您在管理中为页面、帖子和自定义帖子类型创建元框字段。

直到我几乎完成了这个项目,我才遇到贾斯汀·塔多克的straight forward approach to metaboxes. 尽管如此,WP Alchemy类有一些很好的附加功能,我很好地利用了这些功能,所以我仍然建议在Justin的教程之上使用它,但这两个都是很好的读物,可以让你朝着正确的方向前进。

SO网友:kaiser

我猜你也是php新手。。。

查看create_meta_box 函数和以下行:

foreach ( array(\'projects\') as $type ) {
我想这说明了一切。。。

结束

相关推荐