web-dev-qa-db-de.com

So legen Sie die Reihenfolge für einen benutzerdefinierten Beitragstyp fest

Ich versuche, einen benutzerdefinierten Beitragstyp mit Schieberegler in WordPress zu integrieren, und es scheint, dass ich die Reihenfolge (orderby: ID, order: ASC) für diesen benutzerdefinierten Beitragstyp nicht festlegen kann.

Ich habe die Funktion supports => array('title','page-attributes'), zum Beitragstyp hinzugefügt, aber wenn ich das Ordnungsattribut für eine Folie ändere, ändert sich die Reihenfolge nicht (weder im Back-End noch im Front-End).

Dies ist die functions.php (es gibt auch diesen Fehler: 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');

Und das ist die 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. Der Schieberegler funktioniert einwandfrei, ich kann die Reihenfolge der Folien einfach nicht ändern.

1
Daniel Sarmas

Wie @Pat sagte, ist pre_get_posts ein Aktions-Hook, der so nicht funktioniert. Aber Sie müssen nicht pre_get_posts hook in functions.php verwenden. Entfernen Sie diese Funktionen und filtern Sie aus der Funktionsdatei und verwenden Sie diese Argumente in Ihrer WP_Query. orderby anstelle von ID verwenden Sie menu_order.

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