मैं अटैचमेंट विंडो में URL फ़ील्ड कैसे जोड़ सकता हूं?


13

उदाहरण के लिए...

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

मीडिया प्रबंधक और अनुलग्नक संपादक के लिए "श्रेणी" इनपुट फ़ील्ड जोड़ता है। मैं यह जानना चाहूंगा कि क्या इसके बदले "लिंक गंतव्य" URL पर कब्जा करने के लिए इस फ़ंक्शन को बदलना संभव है। छवि को क्लिक करने पर URL निष्पादित हो जाएगा।

यह भी जानना होगा कि इस नए क्षेत्र के लिए मान कैसे प्राप्त करें।

अद्यतन: नीचे थॉमस उत्तर के लिए धन्यवाद, यहाँ मेरा अंतिम समाधान है ...

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); 

1
"My_" के साथ अपने कार्यों को "नाम स्थान" न दें। बहुत सारे लोग पहले से ही ऐसा करते हैं। ;)
FUXIA

रेडियो बटन के साथ इसका उपयोग करने का तरीका जानना पसंद करेंगे। बदलते प्रकार कुछ भी नहीं करता है।
ड्रू बेकर

@ सीसटीबी सवाल में अपना समाधान डालने के बजाय, आपको इसे वहां से काटकर एक उत्तर में पेस्ट करना चाहिए और फिर इसे स्वीकार करना चाहिए। कुछ लोगों को लगता है कि कुछ ऐसा है जो खुद के जवाब को स्वीकार करने के बारे में है, लेकिन यह ठीक है और यह भविष्य की खोजों (मेरी तरह) को वास्तविक उत्तर को अधिक तेज़ी से प्राप्त करने में मदद करता है।
जेफ

जवाबों:


16

मैं मीडिया फ़ाइलों के लिए कलाकार और एक URL के बारे में जानकारी जोड़ने के लिए एक बहुत ही मोटे प्लगइन का उपयोग करता हूं । इसे कुछ ट्विकिंग की आवश्यकता है (और मुझे समय की आवश्यकता है), लेकिन यह काम करता है और यह प्रदर्शित कर सकता है कि अतिरिक्त फ़ील्ड कैसे जोड़ें और उन्हें अपने विषय में कैसे उपयोग करें:

<?php
/*
Plugin Name: Media Artist Field
Description: Adds two field to attachments – Artist and Artist URL – and adds this information to captions.
Version:     0.1
Author:      Fuxia Scholz
Created:     19.09.2010
*/
$Media_Artist = new Media_Artist(
    array (
        'artist_name' => array (
            'public' => 'artist_name'
        ,   'hidden' => '_artist_name'
        ,   'label'  => 'Fotograf (Name)'
        )
    ,   'artist_url' => array (
            'public' => 'artist_url'
        ,   'hidden' => '_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
 */
class Media_Artist
{
    public
        $fields = array (
            'artist_name' => array (
                'public' => 'artist_name'
            ,   'hidden' => '_artist_name'
            ,   'label'  => 'Artist Name'
            )
        ,   'artist_url' => array (
                'public' => 'artist_url'
            ,   'hidden' => '_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."]
         * <a href="http://example.com/2008/images-test/albeo-screengrab/"
         * rel="attachment wp-att-525"><img
         * src="http://example.com/uploads/2010/08/albeo-screengrab4.jpg?w=300"
         * alt="" title="albeo-screengrab" width="300" height="276"
         * class="size-medium wp-image-525" /></a>[/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 ? '<br />' : '';
                $sub_caption .= '<span class="media-artist">' . $this->caption_prefix;

                // No name given. We use the shortened URL.
                if ( '' == $artist_name )
                {
                    $sub_caption .= '<a rel="author" href="'
                        . $artist_url . '">'
                        . $this->short_url($artist_url)
                        . '</a>';
                } // We have just the name.
                elseif ( '' == $artist_url )
                {
                    $sub_caption .= $artist_name;
                } // We have both.
                else
                {
                    $sub_caption .= '<a rel="author" href="'
                        . $artist_url . '">'
                        . $artist_name
                        . '</a>';
                }

                $sub_caption .= '</span>';
            }

            $caption .= $sub_caption;
        }

        return '<div ' . $html_id . 'class="wp-caption ' . esc_attr($align)
        . '" style="width: ' . (10 + (int) $width) . 'px">'
        . do_shortcode( $content ) . '<p class="wp-caption-text">'
        . $caption . '</p></div>';
    }

    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
}

2
एक बहुत ही "रफ" प्लगइन के लिए आपके पास एक बहुत ही सभ्य कोडिंग शैली है। डबल अंगूठे को पार कर गया!
2

0

टिप्पणियों में ड्रू के सवाल का जवाब देते हुए, आप inputएक नई स्ट्रिंग सेट करके फ़ील्ड के लिए HTML को अनुकूलित कर सकते हैं , और फिर उसी स्ट्रिंग को $form_fieldsसरणी की कुंजी के रूप में जोड़ सकते हैं ।

डिफ़ॉल्ट रूप से, वर्डप्रेस केवल textऔर प्रकार के textareaलिए स्वीकार करेगा input। कुछ और नीचे के रूप में एक कस्टम तरीके से परिभाषित किया जाएगा। मैंने वास्तव में फॉर्म फ़ील्ड को इस तरह से बनाए रखने की कोशिश नहीं की है ताकि एक अन्य इनपुट प्रकार बनाने के लिए, एक रेडियो बटन की तरह, थोड़ा अतिरिक्त चालाकी हो सकती है।

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!"
        );
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.