Im Allgemeinen verwende ich das intuitive Plugin für die benutzerdefinierte Post-Bestellung für alle WordPress-Sites, mit denen ich arbeite, damit Kunden ihre Posts visuell bestellen können.
Für dieses Projekt verwende ich WordPress als Admin-Panel und verwende seine Daten mit einem Ember.js-Frontend.
(mit wp-api V.2) Die neu geordnete Reihenfolge wird im JSON nicht angezeigt, und ich vermute, das Plugin speichert die neue Reihenfolge in einem dazwischenliegenden PHP-Teil.
Mit welchen Optionen kann mein Kunde nicht nur das Datum der einzelnen Posts manuell ändern, sondern auch die Posts auf intuitive Weise neu anordnen, sodass sie weiterhin angezeigt werden?
Angenommen, die benutzerdefinierte Bestellung wird in der Spalte menu_order
in der Tabelle wp_posts
gespeichert.
Wenn Sie den hierarchischen Typ page
post meinen (unterstützt Seitenattribute ), dann können Sie mit den Abfragevariablen bestellen:
/wp-json/wp/v2/pages/?orderby=menu_order&order=asc
Wenn du die post
bezeichnest, schreibe mit:
/wp-json/wp/v2/posts/
es gibt eine Möglichkeit, den rest_{post_type}_query
-Filter zu verwenden:
/**
* Set orderby to 'menu_order' for the 'post' post type
*/
add_filter( "rest_post_query", function( $args, $request )
{
$args['orderby'] = 'menu_order';
return $args;
}, 10, 2 );
Wir möchten dies möglicherweise weiter einschränken. Beim Durchblättern der Klasse WP_REST_Request
sehen wir, dass es eine praktische öffentliche Methode get_param()
gibt, die wir verwenden können:
/**
* Support for 'wpse_custom_order=menu_order' for the 'post' post type
*/
add_filter( "rest_post_query", function( $args, $request )
{
if( 'menu_order' === $request->get_param( 'wpse_custom_order' ) )
$args['orderby'] = 'menu_order';
return $args;
}, 10, 2 );
wo wir es durch einen benutzerdefinierten wpse_custom_order
Parameter aktivieren:
/wp-json/wp/v2/posts/?wpse_custom_order=menu_order&order=asc
Es gibt auch den dynamisch generierten rest_query_var-orderby
Filter.
Wenn Sie Beiträge mit menu_order als orderby-Parameter bestellen, wird ein ungültiger Parameterfehler ausgegeben, z.
http://example.com/wp-json/wp/v2/posts?orderby=menu_order&order=asc
Invalid parameter(s): orderby (orderby is not one of date, id, include, title, slug)
Derzeit gibt es keinen Filter zum Hinzufügen einer weiteren orderby-Option rest-posts-controller.php # L1666
sie sollten sich zum Beispiel an posts_clauses
einhängen
/**
* Class Custom_Rest
* @author
*/
class Custom_Rest
{
/**
* init
* Add Rest Hooks
*
* @return void
* @author
*/
public static function init()
{
add_filter( 'posts_clauses' , 'Custom_Rest::orderby' );
}
/**
* orderby
* Order posts by menu_order
*
* @return void
* @author
*/
public static function orderby($v) {
if ( $GLOBALS['wp']->query_vars['rest_route'] == '/wp/v2/posts' ) {
// old value is "wp_posts.post_date DESC"
$v['orderby'] = str_replace('post_date', 'menu_order', $v['orderby']);
return $v;
}
}
}
add_action( 'rest_api_init', 'Custom_Rest::init' );