Кто-либо знает, как отключить эту функциональность, таким образом, meta поля не могут быть изменены местоположение?
Самый быстрый путь, деактивируют JS для этой функции. Но я думаю, лучше, когда Вы также вычеркиваете из списка стиль для поля и init пользовательский стиль без эффектов для мыши и открытого/близкого значка на meta полях.
function fb_remove_postbox() {
wp_deregister_script('postbox');
}
add_action( 'admin_init', 'fb_remove_postbox' );
Я ответил на подобный вопрос с предложением, чтобы позволить перетащить, но отключать сохранение нового порядка на сторону сервера. Это могло бы дать Вам больше контроля и более соответствовать требованиям завтрашнего дня, поскольку JavaScript мог измениться быстро, но протокол для общения с сервером мог бы остаться более устойчивым. Этот пример отключает все перетаскивание, но Вы могли развернуть его для проверки на определенное поле или meta страницу.
add_action('check_ajax_referer', 'prevent_meta_box_order');
function prevent_meta_box_order($action)
{
if ('meta-box-order' == $action /* && $wp_user == 'santa claus' */) {
die('-1');
}
}
check_ajax_referer
действие, не фильтр. Вы должны просто die()
там для окончания выполнения сценария, не возвращают что-либо. Я исправлю свой код.
– Jan Fabry
06.10.2010, 13:55
Я также добавил бы этот Взлом JavaScript:
<script type='text/javascript'>
jQuery(document).ready(function ($) {
$('.handlediv').remove();
});
</script>
... и этот CSS:
.postbox .hndle:hover {
cursor:default;
}
Я использовал тот код использовать в своих интересах meta поля, но без перетаскивания и открытых/близких функций.
.postbox:hover .handlediv { display:none; }
в CSS для сокрытия .handlediv
– ptriek
12.11.2013, 11:25
Я заметил, что этот вопрос имеет, остаются unaswered, поскольку автор вопроса, не выбирающий корректный ответ.
Jan дал рабочий пример остановки переупорядочения метаполя, сохраняемого по Ajax, пока другие дали предложения, касающиеся JS.
Насколько я понимаю все это, Вы хотите сделать, отключают перетаскивание, ничто больше. Чтобы сделать это, Вам будут нужны две вещи, во-первых функция для прерывания ajax сохранение действия, но во-вторых также необходимо остановить JS, перетаскивающий, не уничтожая функциональности больше нигде на странице, также будучи, чтобы сделать это выборочно для типа сообщения или конкретного метаполя.
Используя функцию Янов и некоторый jQuery мы можем сделать это, полностью не уничтожая другую функциональность, как которая сценарий почтового ящика создает, так..
Некомментарий 1 соответствующих строк для создания ставить в очередь работы.
add_action( 'admin_enqueue_scripts' , 'disable_metabox_dragging' );
add_action( 'check_ajax_referer', 'disable_metabox_ordering' );
function disable_metabox_dragging( $hook ) {
if( !in_array( $hook, array( 'post.php', 'post-new.php' ) ) )
return;
global $post_type;
if( !in_array( $post_type, array( 'book' ) ) )
return;
// Uncomment the following line if using inside a child theme
//wp_enqueue_script( 'unsortable-meta', trailingslashit( get_stylesheet_directory_uri() ) . 'unsortable-metaboxes.js', array(), false );
// Or uncomment the following line if using inside a parent theme
//wp_enqueue_script( 'unsortable-meta', trailingslashit( get_template_directory_uri() ) . 'unsortable-metaboxes.js', array(), false );
// Or ncomment the following line if using inside a plugin file
//wp_enqueue_script( 'unsortable-meta', plugins_url( '/unsortable-metaboxes.js', __FILE__ ), array(), false );
}
function disable_metabox_ordering($action) {
global $post_type;
if( !in_array( $post_type, array( 'book' ) ) )
return;
if( 'meta-box-order' == $action )
die;
}
Очень простой jQuery, который удаляет метаполе поддающийся сортировке класс из appliable элементов, это предотвращает перетаскивание.
jQuery(document).ready(function($){
$('.meta-box-sortables').removeClass('meta-box-sortables');
});
Поскольку Вы видите, что я добавил в 1 типе сообщения в качестве примера для добавления кода, книги в этом случае. Однако Вы упомянули, что желали также иметь возможность отключения его для определенных метаполей.
Это может быть сделано, существует всего несколько небольших побочных эффектов один из тех, которые, что путем удаления классов из данных метаполей для предотвращения перетаскивания Вы действительно также предотвращаете функцию переключателя, работающую (т.е. функциональность переключателя заголовка метаполя).
Тем не менее это может быть сделано...
Во-первых, Вы обновили бы disable_metabox_dragging
функция к..
function disable_metabox_dragging( $hook ) {
if( !in_array( $hook, array( 'post.php', 'post-new.php' ) ) )
return;
global $post_type;
if( !in_array( $post_type, array( 'book' ) ) )
return;
// Uncomment the following line if using inside a child theme
// wp_enqueue_script( 'some-unsortables', trailingslashit( get_stylesheet_directory_uri() ) . 'unsortable-somemetaboxes.js', array('postbox') );
// Or uncomment the following line if using inside a parent theme
//wp_enqueue_script( 'some-unsortables', trailingslashit( get_template_directory_uri() ) . 'unsortable-somemetaboxes.js', array('postbox') );
// Or uncomment the following line if using inside a plugin file
//wp_enqueue_script( 'some-unsortables', plugins_url( '/unsortable-somemetaboxes.js', __FILE__ ), array('postbox') );
wp_localize_script( 'some-unsortables', 'NonDragMetaboxes', array( 0 => '', 'postcustom', 'postexcerpt' ) );
}
Снова, замечание Вас должно не прокомментировать применимое wp_enqueue_script
строка.
Массив в локализовать вызове - то, что определяет, какие метаполя отключить, пустые 0 включенных объектов там намеренно, потому что локализовать функция сценария разделяет любые 0 включенных индексов в массиве.
Во-вторых, новый файл JS, на который ссылаются в вышеупомянутом, настроил, ставят в очередь функцию.
jQuery(document).ready(function($){
// For each item in the JS array created by the localize call
$.each( NonDragMetaboxes, function(index,value) {
// Remove postbox class(disables drag) and add stuffbox class(styling is close to the original)
$( '#' + value ).removeClass('postbox').addClass('stuffbox');
// Remove redundant handle div
if( $( '#' + value ).has('.handlediv') )
$( '#' + value ).children('.handlediv').remove();
// Remove redundant cursor effect on hover
if( $( '#' + value ).has('h3') )
$( '#' + value ).children('h3').css('cursor','default');
} );
});
Только вещь, которую Вы должны сделать, определяют идентификатор для метаполей, Вы хотите скрыть, и передать их в массив, который устанавливает отключенные метаполя (в wp_localize_scipt
звоните).
В целом я не думаю, выборочно отключая метаполя, нуждается в недостатках, нет только никакой поддержки, чтобы повторно сконфигурировать поддающееся сортировке init действие в WordPress, таким образом запрещение сортировки метаполя на на основание элемента будет hacky в лучшем случае (мой код выше является доказательством этого). Идеально, что необходимо, вот действие в WordPress для сцепления поддающегося сортировке init, но это в настоящее время hardcoded в почтовый ящик JavaScript (который действительно больше, чем просто устанавливает поддающийся сортировке).
В любом случае я надеюсь, что это помогло рассмотреть исходный вопрос.
У меня была та же проблема, и Google приводит меня сюда. К сожалению, ни один из этих ответов не помог, но я в конечном счете выяснил ответ, и это довольно легко!
admin_enqueue_scripts
, и это хорошо работало.Отключите функциональность сортировки путем помещения этого во что файл JavaScript:
jQuery(document).ready( function($) {
$('.meta-box-sortables').sortable({
disabled: true
});
$('.postbox .hndle').css('cursor', 'pointer');
});
По существу это просто отключает jQuery Поддающийся сортировке UI, который приводит в действие метаполе, перетаскивающее функциональность (почтовый ящик dev.js:64). Это также переключает курсор на дескрипторе метаполя к стандартному указателю мыши вместо курсора перемещения (любезность идеи brasofilo ниже).
Надеюсь, это поможет!
Править: Я должен добавить, что это, вероятно, стоящее следующего часть другого совета здесь и отключения сохранения порядка метаполя. Это предотвратит беспорядок на всякий случай, что-то по ошибке повторно включено.
Второе редактирование: В пользу будущих поколений (и будущие искатели Google), эта фиксация была протестирована на WordPress 3.3.1. Я не могу говорить с другими версиями!
$('.postbox .hndle').css('cursor','default');
:::: Ре: 2-е редактирование, необходимо будет продолжать обновлять Ответ в короткой версии :P
– brasofilo
06.01.2013, 18:27
JavaScript Wordpress определяет перемещаемые метаполя их h3 заголовком с классом "hndle". Достаточно просто отключить их конкретно путем ссылки на рассматриваемое метаполе (при создании пользовательских метаполей Вы присвоите ему идентификатор), и запрещающий любые hndle классы путем удаления имени класса или путем переименования его. В моем случае у меня есть несколько типов разделителя, которые я маркировал .hndle h3, но маловероятно, что кто-либо еще сделает вещи этот путь. Так, можно сделать то, что я сделал ниже, или можно использовать .find ('.hndle') .attr ('класс''').... или что-то подобное. Это вошло бы в .js файл, который Вы ставили в очередь в своем functions.php файле (ли это быть в Вашей папке тем или Вашей папке плагинов). Постановку в очередь назвал бы admin_print_scripts, init или безотносительно рычага, который Вы предпочитаете использовать для добавления материала к администраторским страницам.
jQuery("#MY_METABOX_ID h3.hndle").each(function(e){
jQuery(this).attr("class", "hndlle");
});
admin_init
только в некотором определенном типе сообщения? – brasofilo 06.01.2013, 18:15