সংযুক্তি উইন্ডোতে আমি কীভাবে একটি 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
"আমার_" দিয়ে আপনার ফাংশনগুলিকে "নেমস্পেস" করবেন না। ইতিমধ্যে অনেক লোক তা করে। ;)
ফুক্সিয়া

এটি একটি রেডিও বোতাম দিয়ে কীভাবে ব্যবহার করবেন তা জানতে আগ্রহী। ধরণের পরিবর্তন করা কিছু করে না।
ড্রু বেকার

@ স্কটব আপনার সমাধান প্রশ্নের সমাধানে রাখার পরিবর্তে আপনার এটিকে এখান থেকে কেটে একটি উত্তরে আটকানো উচিত এবং তারপরে এটি গ্রহণ করুন। কিছু লোক মনে করে তাদের নিজস্ব উত্তর গ্রহণ করার বিষয়ে কিছু মনে হচ্ছে তবে এটি ঠিক আছে এবং এটি ভবিষ্যতের অনুসন্ধানগুলিতে (আমার মতো) আরও দ্রুত প্রকৃত উত্তর পেতে সহায়তা করে।
জেফ

উত্তর:


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
খুব "রুক্ষ" প্লাগইনের জন্য আপনার কাছে খুব শালীন কোডিং স্টাইল রয়েছে। ডাবল থাম্বস আপ পারাপার!
hakre

0

মন্তব্যে ড্রয়ের প্রশ্নের জবাবে আপনি inputনতুন স্ট্রিংটিতে সেটিংস সেট করে ক্ষেত্রের জন্য এইচটিএমএলকে কাস্টমাইজ করতে পারেন এবং তারপরে $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!"
        );
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.