답변:
나는 같은 문제를 겪었고 구글이 나를 이끌었다. 불행히도 이러한 답변 중 어느 것도 도움이되지 않았지만 궁극적으로 답변을 알아 냈습니다. 매우 쉽습니다!
admin_enqueue_scripts
했고 잘 작동했다.해당 JavaScript 파일에 정렬 기능을 사용하지 않도록 설정하십시오.
jQuery(document).ready( function($) {
$('.meta-box-sortables').sortable({
disabled: true
});
$('.postbox .hndle').css('cursor', 'pointer');
});
본질적으로 이것은 jQuery UI Sortable을 비활성화 하여 메타 박스 드래그 기능 ( postbox.dev.js : 64 )을 강화합니다. 또한 메타 박스 핸들의 커서를 이동 커서 대신 표준 마우스 포인터로 전환합니다 ( 아래 의 brasofilo 제공 ).
도움이 되었기를 바랍니다!
편집 : 여기에 다른 조언을 따르고 메타 박스 순서 저장을 비활성화하는 것이 좋습니다. 실수로 다시 활성화되는 오프 기회에 대한 혼동을 방지합니다.
두 번째 수정 : 차세대 (및 향후 Google 검색 자)를 위해이 수정 프로그램은 WordPress 3.3.1에서 테스트되었습니다. 다른 버전과 대화 할 수 없습니다!
가장 빠른 방법은이 기능에 대해 JS를 비활성화하는 것입니다. 그러나 상자의 스타일을 등록 취소하고 마우스 및 메타 상자의 열기 / 닫기 아이콘에 영향을주지 않고 사용자 정의 스타일을 초기화하면 더 좋습니다.
function fb_remove_postbox() {
wp_deregister_script('postbox');
}
add_action( 'admin_init', 'fb_remove_postbox' );
admin_init
특정 게시물 유형에서만 어떻게 전달 합니까?
나는 비슷한 질문에 대답 드래그 수 있도록 제안에 있지만, 사용하지 않도록 새로운 질서 저장하는 서버 측을. 이렇게하면 JavaScript가 빠르게 변경 될 수 있으므로 제어 능력이 향상되고 미래에 대비할 수 있지만 서버와 통신하기위한 프로토콜이 더 강력해질 수 있습니다. 이 예에서는 모든 드래그를 비활성화하지만 특정 상자 나 메타 페이지를 확인하도록 확장 할 수 있습니다.
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()
아무것도 반환하지, 스크립트 실행이 종료합니다. 코드를 수정하겠습니다.
워드 프레스 자바 스크립트는 hhn 제목으로 "hndle"클래스로 드래그 가능한 메타 박스를 식별합니다. 문제가있는 메타 박스를 참조하여 (사용자 정의 메타 박스를 생성하는 경우 식별자를 할당 한 경우) 클래스 이름을 제거하거나 이름을 바꾸어 hndle 클래스를 비활성화하면 이러한 기능을 비활성화 할 수 있습니다. 필자의 경우 .hndle h3으로 레이블이 지정된 여러 구분 기호 유형이 있지만 다른 사람이 이런 식으로 작업을 수행하지는 않습니다. 따라서 아래에서 수행 한 작업을 수행하거나 .find ( '. hndle'). attr ( 'class', '') .... 또는 이와 유사한 것을 사용할 수 있습니다. 이것은 당신이 functions.php 파일에 넣은 .js 파일에 있습니다 (테마 폴더 또는 플러그인 폴더에 있는지 여부). 큐잉은 admin_print_scripts에 의해 호출됩니다.
jQuery("#MY_METABOX_ID h3.hndle").each(function(e){
jQuery(this).attr("class", "hndlle");
});
나는 또한이 자바 스크립트 해킹을 추가 할 것입니다 :
<script type='text/javascript'>
jQuery(document).ready(function ($) {
$('.handlediv').remove();
});
</script>
...이 CSS :
.postbox .hndle:hover {
cursor:default;
}
드래그 앤 드롭과 열기 / 닫기 기능없이 메타 상자를 이용하기 위해이 코드를 사용했습니다.
.postbox:hover .handlediv { display:none; }
.handlediv 숨기기 위해 CSS에
나는 질문자가 정답을 선택하지 않는 한,이 질문은 확실하지 않은 것으로 나타났습니다.
Jan은 Ajax를 통해 메타 박스 재정렬을 막는 작업 예제를 제공했지만 다른 사람들은 JS와 관련된 제안을했습니다.
내가 이해하는 한 드래그를 비활성화하면 더 이상 아무것도하지 않습니다. 이를 위해서는 먼저 아약스 저장 동작을 가로채는 기능이 필요하지만 두 번째로 페이지의 다른 곳에서 기능을 중단하지 않고 JS 드래그 앤 드롭을 중지해야합니다. 게시물 유형 또는 특정 메타 박스
Jans 함수와 일부 jQuery를 사용하면 postbox 스크립트가 생성하는 다른 기능을 완전히 죽이지 않고도 할 수 있습니다.
적절한 행 중 하나를 주석 해제하여 대기열에 넣습니다.
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는 드래그를 방지합니다.
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
라인의 .
localize 호출 내부의 배열은 비활성화 할 메타 박스를 결정하는 것입니다 .localize 스크립트 함수는 배열의 0 키 인덱스를 제거하기 때문에 비어있는 0 키 항목이 있습니다.
둘째, 위의 조정 된 enqueue 함수에서 참조 된 새 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');
} );
});
숨길 메타 박스의 ID를 결정하고 비활성화 된 메타 박스를 설정하는 배열로 전달하면됩니다 ( wp_localize_scipt
통화 중).
전반적으로 메타 박스를 선택적으로 비활성화하는 것은 단점이 아니라고 생각합니다. 워드 프레스에서 정렬 가능한 초기화 작업을 다시 구성 할 수는 없습니다. 따라서 요소별로 메타 박스 정렬을 비활성화하는 것은 기껏해야 해킹 될 것입니다 (위의 코드는 다음과 같습니다) 그 증거). 이상적으로, 여기에 필요한 것은 정렬 가능한 초기화를 연결하는 WordPress의 작업이지만 현재 우편함 자바 스크립트 (단순 정렬 가능 설정 이상)로 하드 코딩되어 있습니다.
어쨌든, 그것이 원래의 질문을 해결하는 데 도움이되기를 바랍니다.
간단한 방법을 찾았습니다. 새로운 찾는 사람이 도움이되기를 바랍니다. 관리자 enqueue 스타일에 CSS 파일을 추가 할 수 있다고 가정하면 CSS를 사용하여 그렇게하고 내 나쁜 영어에 대해 유감스럽게 생각합니다.
.postbox#your-metabox-id .ui-sortable-handle {
pointer-events: none;
}
도움이 되길 바랍니다.
$('.postbox .hndle').css('cursor','default');
:::: 재 : 2 차 편집 , 당신은 가까운 장래에 대답을 계속 업데이트해야합니다 : P를