Как я могу добавить столбец/столбцы в таблицу сообщений wp?


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

Поэтому, когда они создают, обновляют или удаляют строку на своем сервере, я получаю подробную информацию об этом обновлении, включая идентификатор строки.

Я думаю о синхронизации с помощью пользовательских типов записей и либо добавляю новую отдельную таблицу с отношением post->api, например post_id:1 = api_id:53.

Или измените таблицу wp_posts, добавив столбец содержащий идентификатор api_id.

Я знаю, что могу добавить метабокс, который добавит это как post_meta, но я не уверен, насколько это будет эффективно, и я почти уверен, что если я изменю wp_posts, запросы будут намного быстрее.

Итак, как я могу изменить wp_posts способом WordPress? Если это невозможно, следует ли мне добавить мета-поля или создать совершенно новую таблицу только для отношения?

Author: Pat J, 2014-01-16

4 answers

Технически вы можете добавить столбец post с помощью SQL, но я бы предостерег от этого в качестве сценариев резервного копирования, экспорта и т. Д. скорее всего, проигнорировал бы это.

Вместо этого я бы добавил содержимое в виде post_meta, либо используя пользовательское поле, либо через PHP с помощью функции update_post_meta().

Чтобы получить сообщение на основе мета-данных, просто используйте:

$args = array(
        'post_type' => 'custom_post_type',
        'meta_key' => 'api',
        'meta_value' => $api_value,
      );
$posts = get_posts( $args )

Или, чтобы получить значение ключа API

get_post_meta( $post_ID, 'api', true );
 6
Author: Christopher Ross, 2014-01-16 21:45:19

Я бы настоятельно рекомендовал создать свою собственную таблицу только для этого отношения. Таким образом, запросы могут быть быстрее, и вам не придется беспокоиться о том, что структура таблиц WordPress постоянно меняется и портит вашу работу (и потенциально может привести к удалению вашего столбца и всех его данных).

Одно можно сказать наверняка: у вас всегда будет идентификатор, с которым можно будет свериться.

РЕДАКТИРОВАТЬ: Можно было бы сделать так, но post_meta имеет некоторые большие преимущества.

 4
Author: MikeNGarrett, 2014-01-17 23:08:51

Похоже, вы пытаетесь сохранить метаданные о сообщениях. WordPress позволяет вам делать это с помощью своих Пользовательских полей. Функции, которые вы, вероятно, найдете наиболее полезными, это update_post_meta() и get_post_meta().

 3
Author: Pat J, 2014-01-16 21:47:35

Я пришел сюда с той же проблемой, что и ОП. Что большинство из этих ответов здесь упускают из виду, так это тот факт, что таблица postmeta медленно запрашивается, потому что столбцы meta_key и meta_value не индексируются. Поэтому, если у вас огромное количество постов и, соответственно, огромное количество мета-записей, то для получения необходимых вам данных потребуется много времени.

Решение состоит в том, чтобы использовать ключ 'import_id' при импорте данных (предполагается, что вы используете wp_insert_post). Этот позволит вам вручную установить идентификатор записи на идентификатор API. Вот соответствующий раздел на проф.

 0
Author: jhned, 2018-08-16 00:46:45