#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);
}