エンドユーザー向けに「カスタム投稿タイプ」を視覚的に並べ替え


9

たとえば、必ずしも日付で時系列に整理する必要のない、これらのカスタム投稿タイプとその他のコンテンツを使用します。たとえば、クライアントはカスタム投稿タイプ「SHIRT」として100枚のTシャツを持っており、外観の順序を設定したいと考えています。 。

サイトの編集者/管理者に順序をソートさせるには、どのようなアプローチをお勧めしますか?


彼が分類したいものの種類の例をいくつか挙げていただけますか?いくつかの答えは他のものよりもいくつかのもののために良いかもしれません。
MikeSchinkel 2010

マイク:たぶん最初にしたいTシャツ、または一般的にユーザーが挿入した投稿の順序が間違っている。
2010

この投稿全体でまだ検索している人のために、この問題を解決するいくつかの素晴らしいWPプラグインがあります。私はこれを実装しました:wordpress.org/extend/plugins/post-types-order

回答:



3

あなたは分類についてフィルタリングすることができます

        // to filter by category
    function restrict_manage_posts() {
        global $typenow;

        if ( FB_CPT_POST_TYPE_1 == $typenow ) {
            $args = array('orderby' => 'count', 'hide_empty' => true);
            echo $this->get_taxonomy_html_select(FB_CPT_TAXONOMY_TYPE_1, $args);
        }
    }

    function get_taxonomy_html_select($taxonomy_name, $args) {

        $taxonomy = get_taxonomy($taxonomy_name);
        $terms = get_terms($taxonomy_name, $args);
        $label = __( 'Show all ' . $taxonomy->label, FB_CPT_TEXTDOMAIN );
        $html = array();
        $html[] = '<select style="min-width:155px;" id="' . $taxonomy_name . '" name="' . $taxonomy_name . '" class="postform">';
        $html[] = '<option value="0">' . $label . '</option>';
        if ( isset($_GET[$taxonomy_name]) )
            $this_term = $_GET[$taxonomy_name];
        else
            $this_term = '';
        foreach($terms as $term) {
            $default = ( $this_term == $term->term_id ? ' selected="selected"' : '' );
            $value = esc_attr($term->name);
            $value = $value . '&nbsp;&nbsp;(' . (int)$term->count . ')';
            $html[] = "\t" . '<option value="' . $term->term_id . '"' . $default . '>' . $value . '</option>';
        }
        $html[] = '</select>' . "\n";
        return implode( "\n", $html );
    }

    function request($request) {
        global $pagenow;

        if ( is_admin() && 'edit.php' == $pagenow && isset( $request[FB_CPT_TAXONOMY_TYPE_1] ) && FB_CPT_POST_TYPE_1 == $request[FB_CPT_TAXONOMY_TYPE_1] ) {
            $request['taxonomy'] = FB_CPT_TAXONOMY_TYPE_1;
            $request['term'] = get_term($request[FB_CPT_TAXONOMY_TYPE_1], FB_CPT_TAXONOMY_TYPE_1)->name;
            unset($request['name']);
        }

        return $request;
    }

このフックを使用

            // to filter custom post type per custom taxonomy
        add_action( 'restrict_manage_posts', array( &$this, 'restrict_manage_posts') );
        add_action( 'request', array( &$this, 'request' ) );

実装しようとしたのですが、うまくいきません。分類法を宣言しますか?ありがとう!
2010

カスタム投稿タイプの私のクラスの例です。クラスで使用しないように配列(&thisなど)を変更する必要があります。定数FB_CPT_TAXONOMY_TYPE_1は最初のカスタム分類法であり、定数FB_CPT_POST_TYPE_1は最初のカスタム投稿タイプです
bueltge

この回答を参照してください(wordpress.stackexchange.com/questions/45/…)は同様です
bueltge

わかりました。おそらく自分自身はあまり説明していませんでした。つまり、ユーザーが並べ替え順序を設定できるようにすることであり、この新しい順序はフロントエンドに反映されるはずです。私が実際に探しているのは、新しいメニューのguiのようなものですが、投稿/カスタム投稿タイプです。
2010

0

メニュージェネレータの管理画面を見てみます。メニューはカスタムの投稿タイプなので、その一部はインスピレーションとして使用できると思います。


それはまったく悪い考えではありませんが、メニューには無数のアイテム(100以上)が保持されますか?投稿ごとにエントリアイテムを用意するのは少々大げさではないでしょうか。
2010

0

本当に任意の並べ替え順序(投稿フィールドとはまったく無関係)にするためには、「並べ替え値」(または「重み」)フィールドを作成し、そのフィールドの各アイテムに数値を入力する必要があります。その後、そのフィールドでソートできます。


0

あなたがしたいすべてが各「シャツ」の位置を設定することであるなら、なぜメニューオーダーを使用するだけでなく、WP_Queryでmenu_orderでソートすることができます。投稿のmenu_orderプロパティを設定するメタボックスを作成する必要があります。次にあなたのWP_Query

$shirts = new WP_Query( 'post_type=shirt&orderby=menu_order&order=ASC' );

これはMedia Upload、「ページ」のメニューの順序を設定するために、「ギャラリー」タブで画像を順序付ける方法と同様に機能します。

それとも私は何かを誤解していますか?


正解ですが、ユーザーのことを考えてください。彼は手動で各投稿に移動し、メタボックスに番号を設定する必要があります..あまりフレンドリーではありません..
Amit

それをクイック編集に組み込むと、はるかに簡単になりますが、時間がかかる可能性があります。
Joe Hoyleが2010

0

プラグインまたはコードで投稿タイプを作成する場合、私が好むのはこのコードも追加することです。これにより、フロントエンドとバックエンドのデフォルトの順序を設定し、管理でGET変数を設定することができます。 WordPress管理者が変更を認識し、タイトル、日付、または管理者テーブルに表示されている他のもので並べ替えている場合は、矢印を上に置くこと。

add_filter( 'pre_get_posts' , 'my_cpt_order' ); // Runs before the posts are fetched
function my_cpt_order( $query ) {
    // Check query and alter only the query needed
    //echo '<PRE>'; print_r($query); echo '</PRE>'; 
    if ($query->query['post_type'] == 'cpt' && !isset($query->query['orderby'])) {
        $query->set( 'orderby' , 'title' );
        $query->set( 'order' , 'asc' );
        //get the arrow to show up over title in admin
        if (is_admin()) {
            $_GET['orderby'] = 'title';
            $_GET['order'] = 'asc';
        }
    } //if
} //my_cpt_order

menu_orderがデフォルトであるため、menu_orderでカスタム投稿タイプを並べ替える場合は必要ありませんが、ユーザーが自分で並べ替える必要がないようにし、タイトルなどを使用したい投稿タイプである場合、それは非常に便利です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.