Кто-нибудь знает, как отключить эту функцию, чтобы мета-боксы не могли быть перемещены?
Share
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
У меня была такая же проблема, и Google привел меня сюда. К сожалению, ни один из этих ответов не помог, но в конце концов я нашел ответ, и это довольно просто!
admin_enqueue_scripts
, и он работал нормально.Отключите функцию сортировки, поместив это в этот файл JavaScript:
По сути, это просто отключает jQuery UI Sortable, который обеспечивает функциональность перетаскивания метабокса ( postbox.dev.js:64 ). Это также переключает курсор на дескрипторе метабокса на стандартный указатель мыши вместо курсора перемещения (идея любезно предоставлена brasofilo ниже).
Надеюсь это поможет!
Изменить: я должен добавить, что, вероятно, стоит последовать некоторым другим советам здесь и отключить сохранение порядка метабоксов. Это предотвратит путаницу, если что-то будет ошибочно повторно включено.
Второе редактирование: на благо будущих поколений (и будущих пользователей Google) это исправление было протестировано на WordPress 3.3.1. Я не могу говорить о других версиях!
+1 менее проблемное решение для Q, ИМХО, конечно. И много тяжеловесов;) :::: Я использую только JS для всех, добавляя
$('.postbox.hndle').css('cursor','default');
:::: Re: 2-е редактирование, вам придется постоянно обновлять ответ в обозримом будущем: PУправлять CSS из JS — это умно! Я добавлю это к своему ответу.
Этот код работает с текущей версией WordPress 3.9.1 — очень приятно! 🙂
Спасибо, Ян. Я добавил это в свой functions.php, но это ничего не делает?
@fxfuture: Глупый я,
check_ajax_referer
это действие, а не фильтр. Вы должны простоdie()
завершить выполнение скрипта, а не возвращать ничего. Я исправлю свой код.Да, ваше исправление не работает. Или FireFox и Chrome по какой-то причине кэшируют страницу. :/
что если вы просто хотите отключить перетаскивание для определенного метабокса в определенном пользовательском типе записи?
Это работает, но также отключает другие функции, такие как статус сообщения.
Я думаю да, но я не проверяю это. Вы можете легко скрыть с помощью плагина Adminimize.
Хороший! Как бы мы отправили это
admin_init
только в какой-то определенный тип сообщения?сначала казалось идеальным решением, но, увы, это также отключает все функции для добавления категории/таксономии…
Хорошее дополнение к ответу @bueltge (я использовал комбинацию обоих) — хотя вы также можете пропустить бит jQuery и добавить
.postbox:hover.handlediv { display:none; }
CSS, чтобы скрыть.handledivПримечание. Этот код больше не работает с текущей версией WordPress (3.9.1).
На аналогичный вопрос я ответил предложением разрешить перетаскивание, но отключить сохранение нового заказа на стороне сервера. Это может дать вам больше контроля и быть более перспективным, поскольку JavaScript может быстро меняться, но протокол для связи с сервером может оставаться более надежным. В этом примере отключено все перетаскивание, но вы можете развернуть его, чтобы проверить свое конкретное поле или метастраницу.
Самый быстрый способ — деактивировать JS для этой функции. Но я думаю, что лучше, если вы также отмените регистрацию стиля для окна и инициируете пользовательский стиль без эффектов для мыши и значка открытия/закрытия на мета-полях.
Javascript wordpress идентифицирует перетаскиваемые метабоксы по их заголовку h3 с классом «hndle». Достаточно просто отключить их специально, сославшись на рассматриваемый метабокс (если вы создаете настраиваемые метабоксы, вы присвоите ему идентификатор) и отключив любые классы hndle, удалив имя класса или переименовав его. В моем случае у меня есть несколько типов разделителей, которые я пометил с помощью.hndle h3, но маловероятно, что кто-то еще сделал бы что-то подобное. Итак, вы можете сделать то, что я сделал ниже, или вы можете использовать.find(‘.hndle’).attr(‘class’,»)… или что-то подобное. Это будет в файле.js, который вы поставили в очередь в файле functions.php (независимо от того, находится ли он в папке ваших тем или в папке плагинов). Постановка в очередь будет вызываться admin_print_scripts,
Я бы также добавил этот Javascript Hack:
… и этот CSS:
Я использовал этот код, чтобы воспользоваться преимуществами мета-полей, но без функций перетаскивания и открытия/закрытия.
Просто нашел простой способ, надеюсь, новый искатель поможет с этим. Предполагая, что вы можете добавить файл css в стиль очереди администратора, я использую для этого только css и прошу прощения за мой плохой английский.
Надеюсь, поможет.
Я заметил, что этот вопрос остался без ответа, поскольку спрашивающий не выбрал правильный ответ.
Ян привел рабочий пример прекращения сохранения переупорядочения метабоксов через Ajax, в то время как другие дали предложения, касающиеся JS.
Насколько я понимаю, все, что вам нужно сделать, это отключить перетаскивание, не более того. Для этого вам понадобятся две вещи: во-первых, функция для перехвата действия сохранения ajax, но, во-вторых, вам также нужно остановить перетаскивание JS, не убивая функциональность где-либо еще на странице, а также делать это выборочно для тип сообщения или определенный метабокс.
Используя функцию Jans и немного jQuery, мы можем сделать это, не убивая полностью другие функции, создаваемые сценарием почтового ящика, например.
PHP-код для файла функций темы или файла плагина
Раскомментируйте 1 из соответствующих строк, чтобы очередь заработала.
jQuery/JS для файла Javascript, упомянутого выше.
Очень простой jquery, который удаляет сортируемый класс метабокса из применимых элементов, это предотвращает перетаскивание.
Как видите, я добавил в 1 пример типа записи, чтобы добавить код, в данном случае книга. Однако вы упомянули о желании также иметь возможность отключить его для определенных метабоксов.
Это можно сделать, есть всего несколько небольших побочных эффектов, один из которых заключается в том, что, удаляя классы из заданных метабоксов для предотвращения перетаскивания, вы также предотвращаете работу функции переключения (т.е. функциональность переключения заголовка метабокса).
Скажем так, можно…
Во-первых, вы бы обновили
disable_metabox_dragging
функцию до..Опять же, отметив, что вам нужно раскомментировать соответствующую
wp_enqueue_script
строку.Массив внутри вызова локализации — это то, что определяет, какие метабоксы следует отключить, пустой элемент с ключом 0 присутствует здесь намеренно, потому что функция сценария локализации удаляет любые индексы с ключом 0 в массиве.
Во-вторых, новый файл JS, указанный в приведенной выше измененной функции постановки в очередь.
Единственное, что вам нужно сделать, это определить идентификатор для метабоксов, которые вы хотите скрыть, и передать их в массив, который устанавливает отключенные метабоксы (в
wp_localize_scipt
вызове).В целом, я не думаю, что выборочное отключение метабоксов лишено недостатков, просто нет поддержки для повторной настройки сортируемого действия инициализации в WordPress, поэтому отключение сортировки метабоксов для каждого элемента будет в лучшем случае хакерским (мой код выше свидетельство тому). В идеале здесь нужно действие в WordPress для подключения сортируемой инициализации, но в настоящее время это жестко закодировано в javascript почтового ящика (который делает больше, чем просто устанавливает сортируемую).
В любом случае, я надеюсь, что это помогло ответить на первоначальный вопрос.
Чтобы добавить ко всем предыдущим ответам, если вы также хотите запретить WordPress загружать пользовательские позиции, следующее должно помочь (замените
post
любым типом сообщения):