Как я вставляю сообщение с пользовательским типом сообщения и связываю его с пользовательской таксономией?

Я пытаюсь выяснить, как вставить новое сообщение. У меня есть пользовательский посттип (курс), который связан с пользовательской таксономией (categorycourses).

Мне удалось вставить сообщение с пользовательским курсом типа сообщения, но я не могу выяснить, как связать это сообщение с пользовательской таксономией categorycourses.

//This will return array of category-courses (temporarily tables kurser and kategorier created by me)
$courses = $wpdb->get_results( "SELECT * FROM `kurser` kur
LEFT JOIN kategorier kat ON (kat.id = kur.kategori)" );

//Go through category-courses and put them into wordpress-tables
foreach($courses as $course) {
    $name = $course->kursnamn;   
    //If name has length
    if (strlen($name)>0) {              
        $new_post = array(
            'post_title' => $name,
            'post_content' => '',
            'post_status' => 'publish',
            'post_date' => date('Y-m-d H:i:s'),
            'post_author' => $user_ID,
            'post_type' => 'course'
        );

        //This works because an ID is returned                
        $post_id = wp_insert_post($new_post); 

        $current_term_category = 33;         
        if (substr($name, 0, 3) == 'lid') {
            $cat_city = 29;
        }
        else {
            $cat_city = 30;                
        }
        $cat_ids = array($current_term_category, $cat_city);

        //term_id 30,29 and 33 exists in wp_terms-table
        //This is where I've done something wrong.    
        wp_set_object_terms( $post_id, $cat_ids, 'categorycourses', false);
    }

}  

Пользовательские курсы типов вставляются, но никакие отношения к любому categorycourses ((29 или 30) и 33) не сделаны. Что я делаю неправильно?

0
31.10.2013, 18:38
3 ответа

Я предоставлю ответ, таким образом, людям с той же проблемой в будущем можно было бы помочь...

Проблема не была в фактической функции. Это было о том, когда таксономия (categorycourses) была зарегистрирована...

Функция для registerering пользовательского сообщения вводит курс и категорию курса:

function courses_with_cats() {

    //Register custom post type for courses
    $course_labels = array(
      'name' => 'Kurser',
      'singular_name' => 'Kurs',
      'add_new' => 'Lägg till',
      'add_new_item' => 'Lägg till ny kurs',
      'edit_item' => 'Redigera kurs',
      'new_item' => 'Ny kurs',
      'all_items' => 'Alla kurser',
      'view_item' => 'Visa kurs',
      'search_items' => 'Sök kurser',
      'not_found' => 'Inga kurser funna',
      'not_found_in_trash' => 'Inga kurser funna i sopkorgen',
      'parent_item_colon'  => '',
      'menu_name' => 'Kurser'
    );
    $course_args = array(
      'labels' => $course_labels,
      'public' => true,
      'publicly_queryable' => true,
      'show_ui' => true,
      'show_in_menu' => true,
      'query_var' => true,
      'rewrite' => array( 'slug' => 'kurs' ),
      'capability_type' => 'post',
      'has_archive' => 'kurser',
      'hierarchical' => false,
      'menu_position' => null,
      'supports' => array('title','editor','author','comments'),      
    );
    register_post_type( 'course', $course_args );


    //Register custom taxonomy for courses-categories
    $course_cat_labels = array(
      'name' => 'Kurskategori',
      'singular_name' => 'Kurskategori',
      'search_items' => 'Sök kategori',
      'all_items' => 'Alla kategori',
      'parent_item' => 'Föräldrakategori',
      'parent_item_colon' => 'Föräldrakategori:',
      'edit_item' => 'Redigera kategori',
      'update_item' => 'Uppdatera kategori',
      'add_new_item' => 'Lägg till ny kategori',
      'new_item_name' => 'Namn på ny kategori',
      'menu_name' => 'Kurskategori'     
    );
    $course_cat_args = array(
      'hierarchical' => true,
      'labels' => $labels,
      'show_ui' => true,
      'show_admin_column' => true,
      'query_var' => true,
      'rewrite' => array('slug' => 'kurser/kategori')
    );

    register_taxonomy( 'categorycourses', array('course'), $course_cat_args );
}

ПРЕЖДЕ: (Это НЕ работало),

add_action('init', 'convertaddcoursesfromaccess');

//Hooks for courses and courses-categories
add_action( 'init', 'courses_with_cats' );

ПОСЛЕ: (Это действительно работало!)

//Hooks for courses and courses-categories
add_action( 'init', 'courses_with_cats' );

add_action('init', 'convertaddcoursesfromaccess');

(ОТМЕТЬТЕ!!! В первом случае это работало для вставки пользовательского типа сообщения (курс), даже если посттип не был зарегистрирован. Но это не было возможно, связывают сообщение с пользовательской таксономией с wp_set_object_terms())

Благодаря Rahil Wazir, который сделал меня знающим это функции WP wp_set_object_terms() и wp_set_post_terms() обе работы с пользовательским сообщением вводят, ДАЖЕ ЕСЛИ Кодекс Wordpress указывает иначе в http://codex.wordpress.org/Function_Reference/wp_set_post_terms:

"Эта функция будет только работать над собственным типом сообщения. Поскольку таксономия на пользовательском типе сообщения использует wp_set_object_terms ()"

Я подтвердил что дело обстоит не так, обе обработанных функции выше обработанного для меня с пользовательским типом сообщения (курс). Но я использую wp_set_object_terms() потому что мое подозрение - то, что WP сделает wp_set_post_terms() удержанный от использования в будущем (это - просто квалифицированное предположение хотя),

1
19.02.2020, 23:41
  • 1
    Glad, который Вы имеете, изображают его сами. –  Rahil Wazir 01.11.2013, 14:13
  • 2
    @RahilWazir - без Вашего ответа и комментариев мне не удалось бы понять это! А-ч :-) –  bestprogrammerintheworld 01.11.2013, 14:55
  • 3
    реальный вопрос здесь был бы, что convertaddcoursesfromaccess выполнение? Иначе это не имеет никакого смысла это просто переупорядочение add_action()- части решили Вашу проблему. –  Nicolai 01.11.2013, 19:16
  • 4
    Верный! Я должен, предоставил больше кода первоначально. –  bestprogrammerintheworld 02.11.2013, 22:24

Попытайтесь изменить эту строку

  wp_set_object_terms( $post_id, array($cat_ids), 'categorycourses', false);

кому:

  wp_set_object_terms( $post_id, $cat_ids, 'categorycourses', false);

$cat_ids уже массив, и Вы пишете с в массиве снова. Надежда это помогает.

2
19.02.2020, 23:41
  • 1
    Хороший определенный, но к сожалению изменение не работало. –  bestprogrammerintheworld 31.10.2013, 18:38

Попытайтесь измениться wp_set_object_terms с wp_set_post_terms

// Set Categories For Current Post
wp_set_post_terms($post_id, array(29, 30, 33), 'categorycourses'); //Change array(29, 30, 33) with your $cat_ids

Я не знаю почему Ваш wp_set_object_terms не работа, но wp_set_post_terms должен работать.

Отредактированный:

Из wp кодекса:

Возможно, wp_set_post_terms () является более полезной функцией, так как он проверяет значения ​​, преобразовывая taxonomies разделенный запятыми и проверяя иерархические условия в целых числах.

0
19.02.2020, 23:41
  • 1
    Да, но в документации также говорится... "Эта функция будет только работать над собственным типом сообщения. Поскольку таксономия на пользовательском типе сообщения использует wp_set_object_terms ()" –  bestprogrammerintheworld 31.10.2013, 19:11
  • 2
    Никакой путь! Я использовал то же выше метода для моего пользовательского типа сообщения пользовательской таксономии. Вы попробовали его? –  Rahil Wazir 31.10.2013, 19:14
  • 3
    Это верно. В документации говорится так, но документация могла бы быть неправильной. Я попробую его и возвращусь Вам! Спасибо за Ваше предложение! :-) –  bestprogrammerintheworld 31.10.2013, 19:16
  • 4
    Ха-ха это могло бы быть неправильно ДА!!!, я также считал его сейчас. –  Rahil Wazir 31.10.2013, 19:18
  • 5
    hehe На самом деле они оба, кажется, работают таким же образом. Я проследил возвращаемое значение до этого: Объект WP_Error ([ошибки] => Массив ([invalid_taxonomy] => Массив ([0] => Ogiltig таксономия)) [error_data] => Массив ()), поэтому теперь я могу изобразить то, что идет... на –  bestprogrammerintheworld 31.10.2013, 19:36

Теги

Похожие вопросы