it-swarm.com.de

Sortierreihenfolge für eine benutzerdefinierte Abfrage in einem Beitragstyparchiv funktioniert nicht

Ich habe einen benutzerdefinierten Beitragstyp für Ereignisse eingerichtet und zeige die Beiträge in einem benutzerdefinierten Beitragstyp-Archiv "archive-events.php" an.

Ich verwende erweiterte benutzerdefinierte Felder, um jedem Beitrag ein vom Benutzer ausgewähltes Ereignisdatum "event_date" zuzuweisen. Das Datum wird im Format "JJJJMMTT" ausgegeben. Beispiel: "20141129".

Ich habe es so eingerichtet, dass ein Ereignisdatum, das älter als zwei Tage ist, nicht angezeigt wird. Verstecken von Ereignissen, die vergangen sind. Diese Funktion funktioniert ordnungsgemäß.

Das Problem ist, dass aus irgendeinem Grund Ich kann die Sortierreihenfolge der Beiträge nicht ändern . Ich möchte die Termine so anordnen, dass der nächstgelegene Termin zuerst angezeigt wird, damit die Leute wissen, welche Termine anstehen. Also würde ich die Beiträge nach dem "event_date" ordnen .

Ich habe drei Stunden damit verbracht, ähnliche Probleme durchzugehen und zu versuchen, ihren Code ohne Erfolg zu implementieren. Ich habe den Code auf verschiedenen anderen Seiten und Archiven in einfachen Formen ausprobiert und es funktioniert dort auch nicht. Ich habe einen Punkt erreicht, an dem es scheint, dass der benutzerdefinierte Beitragstyp das Problem ist, nicht die Abfrage .

Ich habe das Gefühl, dass ich einen Teil meiner Frage vermisse, weil alle anderen die richtigen Antworten bekommen, aber keiner von ihnen mein Problem löst.

Ich habe einige meiner Referenzen in den Code zum Erstellen der Abfrage aufgenommen.

UPDATE: Ich habe festgestellt, dass der Code tatsächlich funktioniert, wenn ich genau den gleichen Beitragstyp erstelle, ihn aber "event" statt "events" nenne. Gibt es einen Grund, warum dies der Fall sein könnte? Ich habe die Datenbank durchsucht, um festzustellen, ob ich ein Problem feststellen kann und nichts zu verdächtig finde.

Es gibt einen Eintrag in der Regel wp_postmeta - meta_key mit dem Meta_Wert: a:5{s:5:"param";s:9:"post_type";s:8:"operator";s:2:"==";s:5:"value";s:6:"events";s:8:"order_no";i:0;s:8:"group_no";i:0;}

Das könnte ein Problem sein, aber ich habe versucht, diese Zeile zu löschen, und nichts schien sich zu ändern.

Innerhalb von archive-events.php

<?php

        // http://www.advancedcustomfields.com/resources/filter-posts-by-custom-fields/
        // See also: http://www.smashingmagazine.com/2009/06/10/10-useful-wordpress-loop-hacks/
        // See also: http://wordpress.org/support/topic/query_posts-less-than-6-months-old

        // Show posts between now and X months ago.
        // http://thewichitacomputerguy.com/blog/php-date-datecreate-strtotime-options
        // http://codex.wordpress.org/Class_Reference/WP_Meta_Query

        // Clue: We are trying to order posts on a an archive page here.
        // https://wordpress.stackexchange.com/questions/167441/ascending-order-custom-post-type

        /*
            These queries check to see if the event date has come. If the date more than two days ago it moves it into the past events section. This may need to change depening on how long some events go for. This algorithm assumes events only go for a day but it's possible an event could go for a month.
        */

        // Get the date from two days ago.
        $date_1 = date('Ymd', strtotime("2 days ago"));

        $args = array(
            'post_type'         => 'events',
            'posts_per_page'    => -1,
            'meta_key'          => 'event_date',
            'orderby'           => 'meta_value_num',
            'order'             => 'ASC',
            // This line ignores plugin ordering.
            'suppress_filters'  => true,
            'meta_query'        => array(
                array(
                    // Is the event less then two days past?
                    'key'       => 'event_date',
                    'value'     => $date_1,
                    'type'      => 'numeric',
                    'compare'   => '>'
                )
            )
        );

        // query
        $wp_query = new WP_Query( $args );

        if ( $wp_query->have_posts() ) {

            // loop
            while( $wp_query->have_posts() )
            {
              $wp_query->the_post();

              get_template_part( 'content', 'events');

            }
        } else {
            // no posts found
        }

        // Reset query
        wp_reset_postdata();

        ?>

Innerhalb von functions.php

/**
 * Create Custom Post Type "Events".
 */

function lc_events_post_type() {

$labels = array(
    'name'                => _x( 'Events', 'Post Type General Name', 'leederville-connect' ),
    'singular_name'       => _x( 'Event', 'Post Type Singular Name', 'leederville-connect' ),
    'menu_name'           => __( 'Events', 'leederville-connect' ),
    'parent_item_colon'   => __( 'Event:', 'leederville-connect' ),
    'all_items'           => __( 'All Events', 'leederville-connect' ),
    'view_item'           => __( 'View Event', 'leederville-connect' ),
    'add_new_item'        => __( 'Add New Event', 'leederville-connect' ),
    'add_new'             => __( 'Add New Event', 'leederville-connect' ),
    'edit_item'           => __( 'Edit Event', 'leederville-connect' ),
    'update_item'         => __( 'Update Event', 'leederville-connect' ),
    'search_items'        => __( 'Search Events', 'leederville-connect' ),
    'not_found'           => __( 'Event Not found', 'leederville-connect' ),
    'not_found_in_trash'  => __( 'Event Not Found in Trash', 'leederville-connect' ),
);
$args = array(
    'label'               => __( 'events', 'leederville-connect' ),
    'description'         => __( 'The latest events in Leederville.', 'leederville-connect' ),
    'labels'              => $labels,
    'supports'            => array( 'title' ),
    'taxonomies'          => array( 'event_category' ),
    'hierarchical'        => false,
    'public'              => true,
    'show_ui'             => true,
    'show_in_menu'        => true,
    'show_in_nav_menus'   => true,
    'show_in_admin_bar'   => true,
    'menu_position'       => 5,
    'menu_icon'           => 'dashicons-calendar',
    'can_export'          => true,
    'has_archive'         => true,
    'exclude_from_search' => false,
    'publicly_queryable'  => true,
    'capability_type'     => 'post',
);
register_post_type( 'events', $args );

}

// Hook into the 'init' action
add_action( 'init', 'lc_events_post_type', 0 );

Einige verwandte Fragen

5
Jake

Ich habe mein Problem gelöst und es hatte nichts mit der Abfrage, der Datenbank oder dem Beitragstyp zu tun.

Das Problem war, dass ich beim Versuch, die Abfrage zu erstellen, eine pre_get_posts-Funktion in meiner functions.php belassen hatte, die mit meiner Abfrage in Konflikt stand. Die Lektion hier für mich ist, um sicherzustellen, dass ich ALLE Dateien gründlich überprüft habe.

Der Code des störenden Zählers:

// Events Pre Get Posts

function my_pre_get_posts( $query )
{
    // validate
    if( is_admin() )
    {
        return $query;
    }


    if( isset($query->query_vars['post_type']) && $query->query_vars['post_type'] == 'events' )
    {
        $query->set('orderby', 'meta_value_num');
        $query->set('meta_key', 'event_date');
        $query->set('order', 'DESC');
    }

    // always return
    return $query;

}

add_action('pre_get_posts', 'my_pre_get_posts');
5
Jake