WordPress wp_insert_post создает новый термин таксономии при создании нового пользовательского сообщения

#php #wordpress

#php #wordpress

Вопрос:

В моем WordPress версии 5.5.1 я использую общедоступную интерфейсную форму для создания пользовательского типа сообщения. Я сохраняю данные формы как пользовательское сообщение с приведенным ниже кодом:

 function save_function() {
   // MESSAGE FIELDS
    $public_post = array(
        'post_title' => filter_input(INPUT_POST, 'title'),
        'post_author' => 1,
        'post_type' => 'message',
        'post_status' => 'pending',
        'tax_input' => array(
            'my_custom_taxonomy' => array(filter_input(INPUT_POST, 'subject')) // subject is a HTML select which captures option value contains term_id which is generated using get_terms.
        )
    );

    wp_insert_post($public_post);
}
  

Вместо 'tax_input' того, чтобы пометить это сообщение существующим термином custom_taxonomy, создается дублирующий термин с term_id именем термина as.

Комментарии:

1. Проверьте, существует ли термин tax уже, и если это не так, то создайте его перед вставкой — тогда вы можете получить свой вновь созданный term_taxonomy_id и использовать его при вставке. — если он уже существует, затем получите его term_taxonomy_id и используйте его для вставки.

2. вот так: refactored.co/blog/how-to-use-wp_insert_post-tax_input

3. Перед публикацией здесь, в SE, я попробовал это, проблема, с которой я столкнулся с этим кодом, заключается в том, что он не создает повторяющийся термин и не присваивает ему значение custom_post. Я тестировал, используя оба term_id и term_taxonomy_id .

Ответ №1:

Здравствуйте, пожалуйста, попробуйте эту функцию

    function save_function()
{

    $subject_term = 'subject';
    $my_subject_term = term_exists($subject_term, 'my_custom_taxonomy');   // check if term in website or no
    // Create Term if it doesn't exist
    if (!$my_subject_term) {
        $my_subject_term = wp_insert_term($subject_term, 'my_custom_taxonomy');
    }
    $custom_tax = array(
        'my_custom_taxonomy' => array(
            $my_subject_term['term_taxonomy_id'],
        )
    );

    // MESSAGE FIELDS
    $public_post = array(
        'post_title' => filter_input(INPUT_POST, 'title'),
        'post_author' => 1,
        'post_type' => 'message',
        'post_status' => 'pending',
        'tax_input' => $custom_tax
    );

    $post_id = wp_insert_post($public_post);

    
}