WordPress管理画面 カスタム投稿の記事一覧画面で絞り込み検索を追加する

Pocket

システム部の鈴木です。

先日、WordPressでファイルアップロードの機能におけるセキュリティホールの対策を行った最新版
4.5.2 がリリースされました。

弊社では沢山のサイトを管理させていただいておりますが、WordPressを導入しているサイトも多く
今回のような緊急性の高いセキュリティアップデートのときは一苦労です。

そんなWordPressについての小ネタです。

 カスタム投稿(Custom Post Type)

ブログというよりもCMSとしてWPを使う場合は、通常の投稿メニューでは無く
用途ごとにメニューを設けてそれぞれに適した入力項目を持った管理画面を作ったり、という事がよくあります。

そういった独自のメニューを作るときには「カスタム投稿(Custom Post Type)」という機能を使います。

 カスタム分類(Custom Taxonomy)

通常の投稿メニューとは別にカスタム投稿でメニューを作成したら、
その中でもカテゴリを設けたくなる場合があります。

それを実現するのが「カスタム分類(Custom Taxnomy)」というものです。

 

これらは Custom Post Type UI などのプラグインを使えばどちらも簡単に管理画面からの設定だけで作ることができます。

 

以上を踏まえて今回の本題です。

投稿一覧の画面には以下のようなカテゴリで絞り込むメニューがあると思います

20160527

カスタム投稿の一覧ページだと、カスタム分類を設定しても出てこないんですよね。
でも、検索があれば非常に便利。

ということで調べたところ、以下のようなコードが散見されました。

 

<br />
function add_post_taxonomy_restrict_filter()<br />
{<br />
    global $post_type;<br />
    if (&#8216;music&#8217; == $post_type) {<br />
        $menu = &lt;&lt;&lt;EOH<br />
          &lt;select name=&quot;genre&quot;&gt;<br />
            &lt;option value=&quot;&quot;&gt;カテゴリー指定なし&lt;/option&gt;<br />
EOH;<br />
            $terms = get_terms(&#8216;genre&#8217;);<br />
            foreach ($terms as $term) { ?&gt;<br />
                $menu .= &#8216;&lt;option value=&quot;&#8217; . $term-&gt;slug . &#8216;&quot;&gt;&#8217; . $term-&gt;name . &#8216;&lt;/option&gt;';<br />
            }<br />
        $menu .= &#8216;&lt;/select&gt;';</p>
<p>        echo $menu;<br />
    }<br />
}<br />
add_action(&#8216;restrict_manage_posts&#8217;, &#8216;add_post_taxonomy_restrict_filter&#8217;);<br />

これを使用しているテーマの function.php に書きましょう、というもの。
この例だと “music” というカスタム投稿で “genre” というカスタムタクソノミーから絞り込みを行う、というものです。
<select>のname属性には絞り込みに使うカスタムタクソノミーを指定するとの事です。

 

しかしこれ、どうもWordPressの4.4.1くらいからはうまく動かないみたいです。
メニューは出てきますがどうも上手く絞り込みがされません。

そこで訂正したものがこちらです。

<br />
function add_post_taxonomy_restrict_filter()<br />
{<br />
    global $post_type;<br />
    if (&#8216;music&#8217; == $post_type) {<br />
        echo &#8216;&lt;input type=&quot;hidden&quot; name=&quot;taxonomy&quot; value=&quot;music&quot;&gt;';<br />
        echo &#8216;&lt;select name=&quot;term&quot;&gt;';<br />
        echo &#8216;  &lt;option value=&quot;&quot;&gt;カテゴリー指定なし&lt;/option&gt;';</p>
<p>        $terms = get_terms(&#8216;music&#8217;);<br />
        foreach ($terms as $term) {<br />
            echo &#8216;&lt;option value=&quot;&#8217; . $term-&gt;slug . &#8216;&quot;&gt;&#8217; . $term-&gt;name . &#8216;&lt;/option&gt;';<br />
        }<br />
        echo &#8216;&lt;/select&gt;';<br />
    }<br />
}<br />
add_action(&#8216;restrict_manage_posts&#8217;, &#8216;add_post_taxonomy_restrict_filter&#8217;);</p>
<p>

変更のポイントは主に2つ

  • カスタム分類名は hidden で渡す
  • <select>のname属性は 検索対象とするキー、つまり “term” を指定する

この修正で上手く行きました。

 

 カスタム投稿、カスタム分類は非常によく使う機能なので、今後は本体で是非サポートしてほしいですね。

それまではこの方法をお試しください。