Czy ktoś wie, jak wyłączyć tę funkcję, aby nie można było zmienić położenia metaboksów?
Miałem ten sam problem i Google zaprowadził mnie tutaj. Niestety żadna z tych odpowiedzi nie pomogła, ale w końcu wymyśliłem odpowiedź i to całkiem proste!
admin_enqueue_scripts
i działało dobrze.Wyłącz funkcję sortowania, umieszczając to w tym pliku JavaScript:
jQuery(document).ready( function($) {
$('.meta-box-sortables').sortable({
disabled: true
});
$('.postbox .hndle').css('cursor', 'pointer');
});
Zasadniczo wyłącza to jQuery UI Sortable , który zasila funkcję przeciągania metaboksu ( postbox.dev.js: 64 ). Spowoduje to również przełączenie kursora na uchwycie metaboksu na standardowy wskaźnik myszy zamiast kursora ruchu (pomysł dzięki uprzejmości brasofilo poniżej).
Mam nadzieję że to pomoże!
Edycja: Powinienem dodać, że prawdopodobnie warto zastosować się do kilku innych porad tutaj i wyłączyć zapisywanie zamówienia metabox. Pozwoli to uniknąć nieporozumień związanych z przypadkowym ponownym włączeniem.
Druga edycja: z myślą o przyszłych pokoleniach (i przyszłych wyszukiwarkach Google) ta poprawka została przetestowana na WordPress 3.3.1. Nie mogę rozmawiać z innymi wersjami!
$('.postbox .hndle').css('cursor','default');
:::: Re: 2. edycja , będziesz musiał aktualizować Odpowiedź w dającej się przewidzieć przyszłości: PNajszybszym sposobem jest wyłączenie JS dla tej funkcji. Ale myślę, że lepiej jest wyrejestrować styl pudełka i zainicjować styl niestandardowy bez efektów dla myszy i ikony otwierania / zamykania na meta boxach.
źródło
admin_init
tylko w niektórych określonych typach postów?I odpowiedział na podobne pytanie z sugestią, aby umożliwić przeciągnięcie, ale wyłączenie zapisywania nowego porządku po stronie serwera. Może to dać większą kontrolę i być bardziej przyszłościowym, ponieważ JavaScript może się szybko zmieniać, ale protokół komunikacji z serwerem może pozostać bardziej niezawodny. Ten przykład wyłącza wszystkie przeciąganie, ale możesz go rozwinąć, aby sprawdzić określone pole lub meta stronę.
źródło
check_ajax_referer
to akcja, a nie filtr. Powinieneśdie()
tam po prostu zakończyć wykonywanie skryptu, a nie zwracać niczego. Naprawię mój kod.Wordpress javascript identyfikuje przeciągalne metaboksy według tytułu h3 z klasą „hndle”. Wystarczy je wyłączyć, odwołując się do danego metaboksu (jeśli tworzysz niestandardowe metaboksy, przypisałeś mu identyfikator) i wyłączasz dowolne klasy hndle, usuwając nazwę klasy lub zmieniając jej nazwę. W moim przypadku mam kilka typów separatorów, które oznaczyłem za pomocą .hndle h3, ale jest mało prawdopodobne, aby ktokolwiek zrobił to w ten sposób. Możesz więc zrobić to, co zrobiłem poniżej, lub użyć .find ('. Hndle'). Attr ('class', '') .... lub coś podobnego. Byłoby to w pliku .js, który zapisałeś w kolejce w pliku functions.php (niezależnie od tego, czy znajduje się on w folderze motywów, czy w folderze wtyczek). Kolejkowanie byłoby wywoływane przez admin_print_scripts,
źródło
Dodałbym również ten JavaScript Hack:
... i ten CSS:
Użyłem tego kodu, aby skorzystać z metatoksów, ale bez funkcji przeciągania i upuszczania oraz funkcji otwierania / zamykania.
źródło
.postbox:hover .handlediv { display:none; }
CSS, aby ukryć plik .handledivZauważyłem, że to pytanie pozostało bez odpowiedzi, o ile pytający nie wybrał poprawnej odpowiedzi.
Jan podał praktyczny przykład zatrzymania zapisywania ponownego zamawiania metaboksu nad Ajaxem, podczas gdy inni podali sugestie dotyczące JS.
O ile rozumiem, wszystko, co chcesz zrobić, to wyłączyć przeciąganie, nic więcej. Aby to zrobić, potrzebujesz dwóch rzeczy, po pierwsze funkcji przechwytującej akcję oszczędzania ajax, ale po drugie, musisz także zatrzymać przeciąganie i upuszczanie JS bez zabijania funkcji gdziekolwiek indziej na stronie, jednocześnie wykonując to wybiórczo dla typ postu lub określony metaboks.
Korzystając z funkcji Jans i niektórych jQuery, możemy to zrobić bez całkowitego niszczenia innych funkcji tworzonych przez skrypt skrzynki pocztowej, tak jak w przypadku
Kod PHP pliku funkcji motywu lub pliku wtyczki
Odkomentuj 1 z odpowiednich wierszy, aby kolejka działała.
jQuery / JS dla pliku JavaScript, o którym mowa powyżej
Bardzo podstawowa jquery, która usuwa sortowalną klasę metabox z możliwych do zastosowania elementów, zapobiega to przeciąganiu.
Jak widać dodałem w 1 przykładowym typie wpisu, aby dodać kod, zarezerwuj w tym przypadku. Jednak wspomniałeś, że chcesz mieć również możliwość wyłączenia go dla określonych metaboksów.
Można to zrobić, istnieje tylko kilka małych efektów ubocznych, jednym z nich jest to, że usuwając klasy z danych metaboksów, aby zapobiec przeciąganiu, uniemożliwiasz również działanie funkcji przełączania (tj. Funkcji przełączania tytułu metaboksu).
To powiedziawszy, można to zrobić ...
Najpierw zaktualizujesz
disable_metabox_dragging
funkcję do ...Ponownie, zauważając, że musisz odkomentować odpowiednią
wp_enqueue_script
linię.Tablica wewnątrz wywołania lokalizacji określa, które metaboksy mają zostać wyłączone, pusty element z kluczem 0 jest tam celowo, ponieważ funkcja skryptu lokalizacji usuwa wszystkie indeksy z kluczem 0 w tablicy.
Po drugie, nowy plik JS, do którego odwołuje się powyższa poprawiona funkcja kolejkowania.
Jedyne, co musisz zrobić, to określić identyfikator metaboksów, które chcesz ukryć, i przekazać je do tablicy, która ustawia wyłączone metaboksy (w
wp_localize_scipt
wywołaniu).Ogólnie rzecz biorąc, nie sądzę, aby selektywne wyłączanie metaboksów było pozbawione wad, po prostu nie ma wsparcia w ponownej konfiguracji sortowalnej akcji init w WordPress, więc wyłączenie sortowania metaboksów na podstawie poszczególnych elementów będzie w najlepszym przypadku hakujące (mój kod powyżej to dowód na to). Idealnie, tutaj potrzebna jest akcja w WordPress, aby podpiąć sortowalny init, ale obecnie jest on zakodowany na stałe w javascript skrzynki pocztowej (która robi więcej niż tylko konfigurację sortowalną).
W każdym razie mam nadzieję, że pomogło to rozwiązać pierwotne pytanie.
źródło
Aby dodać do wszystkich poprzednich odpowiedzi, jeśli chcesz również uniemożliwić WordPressowi ładowanie niestandardowych pozycji, następujące czynności powinny załatwić sprawę (zastąp
post
dowolnym postem):źródło
Właśnie znalazłem prosty sposób, mam nadzieję, że nowy poszukiwacz pomógłby w tym. Zakładając, że możesz dodać plik css w stylu kolejki administratora, używam tylko css, aby to zrobić i przepraszam za mój zły angielski.
Mam nadzieję, że to pomoże.
źródło