Post 插件ID

Post ID into plugin

我有一个小插件可以更新 posts 中的 acf 字段。在每个 post 中,有许多字段需要使用从 API 接收到的数据进行更新。在下面的代码中,我首先演示了从一个 api 我得到了我需要的代码,然后使用 foreach 我得到了每个 post 的数据。现在我需要更新字段。我已将所有 acf 键收集到一个数组中,我想使用 switch 来更新字段。但是,我 运行 遇到了一个问题,我无法在插件中获取 post id。正确的做法是什么?

plugin.php

add_action('admin_menu', 'cr_api_tools_api');

function cr_api_tools_api() {
    add_menu_page( 'CP API Tools', 'CP API', 'manage_options', 'cr-api-tools-plugin', 'cr_api_tools_init');
    function cr_api_tools_view() {
        wp_register_style('cr-api-tools-view', plugins_url('/view/cr-api-tools-view.css',__FILE__ ), array(), time());
        wp_enqueue_style('cr-api-tools-view');
    }
    add_action( 'admin_init','cr_api_tools_view');
}

function cr_api_tools_init () { ?>

    <div class="container">
        <form method="post" class="cr-api-tools">
            <h1>CP API TOOLS</h1>
            <input type="submit" name="enable" class="enable" value="Enable">
        </div>

        <?php 
        if( isset( $_POST['enable'] ) ) {


            global $post;
            $postID = $post->ID;

        // JOB API
            $url='api/url';
            $result     = file_get_contents( $url );
            $result_data = json_decode( $result );

            foreach ($result_data as  $job) {

                $ref_code = $job->RefCode;
                $post_title = $job->JobTitle;



                $post_id    = post_exists( $post_title );

                if( !$post_id ){
                    $data = array(
                        'post_type'   => 'post',
                        'post_title'  => $post_title,
                        'post_status' => 'publish',
                        'post_author' => $user_ID,
                    );
                    $post_id = wp_insert_post( $data );
                }
                
            // Job DATA API
                $job_api_url ='api/url' . $ref_code;
                $job_api_result = file_get_contents( $job_api_url );
                $result_api_data = json_decode( $job_api_result );


                $acf_keys = [ 
                    'location', 
                    'job_intro', 
                    'job_offer'
                ];                      

                if(is_array($acf_keys)) {
                    foreach ($acf_keys as $value) {
                        switch ($value) {
                            case 'location':
                            update_field( $value, $job->Region, $postID );
                            break;
                            case 'job_intro':
                            update_field( $value, $job->JobTitle, $postID );
                            break;
                            case 'job_offer':
                            update_field( $value, $job->Description, $postID );
                            break;
                            default:
                            break;
                        }
                    }

                }
            }

        }

        ?>



    </form>     
</div>

<?php } ?>

您不想在此处获得特定的全局 post ID - 您所处的上下文不适合开始(例如特定 [=24= 的前端视图) ], 或后端的编辑视图。)

            $post_id    = post_exists( $post_title );

            if( !$post_id ){
                // ...
                $post_id = wp_insert_post( $data );
            }

在这里,您将获得已经存在的 post 的 ID。新创建的那个。

这就是您以后要使用的 ID,以更新该特定 post 的其他元数据。这些

update_field( $value, $job->Region, $postID );

来电需要变成

update_field( $value, $job->Region, $post_id );

并且以下内容可以完全删除,在这种情况下不是必需的或无用的:

        global $post;
        $postID = $post->ID;