0

カスタム投稿タイプの管理画面に分類フィルターを追加するための優れたソリューションを多数の人々が思いついた Wordpress Answer サイトで、約 2 年前から素晴らしい会話がありました (私が参照している画面の URL を参照してください)。 :

http://[yoursite.com]/wp-admin/edit.php?s&post_status=all&post_type=[post-type]

とにかく、Michael のすばらしい貢献が気に入りましたが、最終的には、Manny の階層オプションを使用して Somatic の実装を使用しました。私はそれをクラスにラップしました-それが私が物事を行うのが好きな方法です-そしてそれはほとんど機能します。ドロップダウンが表示されますが、ドロップダウンの値はすべて、フィルタリングしているタクソノミー slug-name の $_GET プロパティで検索されます。どういうわけか、私は何も得られません。ドロップダウンの HTML を見たところ、問題ないように見えました。いくつかのコンテキストの簡単なスクリーンショットを次に示します。

ここに画像の説明を入力

このことから、私の投稿タイプは「演習」と呼ばれ、フィルターとして使用しようとしている分類法は「アクション」であることがわかります。次に、ドロップダウン リストを囲む HTML を示します。

<select name="actions" id="actions" class="postform">
   <option value="">Show all Actions</option>
   <option value="ate-dinner">Ate dinner(1)</option>
   <option value="went-running">Went running(1)</option>
</select>

また、すべてのフォーム要素が DOM の一部内にあることも確認しました。それでも、「実行中」を選択してフィルターボタンをクリックすると、選択したものへの参照なしで URL クエリ文字列が返されます。

より明確に言うと、ページは最初に次の URL で読み込まれます。

/wp-admin/edit.php?post_type=exercise

アクションフィルターからオプションとして「実行中」を選択してフィルターボタンを押した後:

/wp-admin/edit.php?s&post_status=all&post_type=exercise&action=-1&m=0&actions&paged=1&mode=list&action2=-1

実際には、「アクション」変数への参照を確認できますが、何も設定されていません。詳細を確認すると、ページで「フィルター」をクリックすると、フィルター ドロップダウンがデフォルトの「すべて表示」にリセットされるようです。行動"。誰でもこれで私を助けることができますか?

ところで、ここに PHP コードを添付しました (ただし、現在は js の問題であることに傾倒し始めています): gist .

4

2 に答える 2

2

私は同じ問題を抱えていたので、小さな修正を加えて、基本的に分類法 $_GET パラメータが設定されているかどうかを確認しました。私はそれが役立つことを願っています:

add_action( 'restrict_manage_posts', 'my_restrict_manage_posts' );
function my_restrict_manage_posts() {
    global $typenow;
    $taxonomy = 'mytaxonomy'; // Change this

    if( $typenow != "page" && $typenow != "post" ){
        $filters = array($taxonomy);

        foreach ($filters as $tax_slug) {
            $tax_obj = get_taxonomy($tax_slug);
            $tax_name = $tax_obj->labels->name;
            $terms = get_terms($tax_slug);

            echo "<select name='$tax_slug' id='$tax_slug' class='postform'>";
            echo "<option value=''>Show All $tax_name</option>";

            foreach ($terms as $term) { 
                $label = (isset($_GET[$tax_slug])) ? $_GET[$tax_slug] : ''; // Fix
                echo '<option value='. $term->slug, $label == $term->slug ? ' selected="selected"' : '','>' . $term->name .' (' . $term->count .')</option>';
            }

            echo "</select>";
        }
    }
}
于 2013-01-27T19:35:33.457 に答える
0

このクラスを試してみてください。

于 2014-07-24T13:58:20.027 に答える