WordPress – menu_order-Sortierung bei nicht hierarchischen Inhaltstypen

archive 1850170 1920
Bildquelle: Pixabay, Pexels

Weist man einem Custom Post Type page-attributes zu, kann die Menüreihenfolge in den entsprechenden Feldern editiert, und im Custom Query auch danach sortiert werden.

add_post_type_support( 'my_custom_type', 'page-attributes' )
$args = array( 
    'post_type' => 'my_custom_type',
    'orderby' => 'menu_order',
    'order' => 'ASC', 
);

Wird allerdings nicht auch hierarchical => true festgelegt, greift die Sortierung im Dashboard nicht. Mit dieser Funktion wird die Reihenfolge der menu_order entsprechend angezeigt.

function set_custom_post_types_admin_order($wp_query) {
    if ( is_admin() ) {
        $post_type = $wp_query->query['post_type'];
        if ( $post_type == 'my_custom_posttype') {
            $wp_query->set('orderby', 'menu_order');
            $wp_query->set('order', 'ASC');
        }
    }
}
add_filter( 'pre_get_posts', 'set_custom_post_types_admin_order' );

Um das Sortierkriterium auch auf die Links zum jeweils nächsten und vorherigen Beitrag zu übernehmen, sind nachfolgende Filter anzuwenden:

function pppf_pw_previous_post_where() {
 global $post, $wpdb;
 return $wpdb->prepare( "WHERE p.menu_order < %s AND p.post_type = %s AND p.post_status = 'publish'", $post->menu_order, $post->post_type);
}
function pppf_pw_next_post_where() {
 global $post, $wpdb;
 return $wpdb->prepare( "WHERE p.menu_order > %s AND p.post_type = %s AND p.post_status = 'publish'", $post->menu_order, $post->post_type);
}
function pppf_pw_previous_post_sort() {
 return 'ORDER BY p.menu_order desc LIMIT 1';
}
function pppf_pw_next_post_sort() {
 return 'ORDER BY p.menu_order asc LIMIT 1';
}

function pppf_pw_pagination_menu_order() {
    if ( get_post_type() == 'my_custom_posttype' {
        add_filter( 'get_previous_post_where', 'pppf_pw_previous_post_where' );
        add_filter( 'get_next_post_where', 'pppf_pw_next_post_where');
        add_filter( 'get_previous_post_sort', 'pppf_pw_previous_post_sort' );
        add_filter( 'get_next_post_sort', 'pppf_pw_next_post_sort'); 
    }
}
add_action( 'pre_get_posts', 'pppf_pw_pagination_menu_order' );

Bitte Kommentarfunktion nicht für Supportanfragen nutzen. Dem kann hier nicht entsprochen werden. Die Angabe einer E-Mail-Adresse und eines Namens ist nicht erforderlich. Einen (Spitz)-Namen zu nennen wäre aber doch nett.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Hinweis: Sowohl angegebener Name als auch E-Mail-Adresse (beides ist optional, dafür werden alle Kommentare vor Veröffentlichung geprüft) werden dauerhaft gespeichert. Du kannst jeder Zeit die Löschung Deiner Daten oder / und Kommentare einfordern, direkt über dieses Formular (wird nicht veröffentlicht, und im Anschluss gelöscht), und ich werde das umgehend erledigen. – Mit hinterlassenen Kommentaren hinterlegte IP-Adressen werden nach zwei Monaten automatisch gelöscht

publicly queryable