如何向wp_posts表添加列?

时间:2014-01-16 作者:Neta Meta

我正在尝试将WP与另一个提供API的服务同步,该API允许我将他们的表的更新、创建和删除连接到我的站点。

因此,当他们在服务器上创建、更新或删除行时,我会获得有关该更新的详细信息,包括行ID。

我考虑同步的方式是使用自定义的post类型,或者添加一个新的单独表,其中包含post->api关系,如post_id:1 = api_id:53.

或更改wp_posts 通过添加包含api\\u id的列。

我知道我可以添加metabox,它会将其添加为post\\u meta,但我不确定这会有多有效,如果我更改wp_posts, 查询速度会快得多。

那么我该如何改变wp_posts 用WordPress的方式?如果不可能,我应该添加元框还是只为关系创建一个全新的表?

4 个回复
最合适的回答,由SO网友:Christopher Ross 整理而成

从技术上讲,您可以使用SQL添加一个post列,但我要提醒您不要这样做,因为备份脚本、导出等可能会忽略它。

相反,我将使用自定义字段或通过带有update\\u post\\u meta()函数的PHP将内容添加为post\\u 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 );

SO网友:MikeNGarrett

我强烈建议您为这种关系创建自己的表。通过这种方式,查询可以更快,而且您不必担心WordPress的表结构会不断变化并破坏您的工作(并且可能会删除您的列及其所有数据)。

有一件事是肯定的,你永远都会有一个id来匹配。

EDIT: Could be done this way, but post_meta has some larger advantages.

SO网友:Pat J

听起来你在试图存储帖子的元信息。WordPress允许您使用其Custom Fields. 您可能会发现最有用的函数有update_post_meta()get_post_meta().

SO网友:jhned

我来到这里时遇到了与OP相同的问题。这里的大多数答案都忽略了一个事实,即Posteta表的查询速度很慢,因为meta\\u key和meta\\u value列没有索引。因此,如果你有大量的帖子,以及相应的大量帖子元,那么获取所需的数据将需要大量的时间。

解决方案是在导入数据时使用“import\\u id”键(假设您正在使用wp_insert_post). 这将允许您手动将post ID设置为API ID。这是relevant section 在trac上。

结束

相关推荐

query_posts orderby postmeta

我正在尝试检索自定义帖子类型,并按Posteta中存储的自定义日期进行排序。自定义日期是unix时间戳。meta\\u查询工作正常-它只检索将来具有自定义日期的帖子。但是orderby不起作用-订单仍然基于post\\u日期。我错过了什么? $today = date(\"m/d/Y\"); $today = strtotime( $today ); query_posts( array( \'post_type\' =>