comment puis-je filtrer par rôles dans wordpress admin
im déjà ajouter un filtre par rôles déroulant
en utilisant ce code http://Pastebin.com/Zbv3UhVH
mais je suis bloqué sur pre_get_posts
function add_role_filter_to_posts_query( $query ) {
global $post_type, $pagenow;
if ($pagenow == 'edit.php' && $post_type == 'post') {
if ( isset( $_GET['user_role'] ) ) {
$role = $_GET['user_role'] ); // return string 'contributor_facebook'
// TO DO
}
}
}
add_action( 'pre_get_posts', 'add_role_filter_to_posts_query' );
ce que je dois faire, le filtrer ..
merci
Je ferais 2 requêtes. Cela ressemblerait à quelque chose comme ça:
function add_role_filter_to_posts_administration(){
//execute only on the 'post' content type
global $post_type;
if($post_type == 'post'){
$user_role = '';
// Get all user roles
$user_roles = array();
foreach ( get_editable_roles() as $key => $values ) :
$user_roles[ $key ] = $values['name'];
endforeach;
// Set a selected user role
if ( ! empty( $_GET['user_role'] ) ) {
$user_role = sanitize_text_field( $_GET['user_role'] );
}
?><select name='user_role'>
<option value=''><?php _e( 'All Roles', 'papasemarone' ); ?></option><?php
foreach ( $user_roles as $key => $value ) :
?><option <?php selected( $user_role, $key ); ?> value='<?php echo $key; ?>'><?php echo $value; ?></option><?php
endforeach;
?></select><?php
}
}
add_action('restrict_manage_posts','add_role_filter_to_posts_administration');
function add_role_filter_to_posts_query( $query ) {
/**
* No use on front
* pre get posts runs everywhere
* even if you test $pagenow after, bail as soon as possible
*/
if ( ! is_admin() ) {
return;
}
global $pagenow;
/**
* use $query parameter instead of global $post_type
*/
if ( 'edit.php' === $pagenow && 'post' === $query->query['post_type'] ) {
if ( isset( $_GET['user_role'] ) ) {
$role = $_GET['user_role']; // return string 'contributor_facebook'
$users = new WP_User_Query( array( 'role' => $role ) );
$results = $users->get_results();
$user_ids = array();
foreach( $results as $result ) {
$user_ids[] = (int) $result->ID;
}
/**
* I use PHP_INT_MAX here cause 0 would not work
* this means "user that does not exist"
* this trick will make WP_Query return 0 posts
*/
$user_ids = ! empty( $user_ids ) ? $user_ids : PHP_INT_MAX;
$query->set( 'author__in', $user_ids );
}
}
}
add_action( 'pre_get_posts', 'add_role_filter_to_posts_query' );
Vous devez créer une requête utilisateur pour obtenir tous les utilisateurs ayant un rôle spécifique, puis interroger les publications avec le paramètre "author".