Вопрос или проблема
Я не могу заставить это работать. У меня есть страница, где пользователи могут отправлять свои сообщения. Там я хочу показать все категории и позволить им выбрать категорию для назначения сообщения через выпадающее меню. Я не смог этого сделать, так как я новичок в PHP, поэтому решил идти шаг за шагом и сначала начать с добавления пустого поля ввода, куда пользователи могут просто ввести случайный текст, который станет категорией этого сообщения.
Для этого я сделал следующее:
if(isset($_POST['entry']) AND !$_POST['entry'] == ""):
$my_post = array();
$my_post['post_title'] = $_POST['title'];
$my_post['post_content'] = $_POST['entry'];
$my_post['post_status'] = 'publish';
$cat_name = sanitize_text_field($_POST['newcat']);
$my_post ['cat_name'] = $cat_name;
$my_post['post_author'] = get_current_user_id();;
// добавляем пост в базу данных
$id = wp_insert_post( $my_post );
endif;
Как вы можете видеть, я пытаюсь добавить категорию, связывая ее с $my_post и полем ввода “newcat”.
И форма:
<form action="" method="post" role="form">
<label for="newcat">Название категории</label>
<input type="text" name="newcat" value="" />
</form>
Название поста и содержимое работают (удалены из кода выше), но категория совсем не работает.
Кто-нибудь может помочь мне и объяснить, что я делаю неправильно?
Пожалуйста, попробуйте использовать эту функцию
https://codex.wordpress.org/Function_Reference/wp_dropdown_categories
wp_dropdown_categories() – отображает HTML-выпадающий список категорий
<form id="category-select" class="category-select" action="<?php echo esc_url( home_url( "https://wordpress.stackexchange.com/" ) ); ?>" method="get">
<?php wp_dropdown_categories(); ?>
<input type="submit" name="submit" value="view" />
</form>
Ответ или решение
Ваша задача заключается в добавлении категории к посту через PHP. Для этого, после анализа предоставленного кода и описания задачи, можно выделить несколько ключевых нюансов, которые требуют вашего внимания:
-
Понимание процесса установки категории: В WordPress категории нельзя установить напрямую в массиве
$my_post
, потому как поля массиваwp_insert_post
не предназначены для этого. Вместо этого нужно воспользоваться функциейwp_set_post_categories
после того, как пост успешно добавлен в базу данных. -
Использование текстового поля для ввода имени категории: У вас предусмотрено текстовое поле
newcat
, с помощью которого пользователь может ввести имя категории. Однако, чтобы избежать проблем, связанных с некорректными данными, лучше предварительно проверить, существует ли уже такая категория, и, если нет, создать её. -
Подход к реализации:
- В первую очередь, убедитесь, что вы получили и обработали ввод с помощью текстового поля
newcat
. - После добавления поста, определите ID новой или существующей категории.
- Используйте ID категории для установки её вашему посту.
- В первую очередь, убедитесь, что вы получили и обработали ввод с помощью текстового поля
Ниже представлен пример исправленного кода, который учитывает вышеописанные моменты:
if (isset($_POST['entry']) && $_POST['entry'] !== "") {
$my_post = array(
'post_title' => sanitize_text_field($_POST['title']),
'post_content' => sanitize_textarea_field($_POST['entry']),
'post_status' => 'publish',
'post_author' => get_current_user_id(),
);
// Вставляем пост в базу данных и получаем его ID
$post_id = wp_insert_post($my_post);
if ($post_id) {
// Проверяем, существует ли категория
$category_name = sanitize_text_field($_POST['newcat']);
$category_id = term_exists($category_name, 'category');
if ($category_id === 0 || $category_id === null) {
// Создаём новую категорию, если она не существует
$category_id = wp_create_category($category_name);
}
// Назначаем категорию посту
wp_set_post_categories($post_id, array($category_id));
}
}
<form action="" method="post" role="form">
<label for="newcat">Имя категории</label>
<input type="text" name="newcat" value="" />
<input type="text" name="title" value="" placeholder="Название поста" />
<textarea name="entry" placeholder="Содержимое поста"></textarea>
<input type="submit" value="Опубликовать" />
</form>
SEO Оптимизация
- Убедитесь, что структура URL-адресов в настройках WordPress оптимальна для SEO (например, использование "натуральных" URL вместо стандартных идентификаторов).
- Пользуйтесь тегами и категориями не только для упрощения навигации, но и для улучшения индексации вашего контента в поисковых системах.
- Регулярно проверяйте, актуальны ли ваши плагины и темы, чтобы поддерживать их функциональность и безопасность на максимальном уровне.
Заключение
Процесс добавления категории к посту требует немалого внимания к деталям, особенно при взаимодействии с базой данных WordPress. С учетом вышеизложенной информации, убедитесь, что вашу логику кода можно легко масштабировать и модифицировать, чтобы лучше соответствовать будущим требованиям вашего проекта.