J'utilise généralement le plugin intuitif pour les commandes personnalisées de tous les sites WordPress avec lesquels je travaille, afin que les clients puissent commander leurs publications visuellement.
Pour ce projet, j'utilise WordPress en tant que panneau d'administration et je consomme ses données avec un frontal Ember.js.
(en utilisant wp-api V.2) La commande réordonnée n'apparaît pas dans le JSON et je suppose que le plugin enregistre la nouvelle commande dans un fichier PHP intermédiaire.
Outre le fait de modifier manuellement la date de chaque publication, quelles sont les options que je souhaite pour permettre à mon client de réorganiser de manière intuitive les publications de manière persistante?
Supposons qu'il enregistre la commande personnalisée dans la colonne menu_order
de la table wp_posts
.
Si vous entendez le type de poste page
hiérarchique (prend en charge les attributs de page ), vous pouvez alors commander avec les variables de la requête:
/wp-json/wp/v2/pages/?orderby=menu_order&order=asc
Si vous voulez dire le type de poste post
avec:
/wp-json/wp/v2/posts/
il existe un moyen d'utiliser le filtre rest_{post_type}_query
:
/**
* 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 );
Nous pourrions vouloir limiter cela davantage. En parcourant la classe WP_REST_Request
, nous pouvons voir qu'il existe une méthode publique pratique get_param()
que nous pourrions utiliser:
/**
* 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 );
où nous l'activons via un paramètre wpse_custom_order
personnalisé:
/wp-json/wp/v2/posts/?wpse_custom_order=menu_order&order=asc
Il existe également le filtre rest_query_var-orderby
généré dynamiquement.
La commande de posts avec menu_order en tant que paramètre orderby donnera une erreur de paramètre non valide, par exemple.
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)
À l'heure actuelle, aucun filtre ne permet d'ajouter une autre option orderby https://github.com/WP-API/WP-API/blob/2.0-beta13/lib/endpoints/class-wp- rest-posts-controller.php # L1666
vous devriez accrocher à posts_clauses
par exemple
/**
* 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' );