0

タグに基づいてギャラリー フィルタリングを実装します。ただし、WordPress で画像にタグを付ける方法はありません。

WordPress ギャラリーをカスタム分類法で拡張して、ギャラリーに添付された各画像のタグを指定することは可能ですか?

4

1 に答える 1

1

それを行うためのプラグインはたくさんありますが、説明全体が必要な場合: https://wordpress.stackexchange.com/questions/76720/how-it-is-possible-to-use-taxonomies-on-attachments

ただし、必要なもの (およびもう少し) を実現する別の方法があります。それが「ネイティブ」でなくても、メディアでカスタム フィールドを使用することです。

誤解しないでいただきたいのですが、私はカスタム フィールドの大ファンではなく、人々がカスタム フィールドを「乱用」しているといつも思っていますが、この場合、過去に私のために働いていました ...

/******************************
* ADD CUSTOM FIELDS TO MEDIA ITEMS
* If you really want you can make it a stand-alone plugin. 
* I guess you know how ..
******************************/

    class o99_CustomMediaFields {
        // your array of fields 
        private $aOptions = array('normal' => 'Normal Image', 'polaroid' => 'Polaroid Image', 'bw' => 'Black & White Image', 'beauty' => 'Beauty Image', 'photoset' => 'Photoset');
        function __construct() {
            add_filter('attachment_fields_to_edit', array(&$this, 'handleAttachmentFields'), 10, 2);
            add_action('edit_attachment', array(&$this, 'handleAttachmentSave'));
            add_filter('manage_media_columns', array(&$this, 'handleColumnAdd'));
            add_action('manage_media_custom_column', array(&$this, 'handleColumnContent'),10,2);
        }
        public function handleAttachmentFields($form_fields, $post) {
            foreach($this->aOptions as $sKey => $sName) {
                $bOpt = (bool)get_post_meta($post->ID, 'image_'.$sKey, true);
                $form_fields['image_'.$sKey] = array(
                    'label' => __('Is ').$sName,
                    'input' => 'html',
                    'html' => '<label for="attachments-'.$post->ID.'-'.$sKey.'"> <input type="checkbox" id="attachments-'.$post->ID.'-'.$sKey.'" name="attachments['.$post->ID.']['.$sKey.']" value="1"'.($bOpt ? ' checked="checked"' : '').' /> </label>',
                    'value' => $bOpt,
                );
            }
            return $form_fields;
        }
        public function handleAttachmentSave($attachment_id) {
            foreach($this->aOptions as $sKey => $sName) {
                if (isset($_REQUEST['attachments'][$attachment_id][$sKey])) {
                    add_post_meta($attachment_id, 'image_'.$sKey, '1', true) or update_post_meta($attachment_id, 'image_'.$sKey, '1');
                } else {
                    add_post_meta($attachment_id, 'image_'.$sKey, '0', true) or update_post_meta($attachment_id, 'image_'.$sKey, '0');
                }
            }
        }
        public function handleColumnAdd($columns) {
            $columns['image_type'] = 'Image Type';
            return $columns;
        }
        public function handleColumnContent($column_name, $id) {
            if ($column_name != 'image_type') { return; }
            $sType = '';
            foreach($this->aOptions as $sKey => $sName) {
                $bOpt = (bool)get_post_meta($id, 'image_'.$sKey, true);
                if ($bOpt) { $sType .= $sName.', '; }
            }
            if (strlen($sType) >= 2) { $sType = substr($sType,0,-2); }
            echo $sType;
        }
    }
    new o99_CustomMediaFields();
于 2013-09-09T14:36:14.200 に答える