Sortieren Sie die Reihenfolge der benutzerdefinierten Beitragstypen für Endbenutzer visuell


9

Jetzt mit diesen benutzerdefinierten Beitragstypen und anderen Inhalten, die nicht unbedingt chronologisch nach Datum geordnet sein müssen, zum Beispiel: Der Kunde hat 100 T-Shirts als benutzerdefinierten Beitragstyp "SHIRT" und möchte die Reihenfolge ihres Erscheinungsbilds festlegen .

Welchen Ansatz schlagen Sie vor, um den Herausgeber / Administrator der Site ihre Bestellung sortieren zu lassen?


Können Sie einige Beispiele dafür geben, nach welchen Arten von Dingen er sie sortieren möchte? Einige Antworten sind für einige Dinge möglicherweise besser als für andere.
MikeSchinkel

Mike: Vielleicht T-Shirts, bei denen er sicher sein möchte, dass sie an erster Stelle stehen, oder generell alle Posts, die der Benutzer nicht in der richtigen Reihenfolge eingefügt hat.
Amit

Für diejenigen, die noch suchen und auf diesen Beitrag stoßen, gibt es einige nette WP-Plugins, die dieses Problem lösen. Ich habe gerade dieses implementiert: wordpress.org/extend/plugins/post-types-order

Antworten:



3

Sie können nach Taxonomie filtern

        // 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;
    }

Verwenden Sie diese Haken

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

Ich habe versucht, es zu implementieren, aber es funktioniert bei mir nicht. Gibt es irgendwelche vorherigen Schritte, die ich unternehmen sollte? Taxonomie erklären? Vielen Dank!
Amit

Es ist ein Beispiel für meine Klasse für einen benutzerdefinierten Beitragstyp. Sie müssen das Array (& dies usw.) ändern, um es nicht in einer Klasse zu verwenden, und die Konstante FB_CPT_TAXONOMY_TYPE_1 ist meine erste benutzerdefinierte Taxonomie. Die Konstante FB_CPT_POST_TYPE_1 ist mein erster benutzerdefinierter Beitragstyp
bueltge

Bitte sehen Sie diese Antwort ( wordpress.stackexchange.com/questions/45/… ), ist ähnlich
bueltge

Ich verstehe .. Ich habe mich wahrscheinlich nicht sehr gut erklärt - ich meinte damit, dass der Benutzer die Sortierreihenfolge einstellt und diese neue Reihenfolge im Front-End angezeigt wird. Was ich eigentlich suche, ist so etwas wie die neue Menü-GUI, aber für Posts / benutzerdefinierte Posts.
Amit

0

Ich würde mir die Admin-Bildschirme des Menügenerators ansehen. Da es sich bei einem Menü nur um einen benutzerdefinierten Beitragstyp handelt, kann sicher einiges davon als Inspiration verwendet werden.


Das ist überhaupt keine schlechte Idee, aber enthalten Menüs unendlich viele Elemente (über 100)? Wäre es nicht ein bisschen aufgedunsen, für jeden Beitrag einen Eintrag zu haben?
Amit

0

Um eine wirklich willkürliche Sortierreihenfolge zu haben (völlig unabhängig von einem Post-Feld), müssen Sie ein Feld "Sortierwert" (oder "Gewicht") erstellen und für jedes Element in diesem Feld einen numerischen Wert eingeben. Sie können dann nach diesem Feld sortieren.


0

Wenn Sie nur eine Position für jedes "Shirt" festlegen möchten, können Sie die Menüreihenfolge verwenden und in Ihrer WP_Query nach menu_order sortieren. Sie müssen wahrscheinlich eine Meta-Box erstellen, die die menu_orderEigenschaft des Posts festlegt . Dann in Ihrem WP_Query:

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

Dies funktioniert ähnlich wie beim Bestellen von Bildern auf der Media UploadRegisterkarte Galerie, um die Menüreihenfolge der Seite festzulegen.

Oder verstehe ich etwas falsch?


Sie haben es richtig gemacht, aber denken Sie an den Benutzer .. er muss manuell zu jedem Beitrag gehen und eine Nummer in der Meta-Box setzen .. nicht sehr freundlich ..
Amit

Das Einbinden in Quick Edit würde das viel einfacher machen, aber ja, es könnte zeitaufwändig sein.
Joe Hoyle

0

Was ich lieber mache, wenn ich den Beitragstyp in einem Plugin oder im Code erstelle, ist, diesen Code hinzuzufügen, mit dem Sie eine Standardreihenfolge für das Front- und Back-End festlegen und die GET-Variable auch in admin festlegen können dass der WordPress-Administrator die Änderung erkennt und den Pfeil nach oben zeigt, wenn Sie nach Titel, Datum oder etwas anderem sortieren, das Sie in der Admin-Tabelle anzeigen.

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

Da menu_order die Standardeinstellung ist, ist dies nicht erforderlich, wenn Sie einen benutzerdefinierten Beitragstyp nach menu_order sortieren. Wenn es sich jedoch um einen Beitragstyp handelt, bei dem der Benutzer sich nicht um das Sortieren selbst kümmern muss und Sie so etwas wie title verwenden möchten Es ist sehr praktisch.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.