WordPressのプラグイン「Category Order and Taxonomy Terms Order」で並び替える対象を絞り込む

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」となります。

 

このエントリーをはてなブックマークに追加

関連記事

コメントを残す

メールアドレスが公開されることはありません。
* が付いている欄は必須項目です

CAPTCHA


コメントが承認されるまで時間がかかります。

2024年11月
 12
3456789
10111213141516
17181920212223
24252627282930