【问题标题】:Function to update WordPress custom post Metadata更新WordPress自定义帖子元数据的功能
【发布时间】:2017-02-01 09:39:19
【问题描述】:

这个问题已经在这里提出过几次了,但是从我研究过的无数帖子中我都没有成功找到解决方案。

我正在使用的网站是一个优惠券网站,我有两个自定义帖子,一个用于商店,另一个用于优惠券。

两者之间有关系,商店自定义帖子 ID 是在优惠券自定义帖子中的自定义帖子元“offer_store”中估算的。

我遇到的问题是,当我通过 WP All Import 导入优惠券时,数据就在那里,您可以在帖子管理编辑页面中看到这一点,但除非我手动更新帖子中的帖子,否则关系不匹配管理员编辑页面。

我导入了 1000 个并且无法手动执行此操作,因此一直在寻找功能。 导入完成后,您可以使用一个函数来运行:

add_action('pmxi_after_xml_import', 'after_xml_import', 10, 1);

function after_xml_import($import_id) {
    $import = (int) $import_id;
    if ( $import == 38 ) {

    }
}

这里我试过wp_update_post();update_post_meta();

我尝试过的代码示例。

下面的代码更新了内容,但不是整个帖子,或者更具体地说是自定义帖子元:

add_action('pmxi_after_xml_import', 'after_xml_import', 10, 1);

function after_xml_import($import_id) {
    $import = (int) $import_id;
    if ( $import == 38 ) {
        $my_posts = get_posts( array('post_type' => 'offer', 'numberposts' => -1 ) );
        foreach ( $my_posts as $my_post ):
            $my_post['post_content'] = ' offer';
            wp_update_post( $my_post );
        endforeach; 
    }
}

我认为下面的代码有误,我正在尝试使用导入导入的相同值更新帖子自定义元键 (offer_store):

add_action('pmxi_after_xml_import', 'after_xml_import', 10, 1);

function after_xml_import($import_id) {
    $import = (int) $import_id;
    if ( $import == 38 ) {
        $my_posts = get_posts( array('post_type' => 'offer', 'numberposts' => -1 ) );
        foreach ($my_posts as $my_post) {
            $offer_store_id = get_post_meta( $my_post->ID, 'offer_store', true );
            update_post_meta($my_post->ID, 'offer_store', $offer_store_id);
        }       
    }
}

我不需要更改任何数据,我只需要一个模拟“更新”按钮的函数。

我在互联网上搜索了解决方案,但找不到解决方案,我希望这里有人能救我的命。

【问题讨论】:

  • 我认为这是错误的方式。导入后帖子 ID 可能已更改,因此您不应将优惠券分配给商店帖子 ID。请改用唯一的商店标识符。
  • 商店的帖子 ID 永远不会改变。导入期间商店帖子中的任何内容都不会更改,只有优惠券帖子类型。这绝对是正确的 ID,因为它在后端表示商店名称,而前端这种关系不匹配。当您手动更新帖子时,它可以正常工作。

标签: php wordpress function custom-post-type


【解决方案1】:

我遇到的问题是,当我通过 WP All Import 导入优惠券时,数据就在那里,您可以在帖子管理编辑页面中看到这一点,但除非我手动更新帖子中的帖子,否则关系不匹配管理员编辑页面。

这可能是您导入数据的方式的问题。我记得 WP All Import 在导入 ACF 提供的字段时遇到了同样的问题。

导入自定义字段时,您需要为 WPAI 自定义字段部分中的每个字段设置 行。一个需要是fieldnamevalue,另一个需要是_fieldname(注意下划线)和field_xyz,后者是ACF使用的字段标识符。

这是我使用的导入示例图像,您可以在那里看到我的意思:

如果您仅提供一行字段名和值,则 WP 元数据表中缺少某些内容。正如您已经发现的那样,通过 UI 再次保存帖子修复了该问题。当您提供上述字段数据时,您可以避免这样做。


WP All Import 提供了一个额外的插件,专门用于处理自定义字段 - 它提供了一种拖放式界面,可以自动创建这些字段组合。您不一定需要使用它,您也可以手动配置它,如上所示。

【讨论】:

  • 我明白你的意思,我将 ACF 用于我自己的一些自定义元,但导入的数据被导入到在主题中创建的自定义元字段中。我查看了 postmeta 表,与 ACF 元字段不同,主题创建的字段没有对应的“_offer_store”和“field_xyz”。有什么想法吗?
  • 可能仍然是类似的东西。您能否在导入后检查特定帖子的 postmeta 表包含哪些条目,以及在您通过 UI 再次保存帖子后是否/如何更改?
  • 通过 UI 比较导入后的元数据并与手动更新后的元数据进行比较,发现我在导入过程中遗漏了一些必需的元数据。愚蠢的错误,但有时有助于与某人讨论这个问题,非常感谢你,没有你就不会到达那里。干杯芽
猜你喜欢
  • 2012-01-02
  • 2021-11-03
  • 1970-01-01
  • 2018-03-10
  • 1970-01-01
  • 1970-01-01
  • 2013-06-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多