Make it Blason

Ich liebe Mikro-Plugins! Z.B. Change Attachment Parent (http://lacquerhead.ca/2009/07/change-attachment-parent/)> von Joel Sholdice, es hat nur 30 Zeilen Code, davon gehören 8 zum Header und zwei sind auskommentiert1 ; ideal um sich bestimmte Techniken an zueignen, da kein Ballast ablenkt.
Das Plugin bietet die Möglichkeit, ein Attachment an ein beliebiges Post oder Page (sog. Parent) anzuhängen, und fügt dazu dem Algorithmus zum Editieren von Attachments Code hinzu. Dies geschieht mit dem Befehl add_filter, und zwar muss man sich zwei Funktionen überlegen:

  1. Eine, die Formulare anbietet damit der Benutzer seine Daten eingeben kann (attachment_fields_to_edit) und
  2. eine, welche die Eingaben auswertet. attachment_fields_to_save

Auf der Suche war ich nach was ganz anderem, nämlich ein Plugin, mit dem man custom-fields für Attachments bearbeiten kann. Es ist nämlich so, dass meine Wappendaten-Bank in der Weise funktioniert, dass jedem Attachment zum Bild ein paar Custom Fields zugefügt werden, z.B. das Feld “blason”. Hat dieses den Wert 1, so wird es in der Datenbank als Wappen erkannt und in ihr geführt, wenn nicht, ist es ein ganz normales Attachment. Die bisherigen Einträge hatte mir das PHP Migrationsscript erstellt: es ging die in Form von csv Dateien vorliegenden Listen durch und setzte diese Wert mittlels einem Aufruf der Funktion

add_post_meta($id, $field, $new_value, $unique);

Mir fehlte aber noch eine einfache Möglichkeit, weitere Wappen in diese Liste aufzunehmen. Joël’s Plugin inspirierte mich dazu, meinem Heraldik-Plugin, noch (abgespeckt) die folgenden Zeilen hinzuzufügen:

Damit kann ich, wenn ich aus der Media Library ein Bild bearbeite, einfach bei “Blason” einen Haken machen, und schon wird das Bild in der Datenbank als Wappen geführt.
make it a blason

<?php
add_filter('attachment_fields_to_edit', 'add_makeitblason'    , 10, 2);
add_filter('attachment_fields_to_save', 'update_makeitblason' , 11, 2);

function add_makeitblason($form_fields, $post ){
    $id =$post->ID;
    $blason = get_post_custom_values('blason', $id);
    $checked = ($blason[0]==1)?"checked='checked'":'';
    $html    = "<input type='checkbox' name='attachments[$post->ID][blason]'";
    $html   .= "value='1' ".$checked." />" ;
    $form_fields['blason']=array(
        'tr'    =>'',
        'input' =>'html',
        'html'  =>$html,
        'helps' =>"In der Datenbank als Wappen f&uuml;hren?",
        'label' =>'blason?',
        );
    return $form_fields;
}
function update_makeitblason($post, $attachment){
    $id =$post[ID];
    $old_values     = get_post_custom_values('blason', $id);
    if ($attachment['blason']=='1') {
        if (!isset($old_values[0])) {
            //add_post_meta($id, $field, $new_value, false);
            add_post_meta($id, 'blason', 1, true); // it is a blason
        }
        //update_post_meta($post->ID, 'blason', 1, 0);
    }else {
        if (isset($old_values[0])) {
            //delete_post_meta($post_id, $key, $value);
            delete_post_meta($id, 'blason');
        }
    }
   return $post;
}?>

  1. wohl ein früherer Versuch []

2 thoughts on “Make it Blason

  1. Joel "laqrhead" says:

    Thanks for the shout-out and compliments. I don’t read German but got the gist of it thanks to Babelfish. I like your idea with the custom fields for the media library.

Leave a Reply

Your email address will not be published. Required fields are marked *