Category Order and Taxonomy Terms Orderで親カテゴリーのみ並び替えられるようにする機会があったので、その時に行った方法をメモしておきます。
親カテゴリーのみ並び替えられるようにする場合
Category Order and Taxonomy Terms OrderではjQuery UIのsortableを使っているようだったので、管理画面にJavaScriptを追加して対応してみます。
functions.phpに以下のように追加します。
functions.php
<?php
function taxonomy_order_edit() {
?>
<script>
jQuery(function($) {
var param = location.search.slice(1);
// パラメータのない場合は処理終了
if(param === '') {
return;
}
// パラメータの分割
param = param.split('&');
var params = [];
for(var i = 0; i < param.length; i++) {
params[i] = param[i].split('=');
}
// パラメータからTaxonomy Orderのページかどうか判別
var taxonomyOrderPage = false;
for(var i = 0; i < params.length; i++) {
if(params[i][0] == 'page' && params[i][1].match(/to-interface-/)) {
taxonomyOrderPage = true;
}
}
// Taxonomy Orderのページでない場合は処理終了
if(!taxonomyOrderPage) {
return;
}
// 並び替えの対象を制御
$('.sortable.children').sortable('disable');
});
</script>
<?php
}
add_action('admin_footer', 'taxonomy_order_edit');
並び替え画面のURLのパラメータは「page=to-interface-投稿タイプ」の形になるようなので、パラメータがあるかどうかでページの判別を行っています。(22行目)
32行目の$(‘.sortable.children’).sortable(‘disable’); で子カテゴリー以下の並び替え機能を無効にしていますが、子カテゴリー以下を表示しないでよければ、単にhide()をするだけでも大丈夫です。
functions.php
<?php
function taxonomy_order_edit() {
?>
<script>
jQuery(function($) {
var param = location.search.slice(1);
// パラメータのない場合は処理終了
if(param === '') {
return;
}
// パラメータの分割
param = param.split('&');
var params = [];
for(var i = 0; i < param.length; i++) {
params[i] = param[i].split('=');
}
// パラメータからTaxonomy Orderのページかどうか判別
var taxonomyOrderPage = false;
for(var i = 0; i < params.length; i++) {
if(params[i][0] == 'page' && params[i][1].match(/to-interface-/)) {
taxonomyOrderPage = true;
}
}
// Taxonomy Orderのページでない場合は処理終了
if(!taxonomyOrderPage) {
return;
}
// 並び替えの対象を制御
$('.sortable.children').hide();
});
</script>
<?php
}
add_action('admin_footer', 'taxonomy_order_edit');
カテゴリー数が多い場合、hide()で消してしまった方がいいかもしれません。
変更前

変更後

子カテゴリー以下のみ並び替えられるようにする場合
親カテゴリーは並び替えしないで、子カテゴリー以下のみ並び替えできるようにしてみます。
functions.php
<?php
function taxonomy_order_edit() {
?>
<script>
jQuery(function($) {
var param = location.search.slice(1);
// パラメータのない場合は処理終了
if(param === '') {
return;
}
// パラメータの分割
param = param.split('&');
var params = [];
for(var i = 0; i < param.length; i++) {
params[i] = param[i].split('=');
}
// パラメータからTaxonomy Orderのページかどうか判別
var taxonomyOrderPage = false;
for(var i = 0; i < params.length; i++) {
if(params[i][0] == 'page' && params[i][1].match(/to-interface-/)) {
taxonomyOrderPage = true;
}
}
// Taxonomy Orderのページでない場合は処理終了
if(!taxonomyOrderPage) {
return;
}
// 並び替えの対象を制御
$('#post-body > .sortable').sortable('disable');
});
</script>
<?php
}
add_action('admin_footer', 'taxonomy_order_edit');
先ほどとほとんど変更はありませんが、$(‘#post-body > .sortable’)で親カテゴリーを指定しています。
投稿タイプを絞り込む場合
今までのサンプルはすべての投稿タイプで変更されるので、投稿タイプを絞ってみます。
functions.php
<?php
function taxonomy_order_edit() {
?>
<script>
jQuery(function($) {
var param = location.search.slice(1);
// パラメータのない場合は処理終了
if(param === '') {
return;
}
// パラメータの分割
var param = param.split('&');
var params = [];
for(var i = 0; i < param.length; i++) {
params[i] = param[i].split('=');
}
// パラメータからTaxonomy Orderのページかどうか判別
var taxonomyOrderPage = false;
for(var i = 0; i < params.length; i++) {
if(params[i][0] == 'page' && params[i][1].match(/to-interface-post/)) {
taxonomyOrderPage = true;
}
}
// Taxonomy Orderのページでない場合は処理終了
if(!taxonomyOrderPage) {
return;
}
// 並び替えの対象を制御
$('.sortable.children').sortable('disable');
});
</script>
<?php
}
add_action('admin_footer', 'taxonomy_order_edit');
22行目の「to-interface-post」でデフォルトの投稿のみ変更するようにしています。
カスタム投稿の「news」のみ変更したい場合は「to-interface-news」となります。
コメントが承認されるまで時間がかかります。