Вставьте все идентификаторы сообщения в новую таблицу базы данных

У меня есть плагин, который создает новую таблицу базы данных. После активации плагина там способ вставить все мои идентификаторы сообщений в ту таблицу?

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

function transfer_post_id($post_ID)  {
global $wpdb;
   if (!($wpdb->get_row("SELECT post_id FROM $my_table WHERE post_id = $post_ID" ) ) ) { //if post id not already added
      $wpdb->insert( $my_table, array( 'post_id' => $post_ID ) );      
   }
   return $post_ID;
}

add_action ( 'publish_post', 'transfer_post_id' );

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

1
05.12.2010, 20:33
3 ответа

Как так:

INSERT INTO $mytable (post_id)
SELECT ID
FROM $wpdb->posts as posts
LEFT JOIN $mytable as dup_check
ON dup_check.post_id = posts.ID
WHERE dup_check.post_id IS NULL;
6
19.02.2020, 22:41
  • 1
    Спасибо за добавление этого я немного спешил при ответе. –  hakre 06.12.2010, 01:06

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

Как так (кредиты Denis):

INSERT INTO $mytable (post_id)
SELECT ID
FROM $wpdb->posts as posts
LEFT JOIN $mytable as dup_check
ON dup_check.post_id = posts.ID
WHERE dup_check.post_id IS NULL;

Проверьте руководство MySql относительно синтаксиса оператора INSERT.

5
19.02.2020, 22:41

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

Denis благодарит за код!

Я использую его как так

   $my_table = $wpdb->prefix . "rated_posts";

   $wpdb->query( "INSERT INTO $my_table (rated_post_id)
                SELECT ID
                FROM $wpdb->posts as posts
                LEFT JOIN $my_table as dup_check
                ON dup_check.rated_post_id = posts.ID
                WHERE dup_check.rated_post_id IS NULL" ); 

Я деактивировал плагин и после активации для тестирования, я добираюсь

Плагин генерировал 663 символа неожиданного вывода во время активации. Если Вы замечаете, что “заголовки, уже отправленные” сообщения, проблемы с лентами RSS или другими проблемами, пытаются деактивировать или удалить этот плагин.

У меня есть wp_debug на, но я не получаю подробных ошибок.

0
19.02.2020, 22:41

Теги

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