Wordpress:wp_update_post 不会使用来自 CSV 的新数据更新 post
Wordpress: wp_update_post doesn't update the post with new data from a CSV
我正在编写一些代码来读取包含有关房地产列表信息的 csv,然后为该列表创建 post 或更新当前的 post。每个列表的标题都是地址,因此如果它检测到 post 已经创建了该地址,我希望它更新当前的 post。 post 是自定义类型 "listing",带有自定义字段,例如“_listing_address”(也是 post_title)和“_listing_price”等。这里是为新 post 初始化数组或使用数据更新新 post:
的代码部分
$new_post = array(
'post_title' => convert_chars($data['csv_post_title']),
'post_content' => wpautop(convert_chars($data['csv_post_post'])),
'post_status' => $opt_draft,
'post_type' => $type,
'post_date' => $this->parse_date($data['csv_post_date']),
'post_excerpt' => convert_chars($data['csv_post_excerpt']),
'post_name' => $data['csv_post_slug'],
'post_author' => $this->get_auth_id($data['csv_post_author']),
'tax_input' => $this->get_taxonomies($data),
'post_parent' => $data['csv_post_parent'],
);
这里是创建新 post 或(应该)更新现有 post 的代码:
if (!get_page_by_title( $new_post['post_title'], 'OBJECT', 'listing')) {
$id = wp_insert_post($new_post);
} else {
$old_post = get_page_by_title( $new_post['post_title'], 'OBJECT', 'listing' );
$new_post['ID'] = $old_post->ID;
$id = wp_update_post($new_post);
}
我可以使用我拥有的代码成功创建新的 post,它还可以成功检查另一个 post 是否具有相同的标题,因为它不会创建重复的 [=30] =]秒。但是,它实际上并没有更新 post。因此,如果在我的 csv 文件中,我将其中一个列表的价格从 29,900 美元更改为 30,000 美元,当我 re-upload csv 时,它不会创建新的 post,因为地址没有改变,但它不会改变当前 post 的价格。我猜这是 post ID 的问题,但我尝试过的任何方法都没有用。任何帮助将不胜感激。
其他相关信息:
我正在使用 Wordpress 的 CSV Importer 插件,我用上面的代码修改了它以检查重复的 posts 并更新它们。我还使用了 Genesis 框架和 Agentpress 主题,它们创建了列表自定义类型。
我明白了。问题是我在上面创建数组的代码没有处理任何自定义字段 - 这些由稍后调用的另一个函数处理,该函数使用 Wordpress 的 create_post_meta()
函数来创建自定义字段。显然这对我来说是个问题,因为我试图更新已经创建的 post 元字段。我所要做的就是将其切换到 update_post_meta()
,这两个更新都已经创建了 post 元,如果还没有,则创建一个新元。希望这对正在使用 CSV 导入器或已经制作了自己的 CSV 上传插件并且正在努力从 CSV 文件创建和更新 posts 的任何人有所帮助。
我正在编写一些代码来读取包含有关房地产列表信息的 csv,然后为该列表创建 post 或更新当前的 post。每个列表的标题都是地址,因此如果它检测到 post 已经创建了该地址,我希望它更新当前的 post。 post 是自定义类型 "listing",带有自定义字段,例如“_listing_address”(也是 post_title)和“_listing_price”等。这里是为新 post 初始化数组或使用数据更新新 post:
的代码部分$new_post = array(
'post_title' => convert_chars($data['csv_post_title']),
'post_content' => wpautop(convert_chars($data['csv_post_post'])),
'post_status' => $opt_draft,
'post_type' => $type,
'post_date' => $this->parse_date($data['csv_post_date']),
'post_excerpt' => convert_chars($data['csv_post_excerpt']),
'post_name' => $data['csv_post_slug'],
'post_author' => $this->get_auth_id($data['csv_post_author']),
'tax_input' => $this->get_taxonomies($data),
'post_parent' => $data['csv_post_parent'],
);
这里是创建新 post 或(应该)更新现有 post 的代码:
if (!get_page_by_title( $new_post['post_title'], 'OBJECT', 'listing')) {
$id = wp_insert_post($new_post);
} else {
$old_post = get_page_by_title( $new_post['post_title'], 'OBJECT', 'listing' );
$new_post['ID'] = $old_post->ID;
$id = wp_update_post($new_post);
}
我可以使用我拥有的代码成功创建新的 post,它还可以成功检查另一个 post 是否具有相同的标题,因为它不会创建重复的 [=30] =]秒。但是,它实际上并没有更新 post。因此,如果在我的 csv 文件中,我将其中一个列表的价格从 29,900 美元更改为 30,000 美元,当我 re-upload csv 时,它不会创建新的 post,因为地址没有改变,但它不会改变当前 post 的价格。我猜这是 post ID 的问题,但我尝试过的任何方法都没有用。任何帮助将不胜感激。
其他相关信息:
我正在使用 Wordpress 的 CSV Importer 插件,我用上面的代码修改了它以检查重复的 posts 并更新它们。我还使用了 Genesis 框架和 Agentpress 主题,它们创建了列表自定义类型。
我明白了。问题是我在上面创建数组的代码没有处理任何自定义字段 - 这些由稍后调用的另一个函数处理,该函数使用 Wordpress 的 create_post_meta()
函数来创建自定义字段。显然这对我来说是个问题,因为我试图更新已经创建的 post 元字段。我所要做的就是将其切换到 update_post_meta()
,这两个更新都已经创建了 post 元,如果还没有,则创建一个新元。希望这对正在使用 CSV 导入器或已经制作了自己的 CSV 上传插件并且正在努力从 CSV 文件创建和更新 posts 的任何人有所帮助。