Ich stimme David-Binda zu - tolle Frage! Ich bin mehrmals auf dieses Problem gestoßen und habe eine Lösung gefunden, die ziemlich gut funktioniert. Ich mag zwar die Idee, einen Shortcode hinzuzufügen, um das Bild mit Klassen einzufügen, wie von pavlos-bizimis vorgeschlagen, aber ich denke nicht, dass dies das Problem so elegant löst wie das Hinzufügen von Optionen zum Bildbearbeitungs-Popup (zum Beispiel müssten Sie wahrscheinlich Wickeln Sie das Bild in Ihren Shortcode ein, es sei denn, Sie möchten eine Bild-ID manuell eingeben. Für einige meiner Kunden ist sogar ein Shortcode zu kompliziert (in diesem Fall können Sie ihn natürlich an einen TinyMCE-Button binden).
Wie auch immer, ohne weiteres - hier sind meine fünf Cent. Ich verwende diese Lösung in einem Diashow-Plugin, mit dem ich das Bild in die Diashow einschließen / ausschließen und eine Hintergrundfarbe für eine Überlagerung festlegen kann, die den Inhalt einiger Bildmetafelder anzeigt. Grundsätzlich wird es in attachment_fields_to_edit
und attachment_fields_to_save
um die Eingabefelder hinzuzufügen und die Formulardaten jeweils zu speichern. Diese Daten sind als Standard-Post-Meta für den Anhangspost verfügbar (dh das Bild, das Sie bearbeiten). Dies ist großartig, da es einfach ist, es get_post_meta()
wie gewohnt abzurufen . Außerdem sollten Sie einen Filter hinzufügen wp_get_attachment_image_attributes
oder image_send_to_editor
hinzufügen, mit dem Sie bei jeder Bildausgabe automatisch die entsprechende Klasse hinzufügen können.
Ich habe den Code aus Gründen der Lesbarkeit leicht geändert, sodass einige Teile möglicherweise unvollständig / fehlerhaft sind.
/**
* Adds a form field for excluding images from slideshow
*
* @param array $form_fields Array of form fields
* @param object $post The post to show
* @return array Array of form fields
* @author Simon Fransson
**/
function hs_attachment_fields_to_edit($form_fields, $post = null)
{
$val = (boolean)get_post_meta($post->ID, SLIDESHOW_EXCLUDE_IMAGE_KEY, true);
$id = SLIDESHOW_EXCLUDE_IMAGE_KEY . "-" . $post->ID;
$markup = sprintf('<label for="%s"><input type="checkbox" class="checkbox" id="%s" name="attachments[%s][%s]" value="true" %s /> %s</label>', $id, $id, $post->ID, SLIDESHOW_EXCLUDE_IMAGE_KEY, checked($val, true, false), __('Exclude from slideshow', 'slideshow'));
$form_field = array(
'label' => __('Slideshow', 'slideshow'),
'input' => 'html',
'html' => $markup,
'value' => $val,
'helps' => __('Excludes the image from slideshows.', 'slideshow'),
);
$form_fields[SLIDESHOW_EXCLUDE_IMAGE_KEY] = $form_field; // See update notice below code block!
return $form_fields;
}
add_filter('attachment_fields_to_edit', 'hs_attachment_fields_to_edit', 10, 2);
/**
* Save the images exclude status meta value when saving attachment data
*
* @param object $post Post object
* @param array $attachment Field values
* @return object Post object
* @author Simon Fransson
**/
function hs_attachment_fields_to_save($post, $attachment = null)
{
update_post_meta($post['ID'], SLIDESHOW_EXCLUDE_IMAGE_KEY, intval(isset($attachment[SLIDESHOW_EXCLUDE_IMAGE_KEY])));
return $post;
}
add_filter('attachment_fields_to_save', 'hs_attachment_fields_to_save', 10, 2);
/**
* Generate metadata for newly uploaded attachment.
* This is here simply because we are dealing with a boolean,
* which means that for SQL related reasons a value NEEDS to
* exist even when noting has been specified in the options
*
* @param array $metadata Array of meta data
* @param int $attachment_id ID of attachment post
* @return array Array of meta data
* @author Simon Fransson
**/
function hs_generate_attachment_metadata($metadata, $attachment_id = null)
{
$exclude = intval(get_post_meta($attachment_id, SLIDESHOW_EXCLUDE_IMAGE_KEY, true));
update_post_meta($attachment_id, SLIDESHOW_EXCLUDE_IMAGE_KEY, $exclude);
return $metadata;
}
add_filter('wp_generate_attachment_metadata', 'hs_generate_attachment_metadata', 10, 2);
UPDATE : Ich habe diesen Code gerade kopiert, um ihn als Boilerplate in einem Projekt zu verwenden, an dem ich arbeite. Wie Sie wahrscheinlich anhand des Codes erkennen können, möchte ich meine Post-Meta-Schlüssel in definierten Konstanten speichern. Wenn ich das mache, stelle ich den Wert immer voran _
, um zu verhindern, dass er im Meta-Feld-Editor angezeigt wird, aber diese Vorgehensweise kann einige Probleme mit verursachen attachment_fields_to_save
. Schlüssel im $form_fields
Array können nicht mit beginnen_
. Achten Sie daher darauf, beim Umgang mit Anhangsfeldern unterschiedliche Schlüssel für das Array und die Metawerte zu verwenden oder Unterstriche zu kürzen. Da dies SLIDESHOW_EXCLUDE_IMAGE_KEY
in meinem Beispiel nicht einmal definiert ist, ist dies beim Kopieren des Codes wahrscheinlich keine große Sache, aber ich dachte, ich würde es trotzdem erwähnen. Ich habe eine Weile gebraucht, um das herauszufinden (und das zum zweiten Mal).