могу ли я добавить метабокс категории во вложение?

<p>я использую функцию <code>register\_taxonomy\_for\_object\_type()</code> для добавления поля таксономии категории в медиафайлы (вложения). я использую этот код для этого:</p><pre><code>add\_action('init', 'reg\_tax'); function reg\_tax() { register\_taxonomy\_for\_object\_type('category', 'attachment'); } </code></pre><p>это работает и добавляет простое текстовое поле для категории на страницу мультимедиа при просмотре изображения. я действительно хочу, чтобы он отображал метабокс категорий, чтобы я мог выбирать категории, которые я хочу использовать, а не просто вводить их в обычное поле. я также обнаружил, что добавление пули для категории в это текстовое поле, такое как <code>my-category-name</code>, приводит к отображению в качестве фактического имени категории, например <code>my category name</code>, при сохранении, что делает простое текстовое поле еще менее полезной опцией.</p><p>я искал функцию <code>add\_post\_type\_support()</code> для добавления метабоксов и видел, что она используется для пользовательских типов записей, я просто не вижу, можно ли добавить то же самое для вложений.</p>

<p><strong> изменить: 12/09/2017 см. этот ответ для более актуального решения этой проблемы: </strong> <a href="https://wordpress.stackexchange.com/questions/76720/how-to-use-taxonomies-on-attachments-with-the-new-media-library">как использовать таксономии для вложений с новой медиатекой?</a> </p><p>я собираюсь ответить на свой вопрос здесь, так как мне удалось найти решение того, что я пытался сделать. я пришел к выводу, что невозможно включить метабокс категорий для вложений. однако я обнаружил, что достаточно легко получить базовое поле для категорий, добавляемых на страницу вложений, с помощью <code>register\_taxonomy\_for\_object\_type</code> и <code>add\_post\_type\_support</code>:</p><pre><code>add\_action('admin\_init', 'reg\_tax'); function reg\_tax() { register\_taxonomy\_for\_object\_type('category', 'attachment'); add\_post\_type\_support('attachment', 'category'); } </code></pre><p>добавленное поле показывается так:</p><p><img src="https://i.stack.imgur.com/rnahw.png" alt="alt text"></p><p>это просто текстовое поле, но я обнаружил, что вы можете ввести там имя существующей категории, и оно будет успешно сохранено при обновлении вложения. (единственное странное поведение в том, что он возвращает обычную версию вместо слизняк после сохранения).</p><p>как только я понял, что могу сохранять категории таким способом, я решил, что смогу получить список всех доступных категорий в виде флажков и проверить те, которые были выбраны. затем я использовал немного jquery, чтобы получить значения проверенных категорий и поместить все слагаемые категорий в поле category. чтобы это выглядело еще более плавно, я затем использовал простой кусочек css, чтобы скрыть строку таблицы, которая содержала поле "категория", поэтому все, что вы когда-либо видите, это флажки, например:</p><p><img src="https://i.stack.imgur.com/fka4k.png" alt="alt text"></p><p>теперь, когда я могу добавлять категории к вложенным изображениям, я могу использовать что-то вроде:</p><pre><code>get\_posts('post\_type=attachment&category\_name=timber-fixed-windows') </code></pre><p>и перетащите изображения по категориям на страницу! именно то, что я надеялся сделать, я не думал, что будет способ сделать это, но рад, что мне удалось что-то выяснить.</p><p>я превратил это в плагин под названием <code>wos media categories</code>, который я сделал доступным для загрузки с <a href="http://suburbia.org.uk/page/projects.html#wos\_media\_categories">моего сайта suburbia.org.uk</a> , я надеюсь, что он может быть полезен кому-то еще! еще раз спасибо тем, кто прокомментировал этот и другие вопросы, которые я задал здесь, которые помогли понять это!</p><p>обновление: я добавил исправление, позволяющее добавлять категории, когда изображения загружаются с помощью загрузчика flash.</p>

<p>это сложно/сложно, если вы хотите использовать стандартное поле категорий wordpress. прежде всего, метабокс не возвращает вывод, он просто повторяет его. кроме того, он не даст вам правильное имя поля ввода, поэтому он не сохранит. одной из идей может быть использование <a href="http://jqueryui.com/demos/autocomplete/">jquery ui autocomplete</a> для репликации функциональности поля тегов.</p><p>однако, если вы хотите поиграться с полями редактора мультимедиа, вы можете подключиться к <code>'attachment\_fields\_to\_edit'</code> и отредактировать массив полей. фильтр передает два аргумента обратному вызову: первый аргумент - это массив полей, второй - объект сообщения вложения. смотрите здесь для более подробной информации:</p><p> <a href="http://phpxref.ftwr.co.uk/wordpress/nav.html?wp-admin/includes/media.php.source.html#l1025">http://phpxref.ftwr.co.uk/wordpress/nav.html?wp-admin/includes/media.php.source.html#l1025</a> </p>

<p>отличный плагин рик - очень полезно.</p><p>если вы переместите встроенный триггер onclick вместо привязки его к onload (и сделаете несколько других незначительных изменений), он также будет работать с загрузчиком flash. в текущей версии flash загружается после события загрузки jquery, поэтому объекты еще не существуют.</p><p>пересмотренный js:</p><pre><code> 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); } </code></pre><p>добавить onclick для ввода в файл php:</p><pre><code><input type="checkbox" onclick="wos\_category\_click(this)" class="wos-categories-cb".... </code></pre><p>добавить идентификатор формы массовой загрузки в файл css:</p><pre><code>form#media-single-form tr.category,form#file-form tr.category { display:none; </code></pre><p>}</p>