Как добавить категорию к посту через PHP?

Вопрос или проблема

Я не могу заставить это работать. У меня есть страница, где пользователи могут отправлять свои сообщения. Там я хочу показать все категории и позволить им выбрать категорию для назначения сообщения через выпадающее меню. Я не смог этого сделать, так как я новичок в 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. Для этого, после анализа предоставленного кода и описания задачи, можно выделить несколько ключевых нюансов, которые требуют вашего внимания:

  1. Понимание процесса установки категории: В WordPress категории нельзя установить напрямую в массиве $my_post, потому как поля массива wp_insert_post не предназначены для этого. Вместо этого нужно воспользоваться функцией wp_set_post_categories после того, как пост успешно добавлен в базу данных.

  2. Использование текстового поля для ввода имени категории: У вас предусмотрено текстовое поле newcat, с помощью которого пользователь может ввести имя категории. Однако, чтобы избежать проблем, связанных с некорректными данными, лучше предварительно проверить, существует ли уже такая категория, и, если нет, создать её.

  3. Подход к реализации:

    • В первую очередь, убедитесь, что вы получили и обработали ввод с помощью текстового поля 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. С учетом вышеизложенной информации, убедитесь, что вашу логику кода можно легко масштабировать и модифицировать, чтобы лучше соответствовать будущим требованиям вашего проекта.

Оцените материал
Добавить комментарий

Капча загружается...