Как запросить сообщение пользовательской ролью?

Я хочу запросить сообщения их ролью автора. И сделайте что-то с сообщением на основе роли.

Я знаю, что мы можем получить сообщение get_posts или WP_query, проблема нет никакого аргумента для сортировки сообщения на основе роли автора. Или, мы также можем объединить get_users и get_posts вместе, как это

$users = get_users(array(role => 'author'));
foreach($users as $user){
//here we can use get_posts to query the posts by the $user->ID   
} .....

это слишком неуклюже к выполнению этого. Я хочу знать если там какой-либо другой способ запросить сообщения на основе роли, SQL-запрос, возможно?

6
21.06.2012, 18:57
3 ответа

Я действительно не бездельничал с пользовательскими запросами сообщения прежде, но вот моя попытка в решении:

function get_posts_by_author_role($role) {
    global $wpdb;
    return $wpdb->get_results( "SELECT p.* FROM {$wpdb->posts} p, {$wpdb->usermeta} u"
                                ." WHERE    p.post_type     = 'post'"
                                ." AND      p.post_status   = 'publish'"
                                ." AND      u.user_id       = p.`post_author`"
                                ." AND      u.meta_key      = 'wp_capabilities'"
                                ." AND      u.meta_value    LIKE '%\"{$role}\"%'" );
}

Эта функция возвратит сообщения, только если их автору указали роль. Это протестировано и работающий над моей локальной установкой 3,4, но сообщено мне, если у Вас есть какие-либо проблемы с ним.

Я надеюсь, что это помогает.

Использование в качестве примера:

$posts = get_posts_by_author_role('author');
foreach($posts as $post) echo $post->post_title, '<br />';
-2
19.02.2020, 22:05

попробуйте это

создайте функцию для изменения запроса где пункт:

function authors_where_filter( $where ) {
        global $wpdb;
        $ids = get_users(array('role' => 'author' ,'fields' => 'ID'));
        $where .= " AND post_author IN ($ids)";
        return $where;
}

и затем перед запросами, просто сцепляют его исключая:

add_filter('posts_where','authors_where_filter');
$all_posts = new WP_Query(array('posts_per_page' => -1 .....
remove_filter('posts_where');

и необходимо получить все сообщения пользователей автора в едином запросе, (хорошо два на самом деле один для получения пользователей и другого должен получить сообщения),

10
19.02.2020, 22:05

Можно использовать Roles, и Capabilitied проверяют развертывающуюся функцию:

current_user_can( $capability );

Например:

if(current_user_can('read') && !current_user_can('edit_posts')){
//code for subscribers...
}
else if(current_user_can('edit_posts') && !current_user_can('edit_pages')){
//code for authors...
}
else if(current_user_can('edit_pages') && !current_user_can('delete_themes')){
//code for editors....
}
else {
//code for admins...
}

У Вас будет еще одна проверка, если Вы будете использовать многоузловой для супер администраторов.

Обратите внимание, что необходимо использовать две проверки, потому что без другой проверки, некоторый пользователь получил бы несколько запросов.

-3
19.02.2020, 22:05
  • 1
    проблемой является функция, сделан работать в позади, не зависеть зарегистрированному пользователю тока. И я предпочитаю использовать имя роли для осуществления проверки, потому что у меня есть несколько пользовательская пользовательская роль который созданный ролевым плагином управления. –  dev-jim 21.06.2012, 19:24
  • 2
    Возможно, можно использовать эту функцию затем, это возвратит пользовательскую роль строки и затем проверит его с функцией if get_current_user_role () {глобальный $wp_roles; $current_user = wp_get_current_user (); $roles = $current_user-> роли; $role = array_shift ($roles); возвратить isset ($wp_roles-> role_names [$role])? translate_user_role ($wp_roles-> role_names [$role]): ложь;} –  OriginalEXE 21.06.2012, 19:28
  • 3
    это только решает часть моего вопроса, следующая вещь, должен запросить сообщения ролью. Ваши коды будут неуклюжи, как я сделал. Который не является тем, что я хотел. –  dev-jim 21.06.2012, 20:27

Теги

Похожие вопросы