#php #wordpress
#php #wordpress
Вопрос:
Я добавил пользовательский тип пользователя в WordPress, пользовательский тип записи поддерживает авторов (см. Ниже). Пользовательский тип пользователя обладает всеми привилегиями автора, за исключением «публиковать записи», но его нет в списке возможных авторов для назначения публикации.
Что я делаю не так?
Код:
if (!get_role('member')) {
add_role('member', 'SFUK Member', array(
'delete_posts' => true,
'edit_posts' => true,
'read' => true,
'upload_files' => true,
'edit_published_posts' => true,
'delete_published_posts' => true
));
}
и вот пользовательский тип записи :
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'query_var' => true,
'rewrite' => true,
'capability_type' => 'post',
'hierarchical' => true,
'menu_position' => 0,
'supports' => array('title', 'editor', 'thumbnail', 'page-attributes', 'author')
);
if (!post_type_exists('ent')) {
register_post_type('ent', $args);
remove_post_type_support('ent', 'editor');
}
Дайте мне знать, если потребуется дополнительная информация.
Комментарии:
1. Действуют ли права пользователя в wp-admin? как вы ожидаете?… Также вы используете пользовательскую тему / виджет для отображения имени автора при публикации?, оно показывает неправильное значение?, или просто пустое. К сожалению, существует множество способов, которыми это могло быть сделано неправильно = [
2. Также, из каких файлов взяты ваши фрагменты кода = P
Ответ №1:
Раскрывающийся список «авторы» создается следующим вызовом:
wp_dropdown_users( array(
'who' => 'authors',
'name' => 'post_author_override',
'selected' => empty($post->ID) ? $user_ID : $post->post_author,
'include_selected' => true
) );
who
Аргумент означает, что в списке будут указаны только пользователи, по крайней мере, с ролью «автор», а на странице Codex указано, что в настоящее время она либо «авторы», либо пуста (имеется в виду всех пользователей).
Для этой функции есть фильтр, но он принимает HTML в качестве входных данных. Вы могли бы создать новый запрос для пользователей, а затем вывести новый раскрывающийся список HTML. Это первый способ решить вашу проблему.
Однако эта функция, для которой ‘who’ установлено значение ‘authors’, ищет пользователей, чей уровень не равен 0, что довольно странно, поскольку пользовательские уровни давно устарели. Я нашел соответствующий отчет об ошибке в Trac, рекомендующий вам добавить возможность ‘level_1’ в вашу новую роль, чтобы исправить это. Это не самое простое решение, но намного проще, чем создавать фильтр и весь HTML с нуля.
РЕДАКТИРОВАТЬ: Мне только что пришло в голову третье и даже более простое решение: я создавал пользовательские роли с помощью плагинов, но никогда не замечал этой проблемы, потому что я всегда копировал возможности из существующих ролей, а затем изменял их. Таким образом, вы не забудете ни о каких возможностях, а также исправите эту ошибку.
Комментарии:
1. Хорошо, я добавил возможность level_1, но это не помогло. Как я могу скопировать возможности из существующих ролей. Я не могу придумать аккуратный способ сделать это.
2. Убедитесь, что вы удалили ранее созданную пользовательскую роль, потому что add_role ничего не делает, если роль уже существует (таким образом, ваше «если» не требуется). В любом случае, вот как я это сделал: wordpress.org/support/topic /… и другой пример: wordpress.org/support/topic /…
3. Хорошо, теперь разобрано. Еще раз спасибо!