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」となります。
コメントが承認されるまで時間がかかります。