Рубрика (таксономия) по умолчанию для записи, если элемент не установлен
Добрый день подскажите пожалуйста как реализовать автоматическое присвоение кастомного терма, созданного для произвольной таксономии для произвольного типа записи?
Т.е. у стандартной категории можно выбрать основную рубрику! А как сделать так что бы у пользовательской таксономии можно было сделать так же!
Кастомная таксономия и кастомный тип поста у меня уже есть. А вот автоматом присваивать им терм пока не получается. Мне нужен механизм тот же что и в стандартный постах, когда им присваивается категория uncategorized по умолчанию.
В общем, нужна основная рубрика для пользовательской таксономии...
Спасибо.
Можно при сохранении записи проверять присвоен ли термин, если нет то присвоить.
Для этого используем хук save_post, функцию wp_set_object_terms() и функцию has_term():
Добавлять этот хук нужно в файл темы functions.php или в файл плагина или как-либо еще.
Другой способ При регистрации таксономии:
С версии ВП 5,5 при регистрации таксономии появился новый параметр default_term в котором можно указать дефолтную рубрику для создаваемой таксономии.
Другой способ через опции WP:
Способ установить дефолтный элемент таксономии, который Невозможно будет удалить через админ-панель.
В функции wp_insert_post() есть такая строка:
Это значит, что если у вас, например есть таксономия "genre", вам нужно создать опцию
default_term_genre
со значением ID этого элемента таксономии. Такой элемент будет защищен от удаления через админ-панель.Весь код, который создает опцию и хук для добавления записи в таксу, если для нее не указана ни одна такса:
Огромное спасибо за Ваш ответ!
Правда так как мне было нужно он в чистом виде корректно не отрабатывал. А именно функция get_id_of_first_term возвращала пустое значение и соответственно предполагаемый дефолтный терм не присваивался (это в условиях отсутствия постов кастомного типа и одного созданного мной в отдельной функции терма, который предполагалось использовать в качестве дефолтного ).
Зато после первого присвоения предполагаемого дефолтного терма посту кастомного типа в ручном режиме - создавался новый терм с номером id, следующим по счету, после созданного мною в отдельной функции, а название и слаг для нового терма брались из моего существущего терма (предполагаемого дефолтного). И всем следующим создающимся постам присваивался по умолчанию этот новый терм. Плюс к этому на экране создания первого поста кастомного типа (т.е. еще нет присвоения терма к посту) выводилось предупреждающее сообщение след. текстовки: Notice: Trying to get property of non-object in ....(адрес в моему файлу на ПК и номер вот этой строки $term_id = $fterm->term_id.
В связи с этим пришлось немного изменить код и вот что в итоге работает отлично(может кому-то пригодится такая вариация на тему):
Добрый вечер! Сейчас возникла необходимость создавать дефолтный терм именно по id. Т.к. Вы и предлагали. Но когда я указываю значение для переменной $def_term='standart', функция отрабатывает, а если пишу $def_term=5 - не работает. Дефолтный терм не создается и соответственно не присваивается. Подскажите пожалуйста как это исправить? Спасибо!
Создавать термин по ID, это как?
Можно задавать по id или создавать указывая название. Как бы то ни было, ищите ответ в описании wp_set_object_terms()
так как в четвертой строке Вашего кода. Вы ведь там пишите значение id для дефолтного терма.
Спасибо за ссылку. Но я ее уже изучала. Поскольку в вордпресе новичок, то ответа не нашла.
Тут в $def_term = 5; значит что у вас уже существует термин с ID 5
А в $def_term = get_id_of_first_term( $tax ); термин получается автоматически: термин с наименьшим ID, обычно это первый созданный термин.
Спасибо Вам за Ваше участие. Все понятно.
Пожалуйста помогите еще в одной проблеме. Мне нужно чтобы этот дефолтный терм, который был присвоен всем постам, нельзя было удалить. Как рубрику uncategoriezed в постах. Я вот такой код использую, но он не рабочий. Не могу понять, что делаю не так(пробовала еще и другие хуки из функции wp_delete_term):
return 0;
просто ничего не делает, вам нужно оборвать скрипт:Вот еще ссылки по теме нашел: http://wordpress.stackexchange.com/questions/70758/multisite-protect-categories-from-deletion (англ)
И вот еще, как указать элемент таксономии по умолчанию, который нельзя удалить (тоже англ): http://wordpress.stackexchange.com/questions/158784/creating-a-non-removable-taxonomy-term