web-dev-qa-db-fra.com

Glisser-déposer des commandes postales pour plusieurs types de post-personnalisés

J'ai deux types de publication personnalisés (Produits et éléments de marque) que je présente sur une seule page et le client souhaite pouvoir contrôler l'ordre de tri de la page.

Quel serait le meilleur plan d'action pour créer un moyen pour le client de réorganiser deux types de publication avec une interface glisser-déposer? Étant donné qu'il s'agit de 2 types de publication différents, aucun des plugins actuellement disponibles ne convient.

6
mchandleraz

Il est courant d'utiliser l'interface utilisateur du menu de navigation WordPress pour obtenir la fonctionnalité glisser/déposer pour free .

Je pense qu'il y a déjà quelques réponses, sur ce site, qui expliquent cela mieux que je ne peux le faire, mais je n'arrive pas à les trouver pour vous. Alors laissez-moi essayer de construire un exemple simple:

  1. Nous allons à Apparence/Menus et créons un menu avec par ex. l'identifiant de menu mylist.

  2. Ensuite, nous glissons/déposons dans le menu et save it.

  3. Ajoutez le shortcode suivant à un contenu de page/publication:

    [wpd_list menu_id="mylist"]
    

avec l'extrait de code suivant pour le prendre en charge:

/**
 * Shortcode [wpd_list] to display posts ordered by the nav menu UI
 */
add_shortcode( 'wpd_list', function( $atts = array(), $content = null )
{
    $atts  = shortcode_atts( 
        array( 'menu_id' => '', ), 
        $atts, 
        'shortcode_wpd_list' 
    );
    $items = wp_get_nav_menu_items( sanitize_key( $atts['menu_id'] ) );
    $ids   = wp_list_pluck( $items, 'object_id' );   // Don't use db_id or page_name!
    $li    = '';
    $q     = new WP_Query( 
        array( 
            'post_type' => 'any', 
            'post__in'  => (array) $ids,
            'orderby'   => 'post__in',         // Must have for the correct order!
        ) 
    );
    while( $q->have_posts() )
    { 
        $q->the_post();
        $li .= sprintf( 
            '<li><h2><a href="%s">%s</a></h2></li>',    // Modify this HTML to your needs!
             get_permalink(), 
             get_the_title() 
        );
    }
    wp_reset_postdata();
    return ! empty( $li ) ? sprintf( '<ul>%s</ul>', $li ) : '';
} );

PS: En écrivant cet exemple, j'ai au moins fait deux erreurs au début ;-)

J'ai d'abord oublié de récupérer les articles dans l'ordre posts__in, pour correspondre à l'ordre du menu de navigation.

Deuxièmement, j'ai utilisé le db_id comme identifiant de poste à la place du champ object_id.

Après avoir corrigé cela, cela semblait fonctionner comme prévu, donc je viens de le poster ici maintenant ;-)

6
birgire

Cela ne fonctionnera pas avec votre configuration actuelle. Vous devez créer un type d'article unique et fractionner les articles via une taxonomie personnalisée qui comporterait deux termes: "éléments de marque" et "produits". C’est le seul moyen de combiner de manière réaliste deux types de publication dans une liste gérable qui peut être réorganisée par glisser-déposer.

À partir de là, vous pouvez afficher la commande via 'order' => 'ASC', 'orderby' => 'menu_order' dans votre requête $args et utiliser Commande de page simple pour les faire glisser et les déposer dans le tableau de bord.

De plus, lorsque vous enregistrez votre type de message, vous devez inclure 'hierarchical' => 'page-attributes'. Pour que les messages puissent être réorganisés.

2
deflime

Utilisez des catégories.

Créez une catégorie que vous pouvez appliquer aux deux types de publication, puis utilisez ce plugin:

https://wordpress.org/plugins/custom-post-order-category/

Pour commander tous les articles de cette catégorie.

N'affichez pas la catégorie au début de votre site Web, car son objectif est simplement d'aider à établir une relation entre les deux types de publication que ce plugin doit utiliser.

0
Josh Burson