1

I have added 'menu_order' to the available orderby methods by using the Simple Custom Post Order plugin and by following the instructions in this blog post, which provides the following code:

<?php
/**
 * The filter is named rest_{post_type}_collection_params. So you need to hook a new filter for each 
 * of the custom post types you need to sort.
 * @link https://www.timrosswebdevelopment.com/wordpress-rest-api-post-order/
 */

// This enables the orderby=menu_order for Posts
add_filter( 'rest_post_collection_params', 'filter_add_rest_orderby_params', 10, 1 );
// And this for a custom post type called 'portfolio'
add_filter( 'rest_portfolio_collection_params', 'filter_add_rest_orderby_params', 10, 1 );

/**
 * Add menu_order to the list of permitted orderby values
 */
function filter_add_rest_orderby_params( $params ) {
    $params['orderby']['enum'][] = 'menu_order';
    return $params;
}

I have tacked that code onto a locally developed site-specific plugin. This works fine and I can get the posts in the order I want using:

.../wp-json/wp/v2/posts&order=asc&orderby=menu_order

How can I make that the default so that

.../wp-json/wp/v2/posts

returns the posts in the same order as above?

1 Answer 1

1

The following addition the above code changes the default for the 'portfolio' post type.

add_filter( 'rest_portfolio_collection_params','filter_add_rest_orderby_params', 10, 2 );

function filter_add_rest_orderby_params( $params, $post_type  ) {
$params['orderby']['enum'][] = 'menu_order';
if ( $post_type->name === 'portfolio' ) {
    $params['orderby']['default'] = 'menu_order';
    $params['order']['default'] = 'asc';
}
return $params;

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.