Вопрос или проблема
Я настраиваю панель администратора WordPress. У меня есть пользователи с ролями, позволяющими писать только в 3 категории. Я хотел бы разработать 3 кнопки или блока для создания нового поста, но каждый для другой категории. Это в панели управления.
У меня будет отдельная панель управления для пользователей с ролями.
Есть идеи?
Это невозможно, поскольку новый пост не устанавливается в категорию. Вам нужно сначала создать новый пост, присвоив ему выбранную категорию.
Так что просто создайте функцию, которая создаст новый пост по нажатию кнопки.
Проблема в том, что вы найдете много пустых постов, если пользователь будет играть с этой ссылкой.
Чтобы создать виджет панели управления, вы можете ознакомиться с официальной документацией wp_add_dashboard_widget
Если вы используете настраиваемые типы постов, тогда вы можете использовать ссылки такие как:
/wp-admin/post-new.php?post_type=news
/wp-admin/post-new.php?post_type=sport
/wp-admin/post-new.php?post_type=people
в вашей панели управления, чтобы перейти на соответствующую страницу нового поста.
Обновление:
Если вы не можете использовать настраиваемые типы постов и должны использовать категории постов, вы можете попробовать использовать ссылку, подобную этой:
/wp-admin/index.php?mycat=20
добавив следующий код в ваш functions.php
файл (или создайте плагин с этим кодом):
add_action( 'admin_head-index.php', 'my_post_preset_wpse_99518' );
function my_post_preset_wpse_99518() {
global $current_user;
$allowed_cat_ids = array(10,20); //ИЗМЕНИТЕ
if(isset($_GET['mycat'])){
$mycat = (int) $_GET['mycat'];
if(in_array($mycat, $allowed_cat_ids, TRUE)){
$newpost = array(
'post_title' => ' ', // заголовок должен быть непустым
'post_status' => 'draft',
'post_date' => date('Y-m-d H:i:s'),
'post_author' => $current_user->ID,
'post_category' => array($mycat),
);
$newpostobj = get_post(wp_insert_post($newpost));
if($newpostobj)
wp_redirect(admin_url("post.php?action=edit&post={$newpostobj->ID}"));
exit();
}
}
}
где вы редактируете эту строку в соответствии с вашими нуждами:
$allowed_cat_ids = array(10,20); //ИЗМЕНИТЕ
Это вставит новый пост с предустановленной категорией.
Ответ или решение
Для настройки пользовательского интерфейса на панели управления WordPress, с целью создания новых постов для трех различных категорий, мы можем следовать следующей методике с использованием кода, который поможет нашим пользователям с соответствующими ролями быстрее публиковать материалы в нужные категории. Ниже приведен детализированный подход к созданию кнопок.
Шаг 1: Определение целевых категорий
Перед тем как создавать кнопки, необходимо определить идентификаторы категорий, в которые будут размещаться новые посты. Предположим, что у нас есть три категории с идентификаторами 10, 20 и 30.
Шаг 2: Добавление кнопок на панель администратора
Мы будем использовать функцию wp_add_dashboard_widget()
для добавления пользовательского виджета на панель управления. В этом виджете мы разместим три кнопки для создания новых постов. Добавьте следующий код в файл functions.php
вашей темы или в файл плагина:
// Добавление пользовательского виджета на панель управления
add_action('wp_dashboard_setup', 'add_custom_dashboard_widget');
function add_custom_dashboard_widget() {
wp_add_dashboard_widget('custom_post_buttons', 'Создать новый пост', 'custom_post_buttons_display');
}
function custom_post_buttons_display() {
// Кнопки для создания новых постов
echo '<a href="' . admin_url('index.php?mycat=10') . '" class="button button-primary">Создать пост в категории 1</a><br />';
echo '<a href="' . admin_url('index.php?mycat=20') . '" class="button button-secondary">Создать пост в категории 2</a><br />';
echo '<a href="' . admin_url('index.php?mycat=30') . '" class="button button-success">Создать пост в категории 3</a>';
}
Шаг 3: Обработка кнопок для создания постов
Теперь нам нужно обработать нажатия на кнопки, чтобы автоматически создавать черновик поста с заданной категорией. Добавьте следующий код в файл functions.php
:
add_action('admin_head-index.php', 'my_post_preset');
function my_post_preset() {
global $current_user;
$allowed_cat_ids = array(10, 20, 30); // Идентификаторы категорий
if (isset($_GET['mycat'])) {
$mycat = (int)$_GET['mycat'];
if (in_array($mycat, $allowed_cat_ids, true)) {
$newpost = array(
'post_title' => ' ', // Заголовок должен быть непустым
'post_status' => 'draft',
'post_date' => current_time('mysql'),
'post_author' => $current_user->ID,
'post_category' => array($mycat),
);
$newpostobj = get_post(wp_insert_post($newpost));
if ($newpostobj) {
wp_redirect(admin_url("post.php?action=edit&post={$newpostobj->ID}"));
exit();
}
}
}
}
Заключение
Теперь на панели управления WordPress у вас будут три кнопки, каждая из которых соответствует определенной категории. При нажатии на кнопку будет создан новый черновик поста с автоматически установленной категорией. Это не только упростит процесс написания постов для пользователей, но и поможет избежать создания пустых постов, что может произойти, если оставить только ссылки.
Этот подход также позволяет достаточно гибко настраивать категории и другие элементы поста, если это будет необходимо в будущем. Не забудьте протестировать все функции после их добавления, чтобы убедиться, что ваша панель управления работает исправно.