У меня несколько пользовательских типов записей, и я хотел бы установить категорию по умолчанию, которая может быть установлена из одной функции через параметры. Первоначально я делал это для одного пользовательского типа записи и был жестко закодирован, но я решил сделать это, поэтому нам нужно выводить функцию только с параметрами на тот случай, если мы когда-нибудь решим добавить больше пользовательских типов записей.
Проблема в том, что внутри функции WordPress, похоже, не связывает свои собственные ловушки и функции и возвращает недопустимые ошибки таксономии при попытке установить ее через функцию wp_set_object_terms (). Когда я сделал это способом WordPress, который заставил бы вас создать отдельную функцию для каждого типа поста и термина по умолчанию, который вы хотите, который я поставил ниже.
function set_default_object_terms( $post_id, $post ) {
if ( 'publish' === $post->post_status && $post->post_type === 'comic' ) {
$defaults = array(
'story' => array( 'draft' )https://silentcomics.com
);
$taxonomies = get_object_taxonomies( $post->post_type );
foreach ( (array) $taxonomies as $taxonomy ) {
$terms = wp_get_post_terms( $post_id, $taxonomy );
if ( empty( $terms ) && array_key_exists( $taxonomy, $defaults ) ) {
wp_set_object_terms( $post_id, $defaults[$taxonomy], $taxonomy );
}
}
}
}
add_action( 'save_post', 'set_default_object_terms', 0, 2 );
То, что я пытаюсь достичь, это что-то вроде ниже но ни одна из глобальных переменных WordPress не работает или любая функция wordpress, такая как get_object_taxonomies () или wp_set_object_terms (), которые используются в примере, который дает WordPress.
Ниже приведена упрощенная версия того, чего я пытаюсь достичь, и параметры, которые я пытаюсь передать, это cpt slug, slug таксономии и id категории, к которой я хочу вернуться. Я также пробовал это с переменной $ cat_id в качестве массива.
function set_default_term( $cpt_slug, $taxonomy_slug, $term_id ) {
if ( isset( $_GET['post'] ) ) {
$post_id = intval( $_GET['post'] );
$post_type = get_post_type( $post_id );
$status = get_post_status( $post_id );
$cat_id = array( $term_id );
$cat_id = array_map( 'intval', $cat_id );
$cat_id = array_unique( $cat_id );
if ( $status === 'publish' && $post_type === $cpt_slug ) {
wp_set_object_terms( $post_id, $cat_id, $taxonomy_slug, true );
}
}
}
add_action( 'save_post', 'set_default_term', 20, 3 );
set_default_term('deployment-guides', 'deployment-guide-category', 98);