Wie kann ich dem Anlagenfenster ein URL-Feld hinzufügen?

Beispielsweise…

add_action('init', 'reg_tax'); function reg_tax() { register_taxonomy_for_object_type('category', 'attachment'); } 

Fügt dem Medienmanager und dem Anlageneditor ein Eingabefeld “Kategorie” hinzu. Ich würde gerne wissen, ob es möglich ist, diese function zu ändern, um stattdessen eine “Link-Ziel” -URL zu erfassen. Die URL würde ausgeführt werden, wenn auf das Bild geklickt wird.

Außerdem müssen Sie wissen, wie Sie den Wert für dieses neue Feld abrufen können.

UPDATE: Danke an Thomas Antwort unten, hier ist meine endgültige Lösung …

 function my_image_attachment_fields_to_edit($form_fields, $post) { $form_fields["custom1"] = array( "label" => __("Image Links To"), "input" => "text", "value" => get_post_meta($post->ID, "_custom1", true) ); return $form_fields; } function my_image_attachment_fields_to_save($post, $attachment) { if( isset($attachment['custom1']) ){ update_post_meta($post['ID'], '_custom1', $attachment['custom1']); } return $post; } add_filter("attachment_fields_to_edit", "my_image_attachment_fields_to_edit", null, 2); add_filter("attachment_fields_to_save", "my_image_attachment_fields_to_save", null, 2); 

Solutions Collecting From Web of "Wie kann ich dem Anlagenfenster ein URL-Feld hinzufügen?"

Ich verwende ein sehr grobes Plugin, um Informationen über den Künstler und eine URL zu Mediendateien hinzuzufügen. Es braucht ein paar Optimierungen (und ich brauche die Zeit), aber es funktioniert und kann zeigen, wie Sie die zusätzlichen Felder hinzufügen und wie Sie sie in Ihrem Thema verwenden:

 < ?php /* Plugin Name: Toscho's Media Artist Field Description: Adds two field to attachments – Artist and Artist URL – and adds this information to captions. Version: 0.1 Author: Thomas Scholz Author URI: http://toscho.de Created: 19.09.2010 */ $Toscho_Media_Artist = new Toscho_Media_Artist( array ( 'artist_name' => array ( 'public' => 'toscho_artist_name' , 'hidden' => '_toscho_artist_name' , 'label' => 'Fotograf (Name)' ) , 'artist_url' => array ( 'public' => 'toscho_artist_url' , 'hidden' => '_toscho_artist_url' , 'label' => 'Fotograf (URL)' ) ) , 'Foto: ' ); /** * Adds two fields for credits to any media file: name and URL. * * Based on the clear tutorial by Andy Blackwell: * @link http://net.tutsplus.com/?p=13076 * * @author "Thomas Scholz" * */ class Toscho_Media_Artist { public $fields = array ( 'artist_name' => array ( 'public' => 'toscho_artist_name' , 'hidden' => '_toscho_artist_name' , 'label' => 'Artist Name' ) , 'artist_url' => array ( 'public' => 'toscho_artist_url' , 'hidden' => '_toscho_artist_url' , 'label' => 'Artist URL' ) ) // Maybe its own field? , $caption_prefix , $br_before = TRUE; public function __construct( $fields = array() , $caption_prefix = 'Source: ' , $br_before = TRUE ) { $this->fields = array_merge($this->fields, $fields); $this->caption_prefix = $caption_prefix; $this->br_before = (bool) $br_before; $this->set_filter(); } public function set_filter() { add_filter( 'attachment_fields_to_edit' , array ( $this, 'add_fields' ) , 15 , 2 ); add_filter( 'attachment_fields_to_save' , array ( $this, 'save_fields' ) , 10 , 2 ); add_filter( 'img_caption_shortcode' , array ( $this, 'caption_filter' ) , 1 , 3 ); } public function add_fields($form_fields, $post) { foreach ( $this->fields as $field) { $form_fields[ $field['public'] ]['label'] = $field['label']; $form_fields[ $field['public'] ]['input'] = 'text'; $form_fields[ $field['public'] ]['value'] = get_post_meta( $post->ID , $field['hidden'] , TRUE ); } return $form_fields; } public function save_fields($post, $attachment) { foreach ( $this->fields as $field) { if ( isset ( $attachment[ $field['public'] ]) ) { update_post_meta( $post['ID'] , $field['hidden'] , $attachment[ $field['public'] ] ); } } return $post; } public function caption_filter($empty, $attr, $content = '') { /* Typical input: * [caption id="attachment_525" align="aligncenter" * width="300" caption="The caption."] * [/caption] */ extract( shortcode_atts( array ( 'id' => '' , 'align' => 'alignnone' , 'width' => '' , 'caption' => '' , 'nocredits' => '0' ) , $attr ) ); // Let WP handle these cases. if ( empty ($id ) or 1 == $nocredits ) { return ''; } if ( 1 > (int) $width || empty ( $caption ) ) { return $content; } if ( ! empty ( $id ) ) { // Example: attachment_525 $html_id = 'id="' . esc_attr($id) . '" '; $tmp = explode('_', $id); $id = end($tmp); $sub_caption = ''; $artist_name = get_post_meta($id, $this->fields['artist_name']['hidden'], TRUE); $artist_url = get_post_meta($id, $this->fields['artist_url']['hidden'], TRUE); // Okay, at least one value. if ( '' != $artist_name . $artist_url ) { $sub_caption .= $this->br_before ? '
' : ''; $sub_caption .= '' . $this->caption_prefix; // No name given. We use the shortened URL. if ( '' == $artist_name ) { $sub_caption .= ''; } // We have just the name. elseif ( '' == $artist_url ) { $sub_caption .= $artist_name; } // We have both. else { $sub_caption .= ''; } $sub_caption .= ''; } $caption .= $sub_caption; } return '
' . do_shortcode( $content ) . '

' . $caption . '

'; } public function short_url($url, $max_length=20) { $real_length = mb_strlen($url, 'UTF-8'); if ( $real_length < = $max_length ) { return $url; } $keep = round( $max_length / 2 ) - 1; return mb_substr($url, 0, $keep, 'UTF-8') . '…' . mb_substr($url, -$keep, $real_length, 'UTF-8'); } # @todo uninstall }

Wenn Sie auf Drews Frage in den Kommentaren antworten, können Sie den HTML- $form_fields für das Feld anpassen, indem Sie die input auf eine neue Zeichenfolge $form_fields und dann dieselbe Zeichenfolge als Schlüssel zum Array $form_fields .

Standardmäßig akzeptiert WordPress nur text und textarea für den input . Alles andere muss wie unten definiert definiert werden. Ich habe nicht versucht, Formularfelder auf diese Weise zu erhalten, um einen anderen Eingabetyp, wie einen Radioknopf, etwas mehr Raffinesse zu nehmen.

 add_filter( 'attachment_fields_to_edit', 'change_fields', 10, 2 ); function change_fields( $form_fields, $post ) { $form_fields["some_new_field"] = array( "label" => __("Type something"), "input" => "arbitrary_value", "value" => get_post_meta($post->ID, "some_new_field", true), "arbitrary_value" => "hello world!" ); }