it-swarm.asia

هل يمكنني إضافة فئة Metabox إلى المرفق؟

أنا أستخدم register_taxonomy_for_object_type() لإضافة حقل تصنيف الفئة إلى تحميلات الوسائط (المرفقات). أنا أستخدم هذا الكود للقيام بذلك:

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

يعمل هذا ويضيف حقل نص بسيط للفئة إلى صفحة الوسائط عند عرض صورة. ما أريده حقًا هو جعله يعرض فئات Metabox الفعلية حتى أتمكن من اختيار الفئات التي أريد استخدامها بدلاً من كتابتها فقط في الحقل العادي. لقد وجدت أيضًا أن وضع سبيكة في فئة ما في حقل النص هذا مثل my-category-name ينتهي به عرض كاسم الفئة الفعلي مثل My Category Name عند حفظه ، مما يجعل حقل النص البسيط أقل من خيار مفيد.

لقد كنت أبحث عن وظيفة add_post_type_support() لإضافة Metaboxes وشاهدتها تستخدم لأنواع Post Custom ، لا أستطيع أن أرى ما إذا كان من الممكن إضافة الشيء نفسه للمرفقات.

18
Rick Curran

تحرير: 12/09/2017 راجع هذه الإجابة عن حل أكثر حداثة لهذا: كيفية استخدام التصنيفات على المرفقات مع مكتبة الوسائط الجديدة؟

سأجيب عن سؤالي هنا حيث تمكنت من إيجاد حل لما كنت أحاول القيام به. توصلت إلى استنتاج مفاده أنه لم يكن من الممكن تمكين الفئة Metabox للمرفقات. ومع ذلك ، فقد وجدت أنه من السهل بدرجة كافية الحصول على حقل أساسي للفئات المضافة إلى صفحة المرفقات باستخدام register_taxonomy_for_object_type و add_post_type_support:

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

الحقل المضاف أظهر مثل هذا:

alt text

إنه مجرد حقل نص عادي ولكن ما وجدته هو أنه يمكنك كتابة اسم فئة موجودة هناك وسيتم حفظه بنجاح عند تحديث المرفق (السلوك الغريب الوحيد هو إعادة إصدار الإصدار العادي بدلاً من سبيكة بعد الادخار).

بمجرد أن أدركت أنه يمكنني حفظ الفئات بهذه الطريقة ، فكنت أحسب أنه يمكنني الحصول على قائمة بجميع الفئات المتاحة كخانات اختيار والتحقق من الفئات التي تم اختيارها. بعد ذلك استخدمت قليلا من مسج للحصول على قيم الفئات المحددة ووضع الرخويات جميع الفئات في حقل الفئة. لجعل هذا يبدو أكثر سلاسة ، استخدمت بعد ذلك جزءًا بسيطًا من CSS لإخفاء صف الجدول الذي يحتوي على حقل الفئة ، لذلك كل ما تراه هو مربعات الاختيار ، مثل ذلك:

alt text

الآن يمكنني إضافة فئات إلى مرفقات الصور ، يمكنني استخدام شيء مثل:

get_posts('post_type=attachment&category_name=timber-fixed-windows')

واسحب الصور المصنفة إلى صفحة! بالضبط ما كنت آمل أن أفعله ، لم أكن أعتقد أنه ستكون هناك طريقة للقيام بذلك ولكني سعيد لأنني تمكنت من معرفة شيء ما.

لقد حولت هذا إلى مكون إضافي يسمى WOS Media Categories والذي أتاح تنزيله من موقع الويب الخاص بي ، Suburbia.org.uk ، وآمل أن يكون مفيدًا لشخص آخر! شكرا مرة أخرى لأولئك الذين علقوا على هذا وعلى الأسئلة الأخرى التي طرحتها هنا والتي ساعدت في معرفة ذلك!

تحديث: لقد أضفت إصلاحًا لتمكين إضافة الفئات أثناء تحميل الصور باستخدام برنامج التحميل المجمع Flash.

13
Rick Curran

أنشأ هذا للتو ، وهو حل كامل لارتباط جافا سكريبت herky-jerk بحقل النموذج. نظرًا لأن قيم خانات الاختيار الخاصة بك يتم تمريرها مع $ _POST عند الإرسال ، يمكنك فقط الاستيلاء عليها أثناء عامل التصفية add_image_attachment_fields_to_save وتعيين شروط كائن النشر.

function register_custom_taxonomies() {
    $labels = array(
        'name' => _x( 'Image Formats', 'taxonomy general name' ),
        'singular_name' => _x( 'Image Format', 'taxonomy singular name' ),
        'search_items' =>  __( 'Search Formats' ),
        'all_items' => __( 'All Formats' ),
        'parent_item' => __( 'Parent Format' ),
        'parent_item_colon' => __( 'Parent Format:' ),
        'edit_item' => __( 'Edit Format' ), 
        'update_item' => __( 'Update Format' ),
        'add_new_item' => __( 'Add New Format' ),
        'new_item_name' => __( 'New Format Name' ),
        'menu_name' => __( 'Image Format' )
    );
    $capabilities = array(
        'manage_terms' => 'nobody',
        'edit_terms' => 'nobody',
        'delete_terms' => 'nobody'
    );
    $args = array(
        'public' => false,
        'hierarchical' => true,
        'labels' => $labels,
        'capabilities' => $capabilities,
        'show_ui' => false,
        'query_var' => 'image-format',
        'rewrite' => false
    );
    register_taxonomy('image-format', array('attachment'), $args);
}
add_action( 'init', 'register_custom_taxonomies', 1);

function add_media_categories($fields, $post) {
    $categories = get_categories(array('taxonomy' => 'image-format', 'hide_empty' => 0));
    $post_categories = wp_get_object_terms($post->ID, 'image-format', array('fields' => 'ids'));
    $all_cats .= '<ul id="media-categories-list" style="width:500px;">'; 
    foreach ($categories as $category) {
        if (in_array($category->term_id, $post_categories)) {
            $checked = ' checked="checked"';
        } else {
            $checked = '';  
        }
        $option = '<li style="width:240px;float:left;"><input type="checkbox" value="'.$category->category_nicename.'" id="'.$post->ID.'-'.$category->category_nicename.'" name="'.$post->ID.'-'.$category->category_nicename.'"'.$checked.'> ';
        $option .= '<label for="'.$post->ID.'-'.$category->category_nicename.'">'.$category->cat_name.'</label>';
        $option .= '</li>';
        $all_cats .= $option;
    }
    $all_cats .= '</ul>';

    $categories = array('all_categories' => array (
            'label' => __('Image Formats'),
            'input' => 'html',
            'html' => $all_cats
    ));
    return array_merge($fields, $categories);
}
add_filter('attachment_fields_to_edit', 'add_media_categories', null, 2);

function add_image_attachment_fields_to_save($post, $attachment) {
    $categories = get_categories(array('taxonomy' => 'image-format', 'hide_empty' => 0));
    $terms = array();
    foreach($categories as $category) {
        if (isset($_POST[$post['ID'].'-'.$category->category_nicename])) {
            $terms[] = $_POST[$post['ID'].'-'.$category->category_nicename];        
        }
    }
    wp_set_object_terms( $post['ID'], $terms, 'image-format' );
    return $post;
}
add_filter('attachment_fields_to_save', 'add_image_attachment_fields_to_save', null , 2);

(لاحظ أنني أستخدم تصنيفًا مخصصًا ، وليس فئات ، لذا سيتعين عليك تغيير مجموعة الفئات $ لتطابق الصفيف نفسه الذي تستخدمه عند إعداد مربعات الاختيار الخاصة بك)

شابام ، شابل استمتع.

4
Drew Gourley

لقد قمت بإنشاء مكون إضافي باستخدام فئات وسائط WOS @ RickCurran كنقطة انطلاق. ومع ذلك ، فإن فئات وسائط WOS ، مثل المكونات الإضافية التي تضيف دعم الفئات للوسائط ، لا تضيف فعليًا وحدة استقلاب ، لقد قمت بذلك.

overall view

شكلها المبسط بالضرورة هو الأيضات في المنشورات والصفحات ، لكنني تضمنت قدرة تصفية تجعلها سهلة الاستخدام.

filterable categories

أقوم بالفعل بإنشاء مربع الفئة بالكامل الذي تراه على الصفحات والمنشورات ، لكني أخفي البتات التي لا تعمل على صفحة الوسائط بسبب نقص التصميم وجافا سكريبت المفقود.

أرحب بأي أفكار قد تكون لدى أي شخص فيما يتعلق بكيفية جعل وحدة التمثيل الغذائي تعمل بكامل طاقتها - شيء أعتزم القيام به في إصدار لاحق.

1
eddiemoya

هذا صعب/معقد إذا كنت تريد استخدام مربع الفئة الافتراضي الخاص بـ WordPress. لسبب واحد ، لا يُرجع metabox الإخراج ، بل هو يُرجع عنه. علاوة على ذلك ، لن يمنحك اسم حقل الإدخال الصحيح ، لذلك لن ينقذ. قد تكون إحدى الأفكار استخدام jQuery UI Autocomplete لتكرار وظيفة مربع العلامات.

ومع ذلك ، إذا كنت تريد أن تتجول مع حقول محرر الوسائط ، فيمكنك التوصيل إلى 'attachment_fields_to_edit' وتحرير مجموعة الحقول. يقوم عامل التصفية بتمرير وسيطين إلى رد الاتصال: الوسيطة الأولى هي مجموعة من الحقول ، والثاني هو كائن نشر المرفق. انظر هنا لمزيد من التفاصيل:

http://phpxref.ftwr.co.uk/wordpress/nav.html؟wp-admin/includes/media.php.source.html#l1025

1
John P Bloch

البرنامج المساعد الكبير ريك - مفيدة جدا.

إذا قمت بنقل مشغل onclick في السطر بدلاً من ربطه بالتحميل (وإجراء بعض التعديلات الطفيفة الأخرى) ، فسوف يعمل على برنامج التحميل المجمع Flash أيضًا. مع الإصدار الحالي ، يتم تحميل Flash بعد حدث تحميل jQuery حتى لا تكون الكائنات موجودة حتى الآن.

js المنقحة:

 function wos_category_click(cat){
    var container = jQuery(cat).closest("tbody");
    var cat_checked = jQuery(container).find("tr.all_categories input:checked");
    var cat_arr = jQuery(cat_checked).map(function() {
        return jQuery(this).val();
    }).get().join();
    jQuery(container).find("tr.category > td.field > input.text").val(cat_arr);
}

أضف onclick إلى الإدخال في ملف php:

<input type="checkbox" onclick="wos_category_click(this)" class="wos-categories-cb"....

إضافة معرف نموذج برنامج التحميل المجمع إلى ملف css:

form#media-single-form tr.category,form#file-form tr.category {
display:none; 

}

0
djbokka