Поддержка Проблемы и решения Пост без инкремента ID

  • Решено rsl89

    (@rsl89)


    Всем привет.
    делаю пост:

    $data = array();
        $data['id'] = $post_data['id']+5800;
        $data['post_author'] = 1;
        $data['post_date'] = $post_data['date'];
        $data['post_title'] = $post_data['title'];
        $data['post_content'] = $post_data['short_story'];    
        $data['post_name'] = $post_data['alt_name'];
        $data['post_status'] = 'publish';
    
        // Вставка в wp_posts
        $last_id = wp_insert_post($data);

    — ИД не работает, нужное мне не постится.
    Как избежать инкремента ИД? Нужно получить чисто свои ИД с прибавлением.

    • Тема изменена 3 года назад пользователем rsl89.
Просмотр 15 ответов — с 1 по 15 (всего 15)
  • Если вам почему-то так важно сделать этот Дестрой, то необходимо убрать AI (Auto Increment) для Поля [‘id’] в DB.
    Но уверяю вас, что полученный эффект скорее всего превзойдет ваши ожидания.

    Автор rsl89

    (@rsl89)

    мне это нужно только на время, чтобы перенести посты с другого движка
    выключить там авто инкремент не подходит, при записи поста параллельно идет запись постера, нужно именно в этом месте, где я показал код что-то придумать, чтобы записал с тем ИД, который я укажу

    • Ответ изменён 3 года назад пользователем rsl89.
    Автор rsl89

    (@rsl89)

    поставлю вопрос по другому
    как записать посты и категории с своими, указанным ИД?
    wp_insert_post не позволяет это сделать

    • Ответ изменён 3 года назад пользователем rsl89.
    Автор rsl89

    (@rsl89)

    можно напрямую после записи поста поменять его айди
    UPDATE wp_posts SET ID=185 WHERE ID=180;
    насколько это будет правильно для WP не знаю

    Автор rsl89

    (@rsl89)

    в документации WP:

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

    .
    почему тогда так не работает?
    $data['ID'] = $post_data['id']+5800;

    почему тогда так не работает?

    потому, что не может.

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    $data['id'] = $post_data['id']+5800;

    Обратите внимание на регистр, тут везде должно быть ID, а не id.

    Автор rsl89

    (@rsl89)

    это не помогает

    Попробуйте так:

    
    $data['id'] = intval($post_data['id']) + 5800;
    
    • Ответ изменён 3 года назад пользователем wpgear.
    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    это не помогает

    Какое значение получается в $data['ID']?

    Автор rsl89

    (@rsl89)

    Какое значение получается в $data[‘ID’]?

    там получается нужное мне, но оно не постится в БД

    Автор rsl89

    (@rsl89)

    Пока решил так, в цикле добавления поста:

        $new_id = $post_data['id'] + 6000;
        $last_id1 = $wpdb->query("UPDATE $wpdb->posts SET ID='$new_id' WHERE ID='$last_id'");
    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    wp_insert_post не позволяет это сделать

    Да, действительно не позволяет 🙂

    У wp_insert_post() есть параметр $wp_error — если передать true, можно получить более подробную информацию об ошибке. Например, такой код:

    
    $data = array();
    
    $data['ID']           = 5842;
    $data['post_title']   = 'test';
    $data['post_content'] = 'test';
    $data['post_status']  = 'publish';
    
    $last_id = wp_insert_post( $data, true );
    var_dump( $last_id );
    

    выдаёт ошибку «Invalid post ID».

    Если передать ID, то wp_insert_post() пытается изменить существующую запись, а в данном случае её нет.

    можно напрямую после записи поста поменять его айди
    UPDATE wp_posts SET ID=185 WHERE ID=180;
    насколько это будет правильно для WP не знаю

    Если при импорте что-то попадает в таблицы wp_comments, wp_postmeta, wp_term_relationships — нужно будет обновить ID записи и в этих таблицах тоже.

    Автор rsl89

    (@rsl89)

    Если при импорте что-то попадает в таблицы wp_comments, wp_postmeta, wp_term_relationships — нужно будет обновить ID записи и в этих таблицах тоже.

    тоже думал об этом, продумал, вроде бы все ок

    у меня такой вопрос, возможно глупый, я вот переношу посты с другой БД и если я решу вносить эти посты с 10000 ИД (текущий счет на 4500), то новые посты продолжают добавляться с 4500 ид, когда они дойдут до 10000 они перескочат автоинкрементом, или начнут затирать имеющиеся?

    • Ответ изменён 3 года назад пользователем rsl89.
    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    wp_insert_post не позволяет это сделать

    При внимательном рассмотрении оказалось, что всё же позволяет 🙂

    Там есть недокументированный параметр «import_id», предназначенный именно для импорта записей с нужными ID.

    Создал тикет, чтобы добавить его в документацию: #52943.

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

    Думаю, проще проверить на тестовой установке, чем ждать ответа 🙂

    Сейчас проверил — при вставке записи с ID 10000 значение AUTO_INCREMENT в таблице автоматически увеличивается до 10001, т.е. после импорта новые записи пойдут дальше, а промежуток от 4500 до 10000 не будет использоваться.

Просмотр 15 ответов — с 1 по 15 (всего 15)
  • Тема «Пост без инкремента ID» закрыта для новых ответов.