Если вам почему-то так важно сделать этот Дестрой, то необходимо убрать AI (Auto Increment) для Поля [‘id’] в DB.
Но уверяю вас, что полученный эффект скорее всего превзойдет ваши ожидания.
мне это нужно только на время, чтобы перенести посты с другого движка
выключить там авто инкремент не подходит, при записи поста параллельно идет запись постера, нужно именно в этом месте, где я показал код что-то придумать, чтобы записал с тем ИД, который я укажу
-
Ответ изменён 3 года, 10 месяцев назад пользователем rsl89.
поставлю вопрос по другому
как записать посты и категории с своими, указанным ИД?
wp_insert_post не позволяет это сделать
-
Ответ изменён 3 года, 10 месяцев назад пользователем rsl89.
можно напрямую после записи поста поменять его айди
UPDATE wp_posts SET ID=185 WHERE ID=180;
насколько это будет правильно для WP не знаю
в документации WP:
Если передать параметр ID, то будет отредактирована уже существующая запись с таким же ID, т.е. при указании параметра ID, мы обновляем запись, а не создаем новую
.
почему тогда так не работает?
$data['ID'] = $post_data['id']+5800
;
$data['id'] = $post_data['id']+5800;
Обратите внимание на регистр, тут везде должно быть ID
, а не id
.
Попробуйте так:
$data['id'] = intval($post_data['id']) + 5800;
-
Ответ изменён 3 года, 10 месяцев назад пользователем wpgear.
это не помогает
Какое значение получается в $data['ID']
?
Какое значение получается в $data[‘ID’]?
там получается нужное мне, но оно не постится в БД
Пока решил так, в цикле добавления поста:
$new_id = $post_data['id'] + 6000;
$last_id1 = $wpdb->query("UPDATE $wpdb->posts SET ID='$new_id' WHERE ID='$last_id'");
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 записи и в этих таблицах тоже.
Если при импорте что-то попадает в таблицы wp_comments, wp_postmeta, wp_term_relationships — нужно будет обновить ID записи и в этих таблицах тоже.
тоже думал об этом, продумал, вроде бы все ок
у меня такой вопрос, возможно глупый, я вот переношу посты с другой БД и если я решу вносить эти посты с 10000 ИД (текущий счет на 4500), то новые посты продолжают добавляться с 4500 ид, когда они дойдут до 10000 они перескочат автоинкрементом, или начнут затирать имеющиеся?
-
Ответ изменён 3 года, 10 месяцев назад пользователем rsl89.
wp_insert_post не позволяет это сделать
При внимательном рассмотрении оказалось, что всё же позволяет 🙂
Там есть недокументированный параметр «import_id», предназначенный именно для импорта записей с нужными ID.
Создал тикет, чтобы добавить его в документацию: #52943.
новые посты продолжают добавляться с 4500 ид, когда они дойдут до 10000 они перескочат автоинкрементом, или начнут затирать имеющиеся?
Думаю, проще проверить на тестовой установке, чем ждать ответа 🙂
Сейчас проверил — при вставке записи с ID 10000 значение AUTO_INCREMENT
в таблице автоматически увеличивается до 10001, т.е. после импорта новые записи пойдут дальше, а промежуток от 4500 до 10000 не будет использоваться.