2013-08-29 36 views
0

我想提出一個WordPress的metabox,我想知道的metabox的HTML部分是如何設法找到保存function.Here是我使用的全部代碼工作如何WordPress的metabox設法找到保存功能

<?php 
function true_add_a_metabox() { 
    add_meta_box(
     'true_metabox', // metabox ID, it also will be it id HTML attribute 
     'The Detailed Custom Meta Box', // title 
     'true_display_metabox', // this is a callback functions, which will be print HTML of our metabox 
     'post', // post type 
     'normal', // position of the screen where metabox shoul be displayed (normal, side, advanced) 
     'default' // priority over another metaboxes on this page (default, low, high, core) 
    ); 
} 

add_action('admin_menu', 'true_add_a_metabox'); 

function true_display_metabox($post) { 
    /* 
    * needs for security checks 
    */ 
    wp_nonce_field(basename(__FILE__), 'true_metabox_nonce'); 
    /* 
    * lets add a simple textarea field 
    */ 
    $html .= '<p><label>SEO title <input type="text" name="seotitle" value="' . get_post_meta($post->ID, 'true_title',true) . '" /></label></p>'; 
    /* 
    * add a checkbox 
    */ 
    $html .= '<p><label><input type="checkbox" name="noindex"'; 
    $html .= (get_post_meta($post->ID, 'true_noindex',true) == 'on') ? ' checked="checked"' : ''; 
    $html .= ' /> Turn of page visibility for search engines</label></p>'; 
    /* 
    * print all of this 
    */ 
    echo $html; 
} 

function true_save_post_meta($post_id, $post) { 
    /* 
    * Security checks 
    */ 
    if (!isset($_POST['true_metabox_nonce']) || !wp_verify_nonce($_POST['true_metabox_nonce'], basename(__FILE__))) 
     return $post_id; 
    /* 
    * Check current user permissions 
    */ 
    $post_type = get_post_type_object($post->post_type); 
    if (!current_user_can($post_type->can->edit_post, $post_id)) 
     return $post_id; 
    /* 
    * Check if the autosave 
    */ 
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) 
     return $post_id; 

    if ($post->post_type == 'post') { // define your own post type here 
     update_post_meta($post_id, 'true_title', esc_attr($_POST['seotitle'])); 
     update_post_meta($post_id, 'true_noindex', $_POST['noindex']); 
    } 
    return $post_id; 
} 

add_action('save_post', 'true_save_post_meta', 10, 2); 

?> 

在生成html true_display_metabox的函數中,沒有提及true_save_post_meta它可以保存選項。任何人都可以解釋這個metabox如何管理保存數據嗎?

回答

2

您在save_post動作(在您的代碼的最後一行)致電true_save_post_meta。這意味着每次保存帖子時,true_save_post_meta函數都會運行。來自您的元框的數據將包含在$_POST對象中,然後true_save_post_meta用於將這些值保存到數據庫中。