Er is een plugin nodig –> https://wordpress.org/plugins/simple-custom-post-order/

in functions.php

function so14306_pre_get_posts($query)
{
    if (is_admin()) :
        return;
    endif;

    if ($query->is_main_query()) :
        if (is_post_type_archive('music')) : // selecteer goede custom post type
            $query->set('orderby', 'style'); // selecteer goede custom taxonomy slug 

        endif;
    endif;
}

add_action('pre_get_posts', 'so14306_pre_get_posts');
then we call the post_clauses filter:

function so14306_posts_clauses($clauses, $wp_query)
{
    global $wpdb;

    if (isset($wp_query->query_vars['orderby']) && $wp_query->query_vars['orderby'] === 'style') { // selecteer goede custom taxonomy slug 
        $orderby = $wp_query->query_vars['orderby'];
        $clauses['join'] .= <<<SQL
LEFT OUTER JOIN {$wpdb->term_relationships} ON {$wpdb->posts}.ID={$wpdb->term_relationships}.object_id
LEFT OUTER JOIN {$wpdb->term_taxonomy} USING (term_taxonomy_id)
LEFT OUTER JOIN {$wpdb->terms} USING (term_id)
SQL;
        $clauses['where'] .= " AND (taxonomy = '{$orderby}' OR taxonomy IS NULL)";
        $clauses['groupby'] = "object_id";
        $clauses['orderby'] = "GROUP_CONCAT({$wpdb->terms}.term_order ORDER BY {$wpdb->terms}.term_order ASC) ASC";
        $clauses['orderby'] .= ", {$wpdb->posts}.post_name ASC"; // zet hier de goede terug methode op. Voor datum --> post_date DESC
    }

    return $clauses;
}

add_filter('posts_clauses', 'so14306_posts_clauses', 10, 2);
Geef een reactie 0