2017-09-19 125 views
0

我在添加媒體彈出窗口中創建一個複選框,以在插入圖像時將HTML添加到$ html輸出。Wordpress自定義添加媒體

這工作正常。但是,一旦我添加了選中複選框的圖像。如果我嘗試再次添加它,並取消選中該複選框,它將不會註冊或保存更改。

因此,總是輸出修改的圖像,而不是一旦未選中就恢復到WP默認值。

加上勾選後,我選擇了它,並插入到頁面將保持預選每次我選擇該圖像。

如何按預期方式製作取消選擇複選框功能?

非常感謝幫助。謝謝

class media_uploader_cb{ 

    function __construct(){ 
     // attach our function to the correct hook 
     add_filter('attachment_fields_to_edit', array($this, 'attachment_fields_to_edit'), 10, 2); 
     //save attachment field 
     add_filter('attachment_fields_to_save', array($this, 'attachment_fields_to_save'), 10, 2); 
     //add custom css class 
     add_filter('media_send_to_editor',  array($this, 'media_send_to_editor'), 10, 2); 
    } 

    /** 
    * Adding our custom checkbox field to the $form_fields array 
    * 
    * @param array $form_fields 
    * @param object $post 
    * @return array 
    */ 
    function attachment_fields_to_edit($form_fields, $post) { 
     $form_fields['add_class']['label'] = __("Add SEO Data"); 
     $form_fields['add_class']['input'] = 'html'; 
     $form_fields['add_class']['html'] = '<input type="checkbox" value="1" name="attachments['.$post->ID.'][add_class]" id="attachments['.$post->ID.'][add_class]" '.checked(1, get_post_meta($post->ID, 'add_class', true), false).'/>'; 
     return $form_fields; 
    } 


    /** 
    * Saving our custom checkbox field 
    * @param array $post 
    * @param array $attachment 
    * @return array 
    */ 
    function attachment_fields_to_save($post, $attachment) { 

     if(isset($attachment['add_class'])){ 
      update_post_meta($post['ID'], 'add_class', $attachment['add_class']); 
     } 
     return $post; 
    } 

    /** 
    * Adding our custom css class based on checkbox field 
    * 
    * @param string $html 
    * @param int $id 
    * @return string 
    */ 
    function media_send_to_editor($html, $id) { 
     //only add class if the checkbox was checked 
     if (1 == (int)get_post_meta($id, 'add_class', true)){ 
      //change this to whatever you want 
      $seo_data_to_add = 'custom="HTML Output Here""'; 

      // THIS SHOULD BE THE CHECKBOX 
      get_post_meta($id, 'add_class', true); 

      $attachment_title = get_the_title($id); 
      $title = 'title="'.$attachment_title .' by '. get_option('ews_opt_branding') .'"'; 
      $html = str_replace('<img', '<img '.$title.' '.$seo_data_to_add.'', $html); 
     } 
     return $html; 
    } 


} 

new media_uploader_cb(); 

回答

0

得到了另一個論壇的一些幫助。它激發了辦公室的一些頭腦風暴,我們想出了一個解決方案。不確定這是否是解決問題的最佳方法,但它按預期工作。我將此代碼:

delete_post_meta($id, 'add_class', true);

略高於:

return $html;

在最後一個函數的結尾,一切都正常行爲。如果有更好的解決方案,請告訴我。

相關問題