Get_post()返回的值不正确

时间:2020-08-24 作者:Optimum Creative

我有一篇帖子,我需要更新它的post\\u父级。因此,我使用以下代码来更新post\\u parent值。旧的post\\u父项为844,使用query,我已使用以下命令将值更新为370:

    global $wpdb;
    $table_name = $wpdb->prefix . "posts";
    $add_plan_to_team = $wpdb->update( $table_name, array( \'post_parent\' => \'370\' ), array(\'ID\'=> \'84887\'));
    // UPDATE wp_posts SET post_parent=370 WHERE ID=84887 
在下一行中,我需要获得帖子,然后执行一些功能。我就是这样做的

     $post = get_post( 84887 );
但不是返回更新的值,而是返回旧的post\\u parent值。如下所示

WP_Post Object
(
    [ID] => 84887
    [post_author] => 2
    [post_date] => 2020-02-27 10:55:11
    [post_date_gmt] => 2020-02-27 10:55:11
    [post_content] => 
    [post_title] => MyTeam
    [post_excerpt] => 
    [post_status] => publish
    [comment_status] => closed
    [ping_status] => closed
    [post_password] => 
    [post_name] => allus-cu
    [to_ping] => 
    [pinged] => 
    [post_modified] => 2020-08-24 19:03:02
    [post_modified_gmt] => 2020-08-24 19:03:02
    [post_content_filtered] => 
    [post_parent] => 844   // This value is not correct. This should be 370
    [guid] => https://train.localdev.com/?post_type=wc_memberships_team&p=84887
    [menu_order] => 0
    [post_type] => wc_memberships_team
    [post_mime_type] => 
    [comment_count] => 0
    [filter] => db
)
我已经签入了数据库,在数据库中,post\\u parent值更新了一个。

完整的代码:

global $wpdb;
$table_name = $wpdb->prefix . "posts";
$add_plan_to_team = $wpdb->update( $table_name, array( \'post_parent\' => \'370\' ), array(\'ID\'=> \'84887\'));

if($add_plan_to_team){
    $post = get_post( $team_id, \'OBJECT\', \'db\' );
    echo \'<h1> team_updated </h1>\';
    print_r($post);            
}

请告诉我如何修理它。

1 个回复
SO网友:Tom J Nowell

这不是你更新帖子的方式。因为您使用了原始SQL来执行此操作,所以没有触发任何筛选器或操作,也没有WP_Cache 已更新,因此它将返回以前调用时获取的帖子的旧版本get_post.

相反,如果要更新帖子,请使用wp_insert_post 并传递posts ID参数。

例如。

$result = wp_insert_post( [
    \'ID\' => 84887,
    \'post_parent\' => 370,
] );
其他注意事项:

如果有一个API(有几个API),不要使用原始SQL进行操作。不要硬编码post ID,如果必须硬编码任何内容,请使用slug。所需的只是一次意外的帖子删除,代码必须至少用slug进行更改。您可以重命名帖子,然后它再次工作(如果您使用硬编码的数字迁移站点,则不会工作)

  • 数字不是字符串,请使用5\'5\' 尤其是在使用SQL函数时