tri visuel des «types de publication personnalisés» pour les utilisateurs finaux

9

Maintenant, avec ces types de publication personnalisés et d'autres éléments de contenu qui n'ont pas nécessairement besoin d'être organisés chronologiquement par date, par exemple: le client a 100 T-shirts comme type de publication personnalisé "SHIRT" et il veut définir leur ordre d'apparition .

Quelle approche proposez-vous pour laisser l'éditeur / administrateur du site TRIER sa commande?

Amit
la source
Pouvez-vous donner des exemples de types de choses sur lesquelles il souhaiterait les trier? Certaines réponses peuvent être meilleures pour certaines choses que pour d'autres.
MikeSchinkel
Mike: peut-être des t-shirts où il voudrait être certain en premier, ou généralement tout message que l'utilisateur n'a pas inséré dans le bon ordre.
Amit
Pour ceux qui recherchent encore et qui parcourent ce post, il existe de jolis plugins WP qui résolvent ce problème. Je viens d'implémenter celui-ci: wordpress.org/extend/plugins/post-types-order

Réponses:

3

vous pouvez filtrer la taxonomie

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

utiliser ces crochets

            // to filter custom post type per custom taxonomy
        add_action( 'restrict_manage_posts', array( &$this, 'restrict_manage_posts') );
        add_action( 'request', array( &$this, 'request' ) );
bueltge
la source
J'ai essayé de l'implémenter mais cela ne fonctionne pas pour moi .. y a-t-il des étapes précédentes que je devrais prendre? déclarant une certaine taxonomie? Merci!
Amit
c'est un exemple sur ma classe pour le type de message personnalisé; vous devez changer le tableau (& this etc.) pour ne pas l'utiliser dans une classe et la constante FB_CPT_TAXONOMY_TYPE_1 est ma première taxonomie personnalisée et ainsi de suite et la constante FB_CPT_POST_TYPE_1 est mon premier type de publication personnalisé
bueltge
s'il vous plaît voir cette réponse ( wordpress.stackexchange.com/questions/45/… ), est similaire
bueltge
Je comprends .. Je ne me suis probablement pas expliqué très bien - ce que je voulais dire, c'est laisser l'utilisateur définir l'ordre de tri et ce nouvel ordre devrait être reflété sur le front-end. ce que je recherche en fait est quelque chose comme le nouveau menu gui mais pour les messages / type de messages personnalisés.
Amit
0

Je regarderais les écrans d'administration du générateur de menu. Puisqu'un menu est juste un type de message personnalisé, je suis sûr que certaines de ces choses peuvent être utilisées comme inspiration.

Vid Luther
la source
ce n'est pas une mauvaise idée du tout, mais les menus contiennent-ils un nombre infini d'éléments (plus de 100)? ne serait-ce pas un peu compliqué d'avoir un élément d'entrée pour chaque article?
Amit
0

Pour avoir un ordre de tri vraiment arbitraire (sans aucun lien avec un champ de publication), vous devez créer un champ "valeur de tri" (ou "poids") et saisir une valeur numérique pour chaque élément de ce champ. Vous pouvez ensuite trier sur ce champ.

Côté blanc
la source
0

Si tout ce que vous voulez faire est de définir une position pour chaque "chemise", alors pourquoi ne pas simplement utiliser l'ordre des menus, vous pouvez alors trier par ordre de menu dans votre WP_Query. Vous devrez probablement créer une méta-boîte qui définit la menu_orderpropriété du message . Puis dans votre WP_Query:

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

Cela fonctionnerait de la même manière que vous commandez des images dans l' Media Uploadonglet Galerie, pour définir l'ordre des menus de la page.

Ou est-ce que je comprends mal quelque chose?

Joe Hoyle
la source
vous avez bien compris, mais pensez à l'utilisateur .. il doit aller manuellement à chaque message et définir un numéro dans la boîte de métadonnées .. pas très sympathique ..
Amit
L'incorporer dans Quick Edit rendrait cela beaucoup plus facile, mais oui, cela pourrait prendre du temps.
Joe Hoyle
0

Ce que je préfère faire si je crée le type de publication dans un plugin ou dans du code, c'est également d'ajouter ce code, qui vous permet de définir un ordre par défaut pour le front et le back-end et également de définir la variable GET dans admin afin que l'administrateur WordPress reconnaît le changement et place la flèche vers le haut si vous triez par titre, date ou tout autre élément que vous affichez dans le tableau d'administration.

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

Étant donné que menu_order est la valeur par défaut, cela n'est pas nécessaire si vous triez un type de publication personnalisé par menu_order mais si c'est un type de publication où vous ne voulez pas que l'utilisateur ait à se soucier de se trier et que vous souhaitez utiliser quelque chose comme le titre , c'est très pratique.

Andrew T
la source