获取wp_INSERT_POST后的原始帖子ID

时间:2016-06-07 作者:ScottD

我有一个包含多个CPT的插件(我们将它们称为CPT-a、CPT-B、CPT-C和CPT-D)。所有CPT都有自定义字段。在CPT-D中,用户可以进行选择,并将CPT-a、CPT-B和CPT-C中的一个职位分配给CPT-D中的当前职位。基本上,相关记录相互链接。

如果CPT-A、CPT-B和/或CPT-C中的帖子尚不存在,用户可以通过使用标准文本输入字段输入帖子标题“快速”创建帖子。不需要其他数据,以后可以输入任何可选数据。

然后,我将使用wp\\u insert\\u post()添加新的帖子(CPT-A、CPT-B和/或CPT-C)。这一切都按预期进行。

接下来,我需要使用新CPT-A、CPT-B和/或CPT-C的post ID更新CPT-D的POSTETA。为此,我使用update\\u post\\u meta()。

我遇到的问题是,错误的帖子的Posteta正在更新。

例如,如果CPT-D的Post ID为99,则如果设置了所有三个CPT,则其应具有postmeta\\u键“assigned-CPT-a”=100、“assigned-CPT-b”=101和“assigned-CPT-c”=102。

取而代之的是:CPT-D获取Posteta“assigned-CPT-a”=100CPT-a获取Posteta“assigned-CPT-b”=101CPT-b获取Posteta“assigned-CPT-c”=102

以下是插入新CPT并更新postmeta的代码示例:

<?php
$new_cpta_title = sanitize_text_field( $_POST[ \'cpt-a-name\' ] );
/* Only add new if a CPT with the same title doesn\'t already exist */
if( null == get_page_by_title( $new_cpta_title, OBJECT, \'cpt-a\' ) ) {
    $new_cpta_slug = preg_replace("/[^A-Za-z0-9]/",\'\',strtolower($new_cpta_title));
    $author_id = get_current_user_id();
    $new_cpta = array(
        \'comment_status\'    =>  \'closed\',
        \'ping_status\'       =>  \'closed\',
        \'post_author\'       =>  $author_id,
        \'post_name\'         =>  $new_cpta_slug,
        \'post_title\'        =>  $new_cpta_title,
        \'post_status\'       =>  \'publish\',
        \'post_type\'         =>  \'cpt-a\'
    );
    wp_insert_post( $new_cpta );

    $new_cpta_info = get_page_by_path($new_cpta_slug, OBJECT, \'cpt-a\');
    if ( $new_cpta_info ) {
        $new_cpta_ID = $new_cpta_info->ID;
        update_post_meta( $post_id, \'cpt-a-id\', $new_cpta_ID );
    }
}
所以,我的问题是,如何将update\\u post\\u meta中的$post\\u id重置为与原始CPT-D相同的post id?

1 个回复
SO网友:ScottD

最终,我找到的解决方案是使用global$post;立即检索当前帖子的IDwp_insert_post( $new_cpta ); 上面,我补充道

global $post;
$currentid = $post->ID;
然后我就可以用$currentid 代替$post_id.

相关推荐

列出分类法:如果分类法没有POST,就不要列出分类法--取决于定制的POST-META?

这可能很难解释,我不知道是否有解决办法!?我有一个名为“wr\\u event”的自定义帖子类型和一个名为“event\\u type”的分层自定义分类法。自定义帖子类型有一个元框,用于event_date 并且与此帖子类型关联的所有帖子都按以下方式排序event_date. 我在循环中有一个特殊的条件来查询event_date 已经发生了-在这种情况下,它没有显示,但只列在我的档案中。就像你可以使用wp_list_categories() 我编写了一个自定义函数,它以完全相同的方式列出所有分类术语。现在