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.
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,
);