添付ファイルにカテゴリメタボックスを追加できますか?
-
16-10-2019 - |
質問
使ってます register_taxonomy_for_object_type()
メディアのアップロード(添付ファイル)にカテゴリ分類フィールドを追加します。私はこのコードを使用してそうします:
add_action('init', 'reg_tax');
function reg_tax() {
register_taxonomy_for_object_type('category', 'attachment');
}
これにより、画像を表示するときにメディアページにカテゴリのシンプルなテキストフィールドが機能します。私が本当に望んでいるのは、実際のカテゴリメタボックスを表示して、単にプレーンフィールドに入力するのではなく、使用するカテゴリを選択できるようにすることです。また、スラグをカテゴリ用にこのテキストフィールドに入れることも発見しました。 my-category-name
最終的には、実際のカテゴリ名として表示されます My Category Name
保存された場合、単純なテキストフィールドはさらに有用なオプションになりません。
私は見てきました add_post_type_support()
メタボックスを追加し、カスタムポストタイプに使用されているのを見た機能で、添付ファイルに同じものを追加できるかどうかがわかりません。
解決
編集:2017年12月9日この回答を参照してください。 新しいメディアライブラリで添付ファイルに分類法を使用する方法は?
私はここで自分の質問に答えます。私がやろうとしていることの解決策を理解することができたからです。添付ファイルのカテゴリメタボックスを有効にすることは不可能ではないという結論に達しました。ただし、添付ファイルページに追加されたカテゴリの基本フィールドを使用することで簡単に取得できることがわかりました。 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');
}
追加されたフィールドは次のように表示されます:
それは単なる単純なテキストフィールドですが、私が見つけたのは、そこに既存のカテゴリの名前を入力でき、添付ファイルが更新されたときに正常に保存されることでした(唯一の奇妙な動作は、通常のバージョンではなく通常のバージョンを返したことです。保存後のナメクジ)。
このようにカテゴリを保存できることに気付いたら、チェックボックスとして利用可能なすべてのカテゴリのリストを取得し、選択されたものをチェックできると考えました。次に、少しのjQueryを使用して、チェックされたカテゴリの値をつかみ、すべてのカテゴリのスラグをカテゴリフィールドに入れました。これをさらにシームレスに見えるようにするために、私はシンプルなCSSを使用してカテゴリフィールドを含むテーブル行を非表示にしたので、これまでに表示されたのは、次のようにチェックボックスだけです。
画像添付ファイルにカテゴリを追加できるようになったので、次のようなものを使用できます。
get_posts('post_type=attachment&category_name=timber-fixed-windows')
分類された画像をページに引き込みます!まさに私がやりたいことを望んでいたこと、私はそれをする方法があるとは思わなかったが、私は何かを理解してくれてうれしい。
私はこれを呼ばれるプラグインに変えました WOS Media Categories
ダウンロードできるようにしました 私のウェブサイト、Suburbia.org.uk, 、私はそれが他の誰かに役立つかもしれないことを願っています!これについてコメントしてくれた人たちと、私がここで尋ねた他の質問に感謝します。
更新:Flash Bulk Uploaderを使用して画像をアップロードしながら、カテゴリを追加できるようにする修正を追加しました。
他のヒント
これを作成しました。これは、フォームフィールドへのハーキージャークジャワスクリプトリンクの完全な回避策です。チェックボックスの値は送信時に$ _POSTに渡されるため、ADD_IMAGE_ATTACHMENT_FIELDS_TO_SAVEフィルター中にそれらをつかんで、POSTオブジェクトの用語を設定できます。
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);
(カテゴリではなくカスタム分類法を使用しているため、チェックボックスを設定したときに使用するのと同じ配列に一致するように$カテゴリアレイを変更する必要があることに注意してください)
シャバム、シャボズル。楽しみ。
WordPressのデフォルトカテゴリボックスを使用する場合、これは困難/複雑です。 1つには、メタボックスは出力を返さず、単にエコーします。それに加えて、それはあなたに正しい入力フィールド名を与えないので、それは保存しません。 1つのアイデアは、aを使用することかもしれません jQuery ui autocomplete タグボックスの機能を複製します。
ただし、メディアエディターのフィールドで遊んでみたい場合は、フックすることができます 'attachment_fields_to_edit'
フィールドの配列を編集します。フィルターはコールバックに2つの引数を渡します。最初の引数はフィールドの配列であり、2番目はアタッチメントポストオブジェクトです。詳細については、こちらをご覧ください。
http://phpxref.ftwr.co.uk/wordpress/nav.html?wp-admin/includes/media.php.source.html#l1025
出発点として @RickCurranのWOSメディアカテゴリを使用してプラグインを作成しました。ただし、WOSメディアカテゴリは、メディアにカテゴリサポートを追加する他のプラグインと同様に、実際にメタボックスを追加していません。
必然的に簡素化されたフォームは、投稿やページのメタボックスですが、使いやすいフィルタリング機能を含めました。
私は実際にページや投稿に表示されるカテゴリメタボックス全体を生成していますが、スタイリングの欠如と欠落しているJavaScriptの両方のために、メディアページで動作しないビットを隠しています。
Metaboxを完全に機能させる方法について誰もが持っているかもしれない考えを歓迎します - 私が後のバージョンでやろうとしていることです。
素晴らしいプラグインリック - とても役に立ちます。
OnClickトリガーをオンロードにバインドする代わりにインラインで移動する(そして他のいくつかのマイナーな調整を行う)場合、フラッシュバルクアップロード装置でも動作します。現在のバージョンでは、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ファイルにバルクアップローダーフォームIDを追加します:
form#media-single-form tr.category,form#file-form tr.category {
display:none;
}