2011-06-20 5 views
1

これは私の関数である:テンプレートでこのメタボックス機能を使用するにはどうすればいいですか? (ワードプレス)

$prefix = 'dbt_'; 

$meta_box = array(
    'id' => 'my-meta-box', 
    'title' => 'Custom meta box', 
    'page' => 'post', 
    'context' => 'normal', 
    'priority' => 'high', 
    'fields' => array(
     array(
      'name' => 'Checkbox', 
      'id' => $prefix . 'checkbox', 
      'type' => 'checkbox' 
     ) 
    ) 
); 

add_action('admin_menu', 'mytheme_add_box'); 

// Add meta box 
function mytheme_add_box() { 
    global $meta_box; 

    add_meta_box($meta_box['id'], $meta_box['title'], 'mytheme_show_box', $meta_box['page'], $meta_box['context'], $meta_box['priority']); 
} 

// Callback function to show fields in meta box 
function mytheme_show_box() { 
    global $meta_box, $post; 

    // Use nonce for verification 
    echo '<input type="hidden" name="mytheme_meta_box_nonce" value="', wp_create_nonce(basename(__FILE__)), '" />'; 

    echo '<table class="form-table">'; 

    foreach ($meta_box['fields'] as $field) { 
     // get current post meta data 
     $meta = get_post_meta($post->ID, $field['id'], true); 

     echo '<tr>', 
       '<th style="width:20%"><label for="', $field['id'], '">', $field['name'], '</label></th>', 
       '<td>'; 
     switch ($field['type']) { 
      case 'checkbox': 
       echo '<input type="checkbox" name="', $field['id'], '" id="', $field['id'], '"', $meta ? ' checked="checked"' : '', ' />'; 
       break; 
     } 
     echo '<td>', 
      '</tr>'; 
    } 

    echo '</table>'; 
} 

add_action('save_post', 'mytheme_save_data'); 

// Save data from meta box 
function mytheme_save_data($post_id) { 
    global $meta_box; 

    // verify nonce 
    if (!wp_verify_nonce($_POST['mytheme_meta_box_nonce'], basename(__FILE__))) { 
     return $post_id; 
    } 

    // check autosave 
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { 
     return $post_id; 
    } 

    // check permissions 
    if ('page' == $_POST['post_type']) { 
     if (!current_user_can('edit_page', $post_id)) { 
      return $post_id; 
     } 
    } elseif (!current_user_can('edit_post', $post_id)) { 
     return $post_id; 
    } 

    foreach ($meta_box['fields'] as $field) { 
     $old = get_post_meta($post_id, $field['id'], true); 
     $new = $_POST[$field['id']]; 

     if ($new && $new != $old) { 
      update_post_meta($post_id, $field['id'], $new); 
     } elseif ('' == $new && $old) { 
      delete_post_meta($post_id, $field['id'], $old); 
     } 
    } 
} 

私は、チェックボックスをチェックすると、私のテンプレートにこのコードを使用しよう:

<?php if ($meta_box = get_post_meta($post->ID, "checkbox", true)) : ?> 
Show this when checkbox checked 
<?php endif; ?> 

そして、それは

+0

任意のこのコードを試してみてください? plssssssss – l2aelba

+0

「待っている人には良いことがすべて来ます」 - 2番目の注記:正確には機能しないものについて具体的に説明できますか?私が気づいたいくつかのこと:カンマでPHPの文字列を連結することはできません。チェックボックスは、通常、「1」として送信され、「true」では送信されません。これが何をするのか説明できますか? '($ new && $ new!= $ old)'? – polarblau

答えて

1

仕事doesntのあなたは、あなたが持っている必要があります答えは今のところですが、この行は手がかりを与えるべきです:

if文を次のように変更してください:

$meta_box = get_post_meta($post->ID, dbt_checkbox, true) 

お手伝いが必要です。

0

だけ

<?php 
add_action('admin_init', 'my_admin_samplepost'); 
function my_admin_samplepost() { 
    add_meta_box('samplepost_meta_box', 'Car Details', 'display_samplepost_meta_box','samplepost', 'normal', 'high'); 
} 
function display_samplepost_meta_box($samplepost) { 
    ?> 
    <h4>General Details</h4> 
    <table width="100%"> 
     <tr> 
      <td style="width: 25%">Monthly Paymeny</td> 
      <td><input type="text" style="width:425px;" name="meta[payment]" value="<?php echo esc_html(get_post_meta($samplepost->ID, 'payment', true));?>" /> 
      </td> 
     </tr> 
     <tr> 
      <td>Price ($)</td> 
      <td><input type="text" style="width:425px;" name="meta[price]" placeholder="$" value="<?php echo esc_html(get_post_meta($samplepost->ID, 'price', true));?>" /> 
      </td> 
     </tr> 
     <tr> 
      <td>Milage</td> 
      <td><input type="text" style="width:425px;" name="meta[milage]" value="<?php echo esc_html(get_post_meta($samplepost->ID, 'milage', true));?>" /> 
      </td> 
     </tr> 
    </table> 
<?php 
} 
add_action('save_post', 'add_samplepost_fields', 10, 2); 
function add_samplepost_fields($samplepost_id, $samplepost) { 
    if ($samplepost->post_type == 'samplepost') { 
     if (isset($_POST['meta'])) { 
      foreach($_POST['meta'] as $key => $value){ 
       update_post_meta($samplepost_id, $key, $value); 
      } 
     } 
    } 
}