• Resolved Scott DeLuzio

    (@scottdeluzio)


    I have a custom post type that I want to be able to sort by a custom field in a plugin, rather than the theme’s functions.php file.

    Here is my function:

    //Sort CPT By Custom Field
    function sort_archive_loop($query) {
        if (!is_admin() && $query->is_post_type_archive('my-cpt') && $query->is_main_query()) {
        $query->set('meta_key', 'custom-field');
    	$query->set('order', 'ASC');
        $query->set('orderby', 'meta_value');
        }
    }
    add_action('pre_get_posts', 'sort_archive_loop');

    When I put this function in functions.php, it works as expected by sorting the custom post type (my-cpt) archive page by the custom field (custom-field) in ascending order. When I take it out of functions.php and put it in a plugin, it doesn’t change the sort order at all.

    Does the function have to be different because it is being called from a plugin? I haven’t found any documentation on this saying it was different, but maybe I missed something.

    The plugin is activated.

    I’m trying to use the plugin approach over the theme’s functions.php approach as I am building this for someone who may eventually take over the site on their own. I don’t want them to lose the sorted custom post type if they were to change the site theme somewhere down the line.

Viewing 1 replies (of 1 total)
  • Thread Starter Scott DeLuzio

    (@scottdeluzio)

    This works in the plugin:

    //Sort CPT By Custom Field
    function sort_archive_loop($query) {
        if (is_post_type_archive('my-cpt')) {
        $query->set('meta_key', 'custom-field');
    	$query->set('order', 'ASC');
        $query->set('orderby', 'meta_value');
        }
    }
    add_action('pre_get_posts', 'sort_archive_loop');

Viewing 1 replies (of 1 total)
  • The topic ‘Sort Custom Post Type Archive with Plugin’ is closed to new replies.