2012-12-05 100 views
2

我試圖創建一個只有4個圖像的自定義文章類型,但我有一些麻煩。 這是儲蓄,但我做了一些改變,現在我認爲它甚至不這樣做。 (不,它根本沒有上傳/保存。)WordPress定製文章不保存圖像在自定義元框

另一個問題是,即使我存儲的url只接收文件名。 我一直在廣泛搜索(除了一些其他的基本信息,這是我今天所做的所有工作),我發現的大多數答案都是不同的,並且不管用。

我已經查閱了法典中的所有功能,並且理解了它們,並且我無法爲我的生活找出什麼是錯誤的。 如果你願意,請給我發消息我很樂意向你發送wp用戶名和密碼,以便你可以查看管理員。 (這是一個臨時網站的那一刻)

非常感謝,比利

<?php add_action('init', 'create_post_type'); 
function create_post_type() { 
    register_post_type('bwd_project', 
     array(
      'labels' => array(
       'name' => __('Projects'), 
       'singular_name' => __('Project'), 
       'add_new' => 'Add new Project', 
       'add_new_item' => 'Add New Project', 
       'edit' => 'Edit', 
       'edit_item' => 'Edit Project', 
       'new_item' => 'New Project', 
       'view' => 'View', 
       'view_item' => 'View Project', 
       'search_items' => 'Search Projects', 
       'not_found' => 'No Projects found', 
       'not_found_in_trash' => 'No Projects found in Trash', 
       'parent' => 'Parent Project' 
      ), 
     'public' => true, 
     'has_archive' => true, 
     'rewrite' => array('slug' => 'projects'), 
     'menu_position' => 20, 
     'supports' => array('title','thumbnail'), 
     ) 
    ); 
} 
add_action('admin_init' , 'my_admin'); 

function my_admin(){ 
    add_meta_box('project_meta_box', 
     'New Project', 
     'display_project_meta_box', 
     'bwd_project', 
     'normal','high' 
    ); 
} 

function display_project_meta_box() { 
    global $post; 
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return $post_id; 
    $project = get_post_custom($post->ID); 
    $logo = $project["logo"][0]; 
    $img1 = $project["img1"][0]; 
    $img2 = $project["img2"][0]; 
    $img3 = $project["img3"][0]; 

    ?> 
    <table> 
     <tr> 
     <?php print_r($project); ?> 
     </tr> 
     <tr> 
      <td><strong>Project logo</strong></td> 
     </tr> 
     <tr> 
      <td><img src="<?php echo $logo; ?>" /></td> 
     </tr> 
     <tr> 
      <td><input type="file" name="logo" value="<?php echo $logo; ?>"/></td> 
     </tr> 
     <tr></tr> 
     <tr> 
      <td><strong>Image 1</strong></td> 
      <td><strong>Image 2</strong></td> 
      <td><strong>Image 3</strong></td> 
     </tr>  

     <tr> 
      <td><img src="<?php echo $img1; ?>" /></td> 
      <td><img src="<?php echo $img2; ?>" /></td> 
      <td><img src="<?php echo $img3; ?>" /></td> 
     </tr> 
     <tr> 
      <td><input type="file" name="img2" value="<?php echo $img2; ?>"/></td> 
      <td><input type="file" name="img1" value="<?php echo $img1; ?>"/></td> 
      <td><input type="file" name="img3" value="<?php echo $img3; ?>"/></td> 
     </tr> 


    </table> <?php 

} 

add_action('save_post', 'save_project_link'); 
function save_project_link(){ 
    global $post; 
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE){ 
     return $post_id; 
    }else{ 

     if (!empty($_FILES['logo']['name'])) { 
      $upload_overrides = array('test_form' => false); 
      $upload = wp_handle_upload($_FILES['logo'], $upload_overrides); 
      if (!isset($upload['error'])) { 

       update_post_meta($post->ID, "logo", $upload['url']); 
      } 
     } 
    } 
} 




?> 

編輯:在我的代碼改了幾個無關緊要的事情。

另外,對於獎金愛情,誰能告訴我一個簡單的方法來保存圖像(4次),還是我必須單獨做這件事?

+0

問題顯然是在save_post一部分,我發現那裏是一個問題是防止'wp_update_metadata()上傳錯誤'。 我用'wp_update_metadata($ post-> ID,'logo',$ upload);'得到錯誤,其中包含「a:1:{s:5:」error「; s:24:」無效的表單提交。「;}」,但我想不出爲什麼會發生這種情況? – Bill

回答

0

有幾件事我覺得這是缺乏的。首先,你需要添加隱藏字段的輸入類型要顯示,或多或少是這樣的:

echo '<input type="hidden" name="custom_meta_box_nonce" value="'.wp_create_nonce(basename(__FILE__)).'" />'; 

如果我是你,如果你是在PHP 5.3運行,我會用傑弗里路的自定義信息與已經內置的metabox和分類法一起提供,您只需爲每個自定義帖子創建實例變量。它使得部署該網站的速度更快。有去這個:

https://github.com/JeffreyWay/Easy-WordPress-Custom-Post-Types

+0

爲什麼我需要一個隱藏的輸入,它有什麼作用?和'wp_create_nonce(basename(__ FILE __))'做了什麼? 另外,我正在努力盡可能地做到這一點,以便儘可能地學習。 – Bill

+0

這是驗證確實顯示來自具有適當授權的用戶。 順便說一句,如果你想更多的自定義帖子,我也建議看看這個: http://www.deluxeblogtips.com/2010/04/how-to-create-meta-box-wordpress-post。 HTML –