ON SAVE_POST需要wp_INSERT_POST,并将部分帖子ID保存到子帖子,将子帖子ID保存到父帖子

时间:2018-10-19 作者:Mole_LR

我正在为自定义帖子类型及其元数据等开发插件。目前一切正常,但现在我需要扩展此插件-当某些元数据的值为X时,我需要在保存/编辑帖子时额外创建一个相同的自定义帖子。我很难弄清楚如何获得2个值:1)将“父”帖子ID插入“子”帖子到特定元数据2)将“子”帖子ID插入“父”帖子到特定元数据元数据

以下是代码:

add_action(\'save_post\', array($this, \'save_post_type_example_meta_boxes\'));
function save_post_type_example_meta_boxes($post_id)
   ..........
  if (...) {
    $new_custom_post = array(
                \'post_title\'    => $title,
                \'post_content\'  => \'\',
                \'post_status\'   => \'publish\',
                \'post_author\'   => 1,
                \'post_type\'   => \'custom_post_type\',
                \'meta_input\'   => array(
                    \'meta_1\' => \'X\',
                    \'parent_post_id\' => ???
                  ),
    );
    wp_insert_post($new_custom_post );
  }
  update_post_meta($post_id, \'child_post_id\', ???);
  ......
  if(isset($_POST[\'meta_x_post\'])) {
        $meta_x = sanitize_text_field($_POST[\'meta_x_post\']);
        update_post_meta($post_id, \'meta_x\', $meta_x);
    }
...
}
这里可以是$post\\u id(因为它是父post的id)?

有没有关于如何获取子帖子ID的建议?

非常感谢。

1 个回复
最合适的回答,由SO网友:phatskat 整理而成

以下是您的代码的更新版本:

add_action(\'save_post\', array($this, \'save_post_type_example_meta_boxes\'));
function save_post_type_example_meta_boxes($post_id)
..........

    if (...) {
        $new_custom_post = array(
            \'post_title\'    => $title,
            \'post_content\'  => \'\',
            \'post_status\'   => \'publish\',
            \'post_author\'   => 1,
            \'post_type\'   => \'custom_post_type\',
            \'meta_input\'   => array(
                \'meta_1\' => \'X\',
                \'parent_post_id\' => $post_id,
            ),
        );

        // Prevent this action from running twice.
        remove_action( \'save_post\', [ $this, \'save_post_type_example_meta_boxes\' ] );
        $child_post_id = wp_insert_post( $new_custom_post );
        // Readd the action.
        add_action(\'save_post\', array($this, \'save_post_type_example_meta_boxes\'));
    }

    update_post_meta($post_id, \'child_post_id\', $child_post_id);
    ......
    if(isset($_POST[\'meta_x_post\'])) {
        $meta_x = sanitize_text_field($_POST[\'meta_x_post\']);
        update_post_meta($post_id, \'meta_x\', $meta_x);
    }
...
}
以下是我所改变的:

传入post ID到save_post_type_example_meta_boxes 应该是您想用作“家长”帖子ID的内容。

  • 您应该暂时删除挂钩save_post 这样它就不会一次又一次地执行该操作wp_insert_post 成功时返回一个帖子ID,这样就可以得到“child”帖子ID。
  • 结束