Как добавить категорию к сообщению в Wordpress через код PHP? - PullRequest
1 голос
/ 03 мая 2019

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

                        // add post to database
                        $id = wp_insert_post( $my_post );
                        endif;

Итак, как вы можете видеть, я пытаюсь добавить категорию, связав ее с $ my_post и полем ввода "newcat".

И форма:

<form action="" method="post" role="form">

<label for="newcat">Category Name</label>
<input type="text" name="newcat" value="" />

</form>

Заголовок и содержание сообщения работают (удалили его из кода выше), но категория не работает вообще.

Может ли кто-нибудь мне помочь и объяснить, что я делаю неправильно и как я могу это решить?

Редактировать Это также не работает:

  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;

$category_id = get_cat_ID( $_POST['newcat'] );

if ( ! $category_id ) {
    if ( ! is_admin() ) {
        die();
    }
$args = array(
    'description' => "Category description",
    'parent' => 0);
    $category_id = wp_insert_term( $_POST['newcat'], "category", $args );
}

$my_post['post_author'] = get_current_user_id();

$my_post['tax_input'] = array('category' => $category_id);


wp_insert_post($my_post);

Здесь пост даже не добавляется в Wordpress, если эта конкретная категория не существует! Нет ошибок вообще, но нет и сообщения ...

1 Ответ

0 голосов
/ 03 мая 2019

Пожалуйста, рассмотрите возможность использования параметра tax_input для добавления категории.

Кроме того, вы можете создать категорию, если ее нет, но будьте осторожны с ограничением разрешений.

Пожалуйста, не разрешайте всем пользователям создавать категории.Проверьте, является ли администратор, например.

$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;

$category_id = get_cat_ID( $_POST['newcat'] );

if ( ! $category_id ) {
    if ( ! is_admin() ) {
        die();
    }

    $args        = [ 'description' => "Category description", 'parent' => 0 ];
    $category_id = wp_insert_term( $_POST['newcat'], "category", $args );
}

$my_post['post_author'] = get_current_user_id();

$my_post['tax_input'] = [ 'category' => $category_id ];

wp_insert_post( $my_post );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...