WordPress 3.5 attachment_fields_to_edit und media_send_to_editor

In der vorherigen Version habe ich ein neues Check-Feld in das Medienfenster mit einem einfachen Code gesetzt

function ab_prettyphoto_attachment_fields_to_edit( $form_fields, $post ) { $my_form_fields = array( 'ab_prettyphoto' => array( 'label' => __('Automatic Zoom on click', 'ab_prettyphoto'), 'input' => 'html', 'html' => " ID}' id='ab_prettyphoto-{$post->ID}' value='1' /> " ) ); if( $post->post_mime_type == 'image/jpeg' OR $post->post_mime_type == 'image/gif' OR $post->post_mime_type == 'image/png' OR $post->post_mime_type == 'image/tiff') return array_merge( $form_fields, $my_form_fields ); else return $form_fields; } add_filter( 'attachment_fields_to_edit', 'ab_prettyphoto_attachment_fields_to_edit', 100, 2 ); 

Und ich schicke dem Herausgeber den Wert des Schecks mit

 function ab_prettyphoto_send_to_editor( $html, $send_id, $attachment ) { if( isset($_POST["ab_prettyphoto-$send_id"]) ) $title=($_POST['attachments'][$send_id]['post_title']); return str_replace('<a', '<a rel="prettyPhoto-img" title="'.$title.'"', $html); } else return $html; } add_filter( 'media_send_to_editor', 'ab_prettyphoto_send_to_editor', 66, 3 ); 

Im neuen WP35 funktionieren die attachment_fields_to_edit, aber der media_send_to_editor nicht: Im $ _POST Array ist der Schlüssel “ab_prettyphoto- $ send_id” nicht vorhanden und ich habe bei Firebug einen wp-ajax.php Aufruf gesehen, wenn ich auf das Kontrollkästchen klicke. Die Werte von $ _SPOST array in die function ab_prettyphoto_send_to_editor (gestartet von media_send_editor) sind (der Wert wie zum Beispiel)

  Array ( [nonce] => 125ece740a [attachment] => Array ( [id] => 4 [post_content] => [post_excerpt] => [url] => http://localhost:8888/wpn/wp-content/uploads/2012/12/fotohome.jpg [align] => left [image-size] => thumbnail [image_alt] => fotohome ) [html] => fotohome [post_id] => 1 [action] => send-attachment-to-editor ) 

Der $ _POST [ab_pretythyphoto ….] wird nicht gesendet

Ich habe einige Dokumente im Internet über das Problem gefunden, aber ich habe nicht f

Solutions Collecting From Web of "WordPress 3.5 attachment_fields_to_edit und media_send_to_editor"

Es gibt also einige Dinge, die anders funktionieren (jetzt).

I. Was Sie bemerkt haben, wenn Sie auf das Kontrollkästchen WordPress klicken, sendet eine Ajax-Anfrage an ‘wp_ajax_save_attachment_compat ()’ mit einigen Formulardaten. Wenn Ihr Kontrollkästchen aktiviert ist, wird diese Information Teil der Formulardaten sein.

‘wp_ajax_save_attachment_compat ()’ sucht nach $ _REQUEST [‘attachments’] und $ _REQUEST [‘attachments’] [$ id] und schlägt fehl, wenn es nicht existiert.

Das bedeutet, dass Sie Ihr Eingabefeld ändern müssen zu:

  

II. Nun wird dies alle Prüfungen in ‘wp_ajax_save_attachment_compat’ passieren und kommt zu einem nützlichen Filter: (das ist Zeile 1930 in ajax-actions.php)

 $post = apply_filters( 'attachment_fields_to_save', $post, $attachment_data ); 

Sie können diesen Filter verwenden, um Ihre Felddaten als Post-Meta zu dem Anhang hinzuzufügen, später werden Sie prüfen, ob dieser Post-Meta existiert und Ihre Aktion ausführen, wenn sie wahr ist:

 add_filter('attachment_fields_to_save', 'wpse76219_add_meta',10,2); function wpse76219_add_meta($post, $attachment_data){ // use this filter to add post meta if key exists or delete it if not if ( !empty($attachment_data['ab_prettyphoto']) && $attachment_data['ab_prettyphoto'] == '1' ) update_post_meta($post['ID'], 'ab_prettyphoto', true); else delete_post_meta($post['ID'], 'ab_prettyphoto'); // return $post in any case, things will break otherwise return $post; } 

III. Im letzten Schritt verwenden Sie ‘media_send_to_editor’, um zu prüfen, ob Ihre Metadaten vorhanden sind. Wenn Sie den Wert true haben, führen Sie eine String-Manipulation durch, andernfalls geben Sie das Original zurück:

 add_filter('media_send_to_editor', 'wpse76219_send_to_editor', 10,3); function wpse76219_send_to_editor( $html, $id, $att) { $is_set = get_post_meta($id,'ab_prettyphoto', true); if ($is_set and $is_set == '1') return str_replace(' 

Ihre isset () muss sein:

 isset($_POST['attachments'][$send_id]['ab_prettyphoto'])