Como reordenar rapidamente postagens no painel de administração que persistirão para o wp-api

Em geral, uso o plug-in intuitivo Custom Post Order para todos os sites do WordPress com os quais trabalhei para que os clientes possam solicitar suas postagens visualmente.

Para este projeto, estou usando o WordPress como um painel de administração e consumindo seus dados com um front-end do Ember.js.

(usando wp-api V.2) A ordem re-ordenada não mostra no JSON e acho que o plugin armazena a nova ordem em uma peça intermediária do PHP.

Além de alterar manualmente a data de cada publicação, quais são minhas opções para permitir que meu cliente seja uma maneira intuitiva de reordenar posts de uma maneira que persista?

Solutions Collecting From Web of "Como reordenar rapidamente postagens no painel de administração que persistirão para o wp-api"

Vamos supor que armazena a ordem personalizada na coluna menu_order na tabela wp_posts .

Se você quer dizer o tipo de publicação de page hierárquica (suporta os atributos de página ), então pode-se encomendar com as variables ​​de consulta:

 /wp-json/wp/v2/pages/?orderby=menu_order&order=asc 

Se você quer dizer o tipo de postagem com:

 /wp-json/wp/v2/posts/ 

há uma maneira de usar o rest_{post_type}_query filter:

 /** * 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 ); 

Podemos querer restringir isso ainda mais. Percorrendo a class WP_REST_Request , podemos ver que existe um método público acessível get_param() que podemos usar:

 /** * 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 ); 

onde o ativamos através de um parâmetro wpse_custom_order personalizado:

 /wp-json/wp/v2/posts/?wpse_custom_order=menu_order&order=asc 

Há também o filtro rest_query_var-orderby gerado dinamicamente.

O pedido de mensagens com menu_order como parâmetro orderby dará erro de parâmetro inválido, por exemplo,

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)

Neste momento, não há filtro para adicionar outra opção orderby https://github.com/WP-API/WP-API/blob/2.0-beta13/lib/endpoints/class-wp-rest-posts-controller.php#L1666

você deve se conectar em posts_clauses por exemplo

 /** * 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' );