web-dev-qa-db-fra.com

Comment définir l'ordre d'un type d'article personnalisé

J'essaie d'intégrer un type de message personnalisé à curseur dans WordPress et je n'arrive pas à définir l'ordre (orderby: ID, order: ASC) pour ce type de message personnalisé.

J'ai ajouté la fonction supports => array('title','page-attributes'), au type d'article, mais lorsque je modifie l'attribut d'ordre d'une diapositive, l'ordre ne change pas (ni sur le back-end ni sur le front-end).

Ceci est le functions.php (il donne aussi cette erreur: Notice: Undefined index: post_type in .../functions.php on line 105)

function set_custom_post_types_admin_order($wp_query) {
$post_type = $wp_query->query['post_type']; // line 105
    if ( $post_type == 'bxslider') {
      $wp_query->set('orderby', 'ID');
      $wp_query->set('order', 'ASC');
    }
}
add_filter('pre_get_posts', 'set_custom_post_types_admin_order');

Et c'est le bxslider.php

<?php 

// Create Slider

function hostify_bxslider_template() {

    // Query Arguments
    $args = array(
        'post_type' => 'bxslider',
        'orderby' => 'ID',
        'order' => 'ASC',
        'posts_per_page' => -1
    );  

    // The Query
    $the_query = new WP_Query( $args );

    // Check if the Query returns any posts
    if ( $the_query->have_posts() ) {

        // Start the Slider ?>
        <div id="slider">

            <?php
            while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
                <div>
                    <div class="slide">

                    <?php // Check if there's a BxSlider h2 given and if so post it
                    if ( get_post_meta( get_the_id(), 'bxslide_metabox_h2', true) != '' ) { ?>
                        <h2><?php echo get_post_meta( get_the_id(), 'bxslide_metabox_h2', true); ?></h2>
                    <?php } ?>

                    <?php // Check if there's a BxSlider h1 given and if so post it
                    if ( get_post_meta( get_the_id(), 'bxslide_metabox_h1', true) != '' ) { ?>
                        <h1><?php echo get_post_meta( get_the_id(), 'bxslide_metabox_h1', true); ?></h1>
                    <?php } ?>

                    <?php // Check if there's a BxSlider paragraph given and if so post it
                    if ( get_post_meta( get_the_id(), 'bxslide_metabox_text', true) != '' ) { ?>
                        <p><?php echo get_post_meta( get_the_id(), 'bxslide_metabox_text', true); ?></p>
                    <?php }

                    // Check if there's a BxSlider button link or button name given and if so post it
                    if ( get_post_meta( get_the_id(), 'bxslide_metabox_link', true) != '' || get_post_meta( get_the_id(), 'bxslide_metabox_name', true) != '' ) { ?>
                        <a href="<?php echo esc_url( get_post_meta( get_the_id(), 'bxslide_metabox_link', true) ); ?>" class="button2"><?php echo get_post_meta( get_the_id(), 'bxslide_metabox_name', true); ?></a>
                    <?php } ?>
                        <div class="clear"></div><br />
                    </div>
                </div>
            <?php endwhile; } ?>
        </div>

        <?php 

    // Reset Post Data
    wp_reset_postdata();
}

?>

P.S. Le curseur fonctionne très bien, je ne peux tout simplement pas changer l'ordre des diapositives.

1
Daniel Sarmas

Comme @Pat l'a dit, pre_get_posts est un crochet d'action, cela ne fonctionnera pas de cette façon. Mais vous n'avez pas besoin d'utiliser le hook pre_get_posts dans functions.php. Supprimez ces fonctions et filtrez du fichier de fonctions et utilisez ces arguments dans WP_Query. orderby au lieu de ID, utilisez menu_order.

$args = array(
    'post_type' => 'bxslider',
    'orderby' => 'menu_order',
    'order' => 'ASC',
    'posts_per_page' => -1,
    'ignore_sticky_posts' => 1,
);
1
Robert hue