Как прикрепить пользовательскую таксономию к сообщению в Wordpress? - PullRequest
0 голосов
/ 22 февраля 2019

A имеет много постов с пользовательскими типами постов в базе данных.В то же время тема создала учреждение таксономии:

function my_taxonomies_institutions() {
    $labels = array(
        'name'              => _x( 'Category', 'taxonomy general name' ),
        'singular_name'     => _x( 'Category', 'taxonomy singular name' ),
        // and tothers
    );
    $args = array(
        'labels'             => $labels,
        'hierarchical'       => true,
        'show_admin_column'  => true,
        'rewrite'            => array( 'hierarchical' => true, 'slug' => 'institutions' ),
    );
    register_taxonomy( 'institutions', 'institution', $args ); 
}
add_action( 'init', 'my_taxonomies_institutions', 0 );

ОК, там есть пункт меню Учреждения в административной зоне и немного категорий, например - Разделы.Теперь, чтобы оживить тему, созданную для этой таксономии, мне нужно просмотреть все сообщения и прикрепить термин «Учреждения» к сообщению в зависимости от его post_type.

print term_exists('sections'); // 7

Я попробовал следующее

$ret = wp_set_post_terms($pid, 7, 'institution');
$ret = wp_set_post_terms($pid, 'sections', 'institution');

но результат был

WP_Error Object ([errors] => Array ([invalid_taxonomy] => Array ([0] => Неверная таксономия.)) [Error_data] => Array())

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Вы зарегистрировали таксономию с именем institutions, но по ошибке использовали institution, следовательно, ошибка [invalid_taxonomy].Это должно быть так:

$ret = wp_set_post_terms($pid, array(7,), 'institutions');
$ret = wp_set_post_terms($pid, array('sections',), 'institutions');

Чтобы назначить этот термин "разделы" с term_id = 7 для всех сообщений типа institution, сделайте что-то вроде

$posts = get_posts(array(
  'post_type' => 'institution',
  'post_status' => 'publish',
  'posts_per_page' => -1
));

foreach ( $posts as $post ) {
   wp_set_post_terms( $post->ID, array(7,), 'institutions');
   // OR 
   // wp_set_post_terms( $post->ID, array ('sections',), 'institutions');
}

Я надеюсь, что это будетРабота.Пожалуйста, посмотрите на эту страницу кодекса для получения дополнительной информации.

0 голосов
/ 22 февраля 2019

попробуйте что-то вроде:

$posts = get_posts([
  'post_type' => 'institution',
  'post_status' => 'publish',
  'numberposts' => -1
]);

foreach ( $posts as $post ) {
   wp_set_post_terms( $post->ID; array( ), 'institutions');
}

также, если вы хотите wp_set_post_terms по id, вы должны использовать wp_set_post_terms( $post->ID; array( $id )) вместо wp_set_post_terms( $post->ID; $id) посмотреть здесь

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