[{"data":1,"prerenderedAt":331},["ShallowReactive",2],{"$ft6jtkd6xhw3c":3,"$f1orffdshtyvul":263},{"featured":4,"latest":129,"categories":227},[5,14,27,37,48,56,66,76,86,96,106,114,122],{"slug":6,"title":7,"date":8,"excerpt":9,"image":10,"categories":11},"custom-database-tables","Custom DataBase Tables","2015-11-24T02:29:34","You can create the new own table freely in the your WordPress database via this plugin. Then, you can make the management of table or (as view or entry or edit) data in a simple user interface.\\nAlso,","\u002Fassets\u002Fuploads\u002F2016\u002F02\u002Fcdbt-overview.png",[12],{"slug":13,"name":7},"cdbt",{"slug":15,"title":16,"date":17,"excerpt":18,"image":19,"categories":20},"10_php_tips_for_developers","PHP開発者が心得ておくべき10の鉄則","2016-01-11T18:38:09","PHPだけに限った話ではないが、プログラミングを行うに当たって、心得て、準備しておくと失敗が劇的に減る事柄をまとめてある良い記事を見つけたので、私なりの解釈で意訳しつつ、経験則を踏まえてあらためてまとめてみた。 オリジナ…","\u002Fassets\u002Fuploads\u002F2016\u002F01\u002Feyecatch-php-10-tips.jpg",[21,24],{"slug":22,"name":23},"column","コラム",{"slug":25,"name":26},"development","開発関連",{"slug":28,"title":29,"date":30,"excerpt":31,"image":32,"categories":33},"jquery-timeline-v1","2種類の横型タイムラインを簡単に作成できる「jQuery.Timeline」をリリース","2017-05-29T14:55:46","現在開発しているサービスで利用するべく、横型タイムラインを生成できるjQueryプラグインを自作したので、そこだけ単独でリリースしてみた。 ソースコード等はGitHubの方にリリースしてあるので、興味のある方は、そち…","\u002Fassets\u002Fuploads\u002F2017\u002F05\u002Fjquery_timeline_image.png",[34],{"slug":35,"name":36},"jqtl","jQuery.Timeline",{"slug":38,"title":39,"date":40,"excerpt":41,"image":42,"categories":43},"optimize-browser-cache-of-static-resources","更新されたJS、CSS、画像のみブラウザキャッシュを破棄して読み込ませる","2018-01-31T15:47:47","WEBサービスの保守や開発をやっていると、JavaScriptやスタイルシート、画像などの静的リソースを更新した際、しばしば「確認したけど、更新されてないよ」とか云われて、「ブラウザのキャッシュを消してからもう一度見て…",null,[44,47],{"slug":45,"name":46},"codes","コード集",{"slug":25,"name":26},{"slug":49,"title":50,"date":51,"excerpt":52,"image":53,"categories":54},"jquery-timeline","jQuery.Timeline version2 – full documentation","2019-03-04T20:40:48","Plugin Overview The jQuery.Timeline plugin provides you two types of the horizontal timeline. You can create a…","\u002Fassets\u002Fuploads\u002F2019\u002F03\u002Fjquery.timeline_v2.jpg",[55],{"slug":35,"name":36},{"slug":57,"title":58,"date":59,"excerpt":60,"image":61,"categories":62},"released-the-sloth","Released the Sloth of mobile-first CSS micro framework!","2019-04-16T18:04:25","I released the “Sloth” that is mobile-first CSS micro framework. I have long used frontend framewo…","\u002Fassets\u002Fuploads\u002F2019\u002F04\u002Fsloth_doc_head.png",[63],{"slug":64,"name":65},"sloth","Sloth",{"slug":67,"title":68,"date":69,"excerpt":70,"image":71,"categories":72},"challenge-to-conceal-the-wordpress-site","WordPressサイトを徹底的に秘匿化する","2020-02-02T23:59:58","私は自分の個人サイトをはじめ、仕事でもWordPressサイトを運用している。WordPressは気軽にサイトを立ち上げられてカスタマイズも簡単な、素晴らしいオープンソースなのだが、世界中で使われまくっているその知名度…","\u002Fassets\u002Fuploads\u002F2020\u002F02\u002Fshutterstock_1878005929.jpg",[73],{"slug":74,"name":75},"wordpress","WordPress関連",{"slug":77,"title":78,"date":79,"excerpt":80,"image":81,"categories":82},"what-is-forkor","Made a shortened URL app called Forkor","2020-07-07T22:27:01","What’s Forkor? Forkor is a service that provides a shortened URL feature that allows you to redirect any…","\u002Fassets\u002Fuploads\u002F2020\u002F07\u002Fforkor.png",[83],{"slug":84,"name":85},"forkor","Forkor",{"slug":87,"title":88,"date":89,"excerpt":90,"image":91,"categories":92},"manual-about-svg-japan","インタラクティブな日本地図を生成するJSプラグイン「SVG Japan」","2020-11-16T21:19:58","各都道府県をそれぞれ選択・クリック可能なインタラクティブな日本地図を生成するネイティブJavaScript建てのプラグイン「SVG Japan」を作ったので、その紹介と使い方をまとめておく。ちなみにソースコードはgit…","\u002Fassets\u002Fuploads\u002F2020\u002F11\u002Fsvg-japan.png",[93],{"slug":94,"name":95},"svg-japan","SVG Japan",{"slug":97,"title":98,"date":99,"excerpt":100,"image":101,"categories":102},"wp-ignitor-plugin-to-conceal-wordpress-site","WordPressサイトを秘匿化するプラグイン「WP Ignitor」","2021-01-19T15:28:21","以前「WordPressサイトを徹底的に秘匿化する」という記事で、WordPress建てのサイトを秘匿化する方法を取り上げたのだが、あれをサイト構築時に毎度実施するとなるととても労力が必要であった。そこで、もっとお手軽…","\u002Fassets\u002Fuploads\u002F2021\u002F01\u002Fbanner-1554x500-1.png",[103],{"slug":104,"name":105},"wp-ignitor","WPイグナイタ",{"slug":107,"title":108,"date":109,"excerpt":110,"image":111,"categories":112},"tastewp","無料でWordPressサイトを複数作成できるWEBサービス「TasteWP」","2021-03-25T20:21:59","私が日本語翻訳に協力しているWEBサービス「TasteWP」について紹介しようと思う。 https:\u002F\u002Ftastewp.com このサービス、サインアップすることなく無料で自分用のWordPressサイトを作れるとい…","\u002Fassets\u002Fuploads\u002F2021\u002F03\u002FTasteWP_screenshot.png",[113],{"slug":74,"name":75},{"slug":115,"title":116,"date":117,"excerpt":118,"image":119,"categories":120},"monster-hunter-rise-skill-simulator","モンハンライズのスキルシミュレータを作ってみた！","2021-06-28T20:24:52","コラムで連載していたNintendo Switch版『モンスターハンターライズ』のスキルシミュレータ開発がやっと一段落して一通り完了した。いやぁ、記事書きながら同時並行で開発すると思っていた以上に時間がかかるもんだなぁ…","\u002Fassets\u002Fuploads\u002F2021\u002F06\u002Fmhrss_v100.png",[121],{"slug":25,"name":26},{"slug":123,"title":124,"date":125,"excerpt":126,"image":42,"categories":127},"comparison-of-javascript-date-libraries","JavaScriptの日時ライブラリを比較してみた","2021-07-28T22:39:19","ネイティブJavaScriptで日時を取り扱う場合、ビルトインされているDateオブジェクトを使うことになるのだが、このDateオブジェクトは取り扱いにクセが多く、直感的に日時を操作できない点でも有名である。そこで、専…",[128],{"slug":25,"name":26},[130,141,153,165,175,184,192,195,198,206,213,220],{"slug":131,"title":132,"date":133,"excerpt":134,"image":135,"categories":136},"pulllog_launched","ガチャ履歴を記録・分析できるWebサービス「PullLog」","2025-08-22T13:05:30","このたび、新しい個人開発サービスとして 「PullLog（プルログ）」 をリリースした。 URLはこちら https:\u002F\u002Fpulllog.net PullLogとは？ PullLogは、ソーシャルゲームのガチャ履歴を記録…","\u002Fassets\u002Fuploads\u002F2025\u002F08\u002Fpulllog_stats_jp.png",[137,140],{"slug":138,"name":139},"industries","プロダクト",{"slug":25,"name":26},{"slug":142,"title":143,"date":144,"excerpt":145,"image":146,"categories":147},"mockapi-php-openapi-schema-generation","モックAPIのレスポンスから OpenAPI 3.0 スキーマを自動生成するPHPツール","2025-04-17T09:31:52","私自身がそうなのですが、OpenAPI仕様書を毎回手作業で書いていて「面倒だな」と思ったことはありませんか？ そんな（私と）あなたにぴったりのツールがあります。 レスポンスの例さえ用意すれば、OpenAPI 3.0 スキ…","\u002Fassets\u002Fuploads\u002F2025\u002F04\u002Fswaggerui-preview.png",[148,151,152],{"slug":149,"name":150},"mockapi-php","MockAPI-PHP",{"slug":138,"name":139},{"slug":25,"name":26},{"slug":154,"title":155,"date":156,"excerpt":157,"image":158,"categories":159},"ambient_playlist_customize","Ambientでメメントモリのラメントプレイヤーを作る","2023-11-30T17:32:39","「Ambient」の最新バージョン 1.2.0で実装した「疑似フェーダー」機能を使って、ソーシャルゲーム「メメントモリ」のYouTube公式チャンネルで公開されているMVを集約したラメント専用プレイヤーを作ってみた。 ラ…","\u002Fassets\u002Fuploads\u002F2023\u002F11\u002Fambient_mememori_1.png",[160,163,164],{"slug":161,"name":162},"ambient","Ambient",{"slug":138,"name":139},{"slug":25,"name":26},{"slug":166,"title":167,"date":168,"excerpt":169,"image":170,"categories":171},"released_ambient_demo_version","Ambientメディアプレイヤーのクラウド版デモを公開","2023-11-22T13:47:36","つい先日「Ambient」の最新バージョン 1.1.0をリリースして、それに合わせてクラウド版デモサイトも公開してみた。 なお、クラウド版デモでローカルのホストコンピュータのメディアを再生するには、そのメディアファイルも…","\u002Fassets\u002Fuploads\u002F2023\u002F10\u002FAmbientMediaPlayer-typologo.png",[172,173,174],{"slug":161,"name":162},{"slug":138,"name":139},{"slug":25,"name":26},{"slug":176,"title":177,"date":178,"excerpt":179,"image":170,"categories":180},"ambient-media-player","YouTubeと自分のPC内メディアを同時に再生できるメディアプレイヤーを作ってみた","2023-10-20T00:00:25","私はよくPCで何か作業をするときには音楽を垂れ流していることが多い。 そういう時にかける曲は、手持ちのアルバムCD等からPCに取り込んだ音源だったり、さらにはYouTubeの動画だったりとメディアや再生環境がバラバラだ。…",[181,182,183],{"slug":161,"name":162},{"slug":138,"name":139},{"slug":25,"name":26},{"slug":185,"title":186,"date":187,"excerpt":188,"image":189,"categories":190},"what-is-the-sunorhc","Sunorhc is a date-time library for JavaScript","2021-08-25T22:55:55","Sunorhc is a lightweight library for handling dates and times for JavaScript. The library wraps a native JavaS…","\u002Fassets\u002Fuploads\u002F2021\u002F08\u002Fshutterstock_1091212919_resized.jpg",[191],{"slug":25,"name":26},{"slug":123,"title":124,"date":125,"excerpt":126,"image":42,"categories":193},[194],{"slug":25,"name":26},{"slug":115,"title":116,"date":117,"excerpt":118,"image":119,"categories":196},[197],{"slug":25,"name":26},{"slug":199,"title":200,"date":201,"excerpt":202,"image":203,"categories":204},"mhrise-skill-simulator-creation-chapter-12","モンスターハンターライズのスキルシミュレータを作ってみる！ 第12回","2021-06-21T13:11:46","今回は「マイセット登録」と護石データの「エクスポート／インポート」機能の追加をしていく。折り良く（悪く？）「FF7リメイク・インターグレード」や「FORTNITEシーズン7」が出たこともあって、そっちをプレイしてたらこ…","\u002Fassets\u002Fuploads\u002F2021\u002F04\u002Fb6ca09e9a7f6faf27641f62dabe64c6ff97b4f326aa478379e3c112aa28eb9ab.jpg",[205],{"slug":22,"name":23},{"slug":207,"title":208,"date":209,"excerpt":210,"image":203,"categories":211},"mhrise-skill-simulator-creation-chapter-11","モンスターハンターライズのスキルシミュレータを作ってみる！ 第11回","2021-06-07T14:52:31","さて、今回はユーザー個別データの管理部分を開発していく予定だが、まずその前にやっておくことがある。 新スキル「風雷合一」に対応する Ver.3.0の大型無料アップデートで追加された新スキルに「風雷合一」というのがある…",[212],{"slug":22,"name":23},{"slug":214,"title":215,"date":216,"excerpt":217,"image":203,"categories":218},"mhrise-skill-simulator-creation-chapter-10","モンスターハンターライズのスキルシミュレータを作ってみる！ 第10回","2021-06-02T00:29:10","今回は、護石管理画面の作成だ。この護石管理では、ユーザーごとに護石の登録を行う機能と、登録した護石を削除する機能を持つ仕様になる。この画面から登録した護石データはデータベースに格納するので、フロントエンド側からのリクエス…",[219],{"slug":22,"name":23},{"slug":221,"title":222,"date":223,"excerpt":224,"image":203,"categories":225},"mhrise-skill-simulator-creation-chapter-9","モンスターハンターライズのスキルシミュレータを作ってみる！ 第9回","2021-05-22T23:56:27","さて、今回はVuexによるデータ・キャッシュの実装だ。一度データベースから読み込んだデータをフロントエンド側で再利用可能なストアに格納することで、データベースへの接続回数を減らしてシステム負荷を下げるとともに、UX的な…",[226],{"slug":22,"name":23},[228,230,232,236,238,239,240,241,242,244,247,248,250,252,254,258,261],{"slug":161,"name":162,"count":229},3,{"slug":13,"name":7,"count":231},7,{"slug":233,"name":234,"count":235},"csnp","Custom Sticky Notes",2,{"slug":84,"name":85,"count":237},1,{"slug":35,"name":36,"count":229},{"slug":149,"name":150,"count":237},{"slug":64,"name":65,"count":237},{"slug":94,"name":95,"count":237},{"slug":74,"name":75,"count":243},37,{"slug":245,"name":246,"count":237},"wpqt","WP Qiita",{"slug":104,"name":105,"count":237},{"slug":22,"name":23,"count":249},29,{"slug":45,"name":46,"count":251},16,{"slug":138,"name":139,"count":253},5,{"slug":255,"name":256,"count":257},"lifelog","ライフログ",64,{"slug":259,"name":260,"count":235},"uncategorized","未分類",{"slug":25,"name":26,"count":262},45,{"type":264,"post":265},"post",{"slug":266,"title":267,"date":268,"excerpt":269,"image":270,"categories":271,"modified":274,"html":275,"tags":276,"related":285,"prev":320,"next":324},"no-plugin-how-to-set-category-order-by-using-description","プラグイン不要！ 説明欄を使ってカテゴリーの並び順を変える方法","2018-02-22T22:43:55","WordPressでカテゴリーの並び順を任意に変更したい場合、「Category Order and Taxonomy Terms Order」等のプラグインを導入するのが一般的だが、私のように管理画面に管理系のUIを…","\u002Fassets\u002Fuploads\u002F2018\u002F02\u002Fcategory_desciption_order_thumbnail.png",[272,273],{"slug":74,"name":75},{"slug":45,"name":46},"2021-03-24T23:27:09","\u003Cp>　WordPressでカテゴリーの並び順を任意に変更したい場合、「\u003Ca href=\"https:\u002F\u002Fja.wordpress.org\u002Fplugins\u002Ftaxonomy-terms-order\u002F\">Category Order and Taxonomy Terms Order\u003C\u002Fa>」等のプラグインを導入するのが一般的だが、私のように管理画面に管理系のUIを増やしたくないと思っている人向けに、元からあるカテゴリー編集画面の「カテゴリーの説明」欄を使って並び順を指定する処理を作ってみた。\u003Cbr \u002F>\n　呼称がないとこの記事上不便なので、この処理を「Category Description Order」と呼ぶことにする。\u003C\u002Fp>\n\u003Ch2>事前準備\u003C\u002Fh2>\n\u003Cp>　まずは、下記のソースをテーマの \u003Ccode>functions.php\u003C\u002Fcode> に追加しよう。\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php:\">defined( 'USE_CATEGORY_DESCRIPTION_ORDER' ) or define( 'USE_CATEGORY_DESCRIPTION_ORDER', true );\ndefined( 'CATEGORY_DESCRIPTION_ORDER_ON_ADMIN' ) or define( 'CATEGORY_DESCRIPTION_ORDER_ON_ADMIN', true );\n\nfunction optimize_category_description( $description ) {\n  if ( ! empty( $description ) &amp;&amp; strpos( $description, ';' ) !== false ) {\n    list( ,$_parse_description ) = explode( ';', $description, 2 );\n    $description = trim( $_parse_description );\n  }\n  return $description;\n}\n\nadd_filter( 'get_terms', function( $terms, $taxonomies, $args, $term_query ) {\n  $_is_run = is_admin() ? ( CATEGORY_DESCRIPTION_ORDER_ON_ADMIN ? true : false ) : true;\n  if ( $_is_run &amp;&amp; in_array( 'category', $taxonomies ) ) {\n    \u002F\u002F Category order by prepended number in description\n    $_tempOrder = [];\n    foreach ( $terms as $_idx =&gt; $term_obj ) {\n      if ( ! empty( $term_obj-&gt;description ) &amp;&amp; strpos( $term_obj-&gt;description, ';' ) !== false ) {\n        list( $_order_num, $_parse_description ) = explode( ';', $term_obj-&gt;description, 2 );\n        $_tempOrder[] = intval( trim( $_order_num ) );\n        if ( ! is_admin() ) {\n          $terms[$_idx]-&gt;description = trim( $_parse_description );\n        }\n      } else {\n        $_tempOrder[] = 0;\n      }\n    }\n    $_maxOrder = count( $_tempOrder ) &gt; 0 ? max( $_tempOrder ) : 1;\n    if ( USE_CATEGORY_DESCRIPTION_ORDER &amp;&amp; $_maxOrder &gt; 0 ) {\n      foreach ( $_tempOrder as $_idx =&gt; $_order ) {\n        if ( $_order == 0 ) {\n          $_maxOrder++;\n          $_tempOrder[$_idx] = $_maxOrder;\n        } else {\n          $_tempOrder[$_idx] = $_order;\n        }\n      }\n      array_multisort( $_tempOrder, $terms );\n      \u002F\u002F Remove categories if it has minus ordered\n      if ( ! is_admin() ) {\n        foreach ( $_tempOrder as $_idx =&gt; $_order ) {\n          if ( $_order &lt; 0 ) {\n            unset( $terms[$_idx] );\n          }\n        }\n      }\n    }\n  }\n  return $terms;\n}, PHP_INT_MAX, 4 );\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>　仕組みとしては、カテゴリーリストを取得・出力する関数 \u003Ccode>wp_list_categories()\u003C\u002Fcode> や \u003Ccode>widget_categories_args()\u003C\u002Fcode> 等の内部にて共通的に処理されている、ユーザー指定条件から生成したSQLクエリを投げ、DBから取得したデータをWP_Termオブジェクトに格納した直後のフィルターにフックして、出力前のカテゴリーリストの並び順を変更している。そして、その時に参照する並び順は、管理画面でカテゴリーの説明欄に入力した数字を元にする──という建付けだ。\u003Cbr \u002F>\n　これだと、カテゴリー編集時に同時に並び順も指定できて、さらにその場でどう並ぶのかも確認できる。別途並び順を変更するだけの管理UIを開く必要もなく、かなり便利だ。\u003C\u002Fp>\n\u003Cp>　また、このカテゴリーの説明欄を使用した並び順変更を使いたくない場合は1行目の \u003Ccode>USE_CATEGORY_DESCRIPTION_ORDER\u003C\u002Fcode> を \u003Ccode>false\u003C\u002Fcode> にすれば良い。\u003Cbr \u002F>\n　さらに、管理画面でのみこの機能をOFFにしたい場合は、2行目の \u003Ccode>CATEGORY_DESCRIPTION_ORDER_ON_ADMIN\u003C\u002Fcode> を \u003Ccode>false\u003C\u002Fcode> にすれば良い。\u003C\u002Fp>\n\u003Cp>　あと、この機能をONにした状況下で、テーマのテンプレート等で \u003Ccode>category_description()\u003C\u002Fcode> を実行すると、並び順番号が含まれたカテゴリーの説明が取得されてしまうので、そんな時は同梱の \u003Ccode>optimize_category_description()\u003C\u002Fcode> 関数を使って最適化してほしい（使用例は下記を参照）。\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php:\">echo optimize_category_description( category_description( 1 ) );\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2>実際の使い方\u003C\u002Fh2>\n\u003Cp>　では、この処理を使ってカテゴリーの並び替えを実践してみる。\u003Cbr \u002F>\n　インストールした素の WordPress 4.9.4 と「Twenty Seventeen」テーマ（バージョン1.4）にて、下記のようにカテゴリーを登録してみた。\u003C\u002Fp>\n\u003Cp>　\u003Cimg data-recalc-dims=\"1\" decoding=\"async\" src=\"\u002Fassets\u002Fuploads\u002F2018\u002F02\u002Fcategory_description_order_before.png\" alt=\"管理画面・並び替え前\" \u002F>\u003C\u002Fp>\n\u003Cp>　管理画面のカテゴリー編集画面での並び順は、 \u003Ccode>get_categories()\u003C\u002Fcode> 関数のデフォルトである \u003Ccode>name\u003C\u002Fcode> 順の昇順（かつ \u003Ccode>hierarchical\u003C\u002Fcode> が有効）となる。つまり、まず親カテゴリーに対して名前昇順で並び、それぞれの子カテゴリーも名前昇順で並んでいるのがわかる。\u003Cbr \u002F>\n　では、さっそく「Category Description Order」を有効にしてみる（定数の \u003Ccode>USE_CATEGORY_DESCRIPTION_ORDER\u003C\u002Fcode> と \u003Ccode>CATEGORY_DESCRIPTION_ORDER_ON_ADMIN\u003C\u002Fcode> を \u003Ccode>true\u003C\u002Fcode> にする）。\u003C\u002Fp>\n\u003Cp>\u003Cimg data-recalc-dims=\"1\" decoding=\"async\" src=\"\u002Fassets\u002Fuploads\u002F2018\u002F02\u002Fcategory_description_order_after.png\" alt=\"管理画面・並び替え後\" \u002F>\u003C\u002Fp>\n\u003Cp>　並びが変わった。\u003Cbr \u002F>\n　Descriptionのセミコロン（ \u003Ccode>;\u003C\u002Fcode> ）で区切られた数字の順で並んでいることがわかるだろうか。並び順の仕組みとしては、まず親のないトップレベルのカテゴリーに対してDescriptionの先頭数字順の昇順で並び、そのトップレベルカテゴリーにぶら下がる子カテゴリーに対しても改めてDescriptionの先頭数字順の昇順で並ぶ。その子たちについても同様だ。\u003Cbr \u002F>\n　もし同レベルのカテゴリーにおいて同一の先頭数字があった場合は、初期値である \u003Ccode>name\u003C\u002Fcode> の昇順となる。また、Descriptionに先頭数字がなかった場合は同レベルの末尾から \u003Ccode>name\u003C\u002Fcode> の昇順で並ぶ。Descriptionの先頭数字として並び順の指定に有効な数字は、0埋めされた数値や浮動小数点などでもOKだ。セミコロンで区切られた数字が複数指定された場合は、先頭の区切り数字のみが並び順として採用される。\u003Cbr \u002F>\n　なお、Descriptionの1つ目のセミコロンより後の文字列はすべて説明テキストとして取り扱われる。\u003Cbr \u002F>\n　Descriptionの先頭数字がマイナスの場合、管理画面側ではカテゴリーが表示されているが、フロントエンド側では表示されなくなる。カテゴリーリスト用の関数で \u003Ccode>get_categories( [ 'exclude' =&gt; '1,13' ] );\u003C\u002Fcode> のようにいちいちカテゴリーIDを調べて除外用の条件を指定する必要もなく、Descriptionの先頭に \u003Ccode>-1;\u003C\u002Fcode> を付けるだけで非表示にすることが可能だ（これが地味に重宝する機能だったりする）。\u003C\u002Fp>\n\u003Cp>　では、次にフロントエンド側での表示を見てみよう。「Twenty Seventeen」テーマではデフォルトでサイドバー・ウィジェットにカテゴリーリストが表示されているので、それを「Category Description Order」を有効にして並びを変えてみよう（ウィジェットの設定で \u003Ccode>hierarchical\u003C\u002Fcode> を有効にしている）。\u003Cbr \u002F>\n　まず並び替える前の状態。\u003C\u002Fp>\n\u003Cp>\u003Cimg data-recalc-dims=\"1\" decoding=\"async\" src=\"\u002Fassets\u002Fuploads\u002F2018\u002F02\u002Fcategory_description_order_frontend_before.png\" alt=\"フロントエンド・並び替え前\" \u002F>\u003C\u002Fp>\n\u003Cp>　デフォルトの並び順である \u003Ccode>name\u003C\u002Fcode> 順の昇順（かつ \u003Ccode>hierarchical\u003C\u002Fcode> が有効）で表示されている。\u003Cbr \u002F>\n　では「Category Description Order」を有効にしてみよう。\u003C\u002Fp>\n\u003Cp>\u003Cimg data-recalc-dims=\"1\" decoding=\"async\" src=\"\u002Fassets\u002Fuploads\u002F2018\u002F02\u002Fcategory_description_order_frontend_after.png\" alt=\"フロントエンド・並び替え後\" \u002F>\u003C\u002Fp>\n\u003Cp>　Descriptionの先頭番号順に並び替えが行われた。また、マイナス番号を設定したカテゴリーは非表示になっていることもわかる。\u003Cbr \u002F>\n　また、例の画像では「Novels」カテゴリにオンマウス状態で、ツールチップにカテゴリーの説明文が表示されているのだが、この説明文にはセミコロン区切りの先頭番号は含まれていないことも確認できる。\u003C\u002Fp>\n\u003Ch2>気をつける点\u003C\u002Fh2>\n\u003Cp>　ウィジェット以外でのカテゴリーリスト出力時の動作の確認を兼ねて、もう少し見てみよう。前述のウィジェットのカテゴリーリスト出力では、内部で \u003Ccode>wp_list_categories()\u003C\u002Fcode> が呼ばれているので、それ以外のカテゴリーリスト出力を試してみる。\u003Cbr \u002F>\n　テンプレートの本文中に下記のような処理を挿入してみた。\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php:\">wp_dropdown_categories();\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>　カテゴリーリストをドロップダウンリストで出力するテンプレート関数だ。今回は \u003Ccode>hierarchical\u003C\u002Fcode> の指定をしていないので、カテゴリーの入れ子構造は無視されてリスト化される。\u003C\u002Fp>\n\u003Cp>\u003Cimg data-recalc-dims=\"1\" decoding=\"async\" src=\"\u002Fassets\u002Fuploads\u002F2018\u002F02\u002Fcategory_description_order_frontend_dropdown.png\" alt=\"フロントエンド・並び替え後（入れ子無視）\" \u002F>\u003C\u002Fp>\n\u003Cp>　カテゴリーの入れ子構造を無視する出力を行うと、純粋にDescriptionのセミコロン区切りの先頭番号の順番で並ぶことになり、並び順が指定されていないカテゴリーや重複する番号を持つカテゴリーは、末尾に追加されていくことになる。\u003Cbr \u002F>\n　今回の例では、カテゴリーの入れ子構造ありなしで表示順が変わってしまった。こういうことを防ぐためには、Descriptionの先頭に付ける並び順番号はカテゴリー全体でユニークとなるように割り振っておくと意図しない並びになることはない。\u003C\u002Fp>\n\u003Ch2>発展的に\u003C\u002Fh2>\n\u003Cp>　この処理をカスタマイズすれば、カテゴリー以外のタクソノミー（タグとかカスタムタクソノミー等）に対しても独自に並び順を設定することは容易だ。\u003Cbr \u002F>\n　また、各カテゴリー内の記事のPVを定期的に集計してoptionsテーブルとかtermmetaテーブルあたりにキャッシュしておいて、総PV値が多いカテゴリー順に並べ替えるとか、カテゴリーの並び順を動的に変えることも難しくないだろう（こういうことやるならプラグイン化した方が良いだろうな）。\u003C\u002Fp>\n\u003Cp>　私的に、WordPressのプラグインって結構コストとリスクが高いものなので、導入するプラグインは厳選したいと考えている。そういう質なので、フィルターフック一発で対応できるようなカテゴリーの並べ替え処理に管理画面のUIを拡張するようなプラグインを導入するのには抵抗を感じてしまうのだ。WEB担が運営するような商業サイトであれば話はまた変わってくるんだろうけど。\u003C\u002Fp>\n\u003Cp>──というか、カテゴリーの並び順設定の機能って、WordPress本体にビルドインされていても良いように思うんだよねぇ…。\u003C\u002Fp>\n",[277,280,283],{"slug":278,"name":279},"category","Category",{"slug":281,"name":282},"order","Order",{"slug":74,"name":284},"WordPress",[286,294,303,312],{"slug":287,"title":288,"date":289,"excerpt":290,"image":42,"categories":291},"wordpress-emergency-tool","WordPressの管理画面にログインできなくなった時の緊急対処ツール","2017-06-17T00:13:27","WordPressのテーマとプラグインを開発していて、ログイン周りなどをカスタマイズしている時、ブラウザのセッションが切れて管理画面に入れなくなってしまう事などがまれにある。 私の例だと、WordPressの会員制サ…",[292,293],{"slug":74,"name":75},{"slug":45,"name":46},{"slug":295,"title":296,"date":297,"excerpt":298,"image":299,"categories":300},"shortcode-that-can-translate-of-the-post-contents-at-any-time-when-you-need-them","後付けでコンテンツを多国語化できるショートコード","2016-02-19T12:17:38","現在、自分のプラグインのドキュメンテーションをしているのだが、将来的には今書いているドキュメンテーション系のコンテンツは多国語化しようと思っている。 では、いざ多国語化しようとする時に、実際にはどうやってやろうか…と、ふ…","\u002Fassets\u002Fuploads\u002F2016\u002F02\u002Fquick-translate-eyecatch.png",[301,302],{"slug":74,"name":75},{"slug":45,"name":46},{"slug":304,"title":305,"date":306,"excerpt":307,"image":308,"categories":309},"tips-of-the-case-that-are-not-translated-only-part-in-wordpress","WordPressで一部だけ多国語化されない場合の解決方法","2016-02-04T12:43:55","WordPressのプラグインやテーマを作っていて、最新に追加したテキスト部分のみ多国語化がされないという症状が発生してちょっとハマったので、解決方法を備忘録として残しておく。 はじめに確認しておくべき項目 まず、Wor…","\u002Fassets\u002Fuploads\u002F2016\u002F02\u002Fshutterstock_75513031_resized.jpg",[310,311],{"slug":74,"name":75},{"slug":45,"name":46},{"slug":313,"title":314,"date":315,"excerpt":316,"image":42,"categories":317},"retrieve-all-the-images-associated-from-any-post-at-wordpress","WordPressで任意の投稿から関連する画像をすべて取得する","2015-09-09T15:37:39","私がWordPressサイトを作る時によく使っている独自の処理に「特定の投稿に関連する画像をすべて取得する」という関数がある。指定した投稿に設定されているサムネイル（アイキャッチ）画像、添付ファイルとしての画像、直接記事…",[318,319],{"slug":74,"name":75},{"slug":45,"name":46},{"slug":38,"title":39,"date":40,"excerpt":41,"image":42,"categories":321},[322,323],{"slug":45,"name":46},{"slug":25,"name":26},{"slug":325,"title":326,"date":327,"excerpt":328,"image":42,"categories":329},"contact-me","Contact Me","2019-02-19T23:49:57","読み込んでいます…",[330],{"slug":259,"name":260},1793391397540]