• Hi there!

    Hope you can help me out!
    I found a topic answering part of my question, although (of course πŸ˜€ ) I would like something a bit different (view the code I used below).
    I am trying to sort my posts through regular loop and would like to order/ sort my posts by day, week, month, alltime.

    It really took me forever to find out what the code below should be implemented in functions.php, therefore I urge you to speak loud, clear en slow for me in PHP terms πŸ˜€

    Thank you in advance!

    Kind regards,

    Fluksy

    Code:

    // Added by HC
    add_action( 'pre_get_posts', 'sort_by_filter' );
    
    function mv_main_orderby($orderby) {}
    function tr_main_orderby($orderby) {}
    function sort_by_filter($query) {
            global $wp_query;
            // IF conditions modified by HC
            if ( !is_admin() && $query->is_main_query() && isset($wp_query->query['orderby']) && $wp_query->query['orderby'] != "rand" ) {
                    switch ($wp_query->query['orderby']) {
                            case "popular":
                                    add_filter('posts_join', 'wpp_query_join' );
                                    add_filter('posts_orderby', 'wpp_query_order_by');
                            break;
                            case "views":
                                    add_filter('posts_orderby', 'mv_main_orderby');
                            break;
                            case "rating":
                                    add_filter('posts_orderby', 'tr_main_orderby');
                            break;
                    }
            }
    }
    
    // Added by HC. Did you forget this function? :P
    function wpp_query_order_by( $orderby ){
    	global $wp_query, $wpdb;
    	$valid_order = array('asc', 'desc');
    
    	// Sorting by 'popular', order by pageviews
    	if ( isset($wp_query->query['orderby']) && 'popular' == $wp_query->query['orderby'] ) {
    		return "{$wpdb->prefix}popularpostsdata.pageviews " . ( ( isset($wp_query->query['order']) && in_array($wp_query->query['order'], $valid_order) ) ? strtoupper($wp_query->query['order']) : "DESC" );
    	}
    
    	return $orderby;
    }
    
    function wpp_query_join( $join ) {
            global $wp_query, $wpdb;
            // Sorting by 'popular', join the popularpostsdata table into the query
            if ( isset($wp_query->query['orderby']) && 'popular' == $wp_query->query['orderby'] ) {
                    $join .= " LEFT JOIN {$wpdb->prefix}popularpostsdata ON " . $wpdb->posts . ".ID = {$wpdb->prefix}popularpostsdata.postid ";
            }
            return $join;
    }

    https://wordpress.org/plugins/wordpress-popular-posts/

Viewing 1 replies (of 1 total)
Viewing 1 replies (of 1 total)

The topic ‘Sort posts by day, week, month, alltime’ is closed to new replies.