Как я могу добавить столбец/столбцы в таблицу сообщений wp?
Я пытаюсь синхронизировать WP с другой службой, которая предлагает API, который позволяет мне подключать обновление, создание и удаление их таблиц к моим сайтам.
Поэтому, когда они создают, обновляют или удаляют строку на своем сервере, я получаю подробную информацию об этом обновлении, включая идентификатор строки.
Я думаю о синхронизации с помощью пользовательских типов записей и либо добавляю новую отдельную таблицу с отношением post->api, например post_id:1 = api_id:53
.
Или измените таблицу wp_posts
, добавив столбец содержащий идентификатор api_id.
Я знаю, что могу добавить метабокс, который добавит это как post_meta, но я не уверен, насколько это будет эффективно, и я почти уверен, что если я изменю wp_posts
, запросы будут намного быстрее.
Итак, как я могу изменить wp_posts
способом WordPress? Если это невозможно, следует ли мне добавить мета-поля или создать совершенно новую таблицу только для отношения?
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 );
Я бы настоятельно рекомендовал создать свою собственную таблицу только для этого отношения. Таким образом, запросы могут быть быстрее, и вам не придется беспокоиться о том, что структура таблиц WordPress постоянно меняется и портит вашу работу (и потенциально может привести к удалению вашего столбца и всех его данных).
Одно можно сказать наверняка: у вас всегда будет идентификатор, с которым можно будет свериться.
РЕДАКТИРОВАТЬ: Можно было бы сделать так, но post_meta имеет некоторые большие преимущества.
Похоже, вы пытаетесь сохранить метаданные о сообщениях. WordPress позволяет вам делать это с помощью своих Пользовательских полей. Функции, которые вы, вероятно, найдете наиболее полезными, это update_post_meta()
и get_post_meta()
.
Я пришел сюда с той же проблемой, что и ОП. Что большинство из этих ответов здесь упускают из виду, так это тот факт, что таблица postmeta медленно запрашивается, потому что столбцы meta_key и meta_value не индексируются. Поэтому, если у вас огромное количество постов и, соответственно, огромное количество мета-записей, то для получения необходимых вам данных потребуется много времени.
Решение состоит в том, чтобы использовать ключ 'import_id' при импорте данных (предполагается, что вы используете wp_insert_post
). Этот позволит вам вручную установить идентификатор записи на идентификатор API. Вот соответствующий раздел на проф.