web-dev-qa-db-fra.com

Comment réorganiser rapidement les publications du panneau d'administration qui persisteront pour wp-api

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?

1
sheriffderek

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.

2
birgire

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' );
0
Ahed Eid