0

API からデータを取得するためのプラグインを作成しました。カスタム投稿タイプを作成し、API から取得したデータを投稿に含めました。プラグインの私のコードは以下の通りです

<?php
/**
 * Plugin Name: Experts
 * Plugin URI: https://****.**
 * Description: Wordpress plugin for experts.
 * Version: 1.0
 * Author: My name
 * Author URI: https://****.**
 */

if (!defined('ABSPATH'))
{
    die;
}

class ExpertsPlugin 
{
    function __construct()
    {
        add_action('init',array($this, 'custom_post_type'));
    }

    function expert_activate()
    {
        $this->custom_post_type();
        flush_rewrite_rules();
        $this-> get_experts_from_api();
    }

    function expert_deactivate()
    {   
        flush_rewrite_rules();   
    }

    function expert_uninstall()
    {

    }

    function custom_post_type()
    {
        register_post_type('expert',['public' => true, 'label' => 'Experts', 'capability_type' => 'post']);
    }

    function get_experts_from_api()
    {
        $experts = [];
        $results = wp_remote_retrieve_body(wp_remote_get('https://api.****.**/v1/users/profiles?get=10'));
        $results = json_decode($results);
        $experts[] = $results;
        foreach($experts[0] as $expert)
        {
            foreach($expert as $profile)
         {
            $expert_slug = sanitize_title($profile->userId);

            $inserted_expert = wp_insert_post([
                'post_name' => $expert_slug,
                'post_title' => $expert_slug,
                'post_type' => 'expert',
                'post_status' => 'publish'
            ]);

            if(is_wp_error($inserted_expert))
            {
                continue;
            }
         }
        }

    }

}

if(class_exists('ExpertsPlugin '))
{
    $expertsPlugin = new ExpertsPlugin ();
}

//activation
register_activation_hook(__FILE__,array($expertsPlugin , 'expert_activate'));

//deactivation
register_deactivation_hook(__FILE__,array($expertsPlugin , 'expert_deactivate'));

//uninstall
register_uninstall_hook(__FILE__,array($expertsPlugin , 'expert_uninstall'));

このプラグインは正しく動作します。私の問題はget_experts_from_api()、プラグインを有効にするときにのみ呼び出しているためです。API のデータが更新されると、新しい値を取得できません。どうすればその問題を解決できますか。

私が試したことの1つは、このようにコンストラクターで関数を呼び出すことです

function __construct()
{
    add_action('init',array($this, 'custom_post_type'));
    add_action('init',array($this, 'get_experts_from_api'));
}

しかし、このアプローチを使用すると、管理ページを更新するたびに関数が呼び出され、データも複製されます。

データの重複を防ぐにはどうすればよいですか? また、これを行う最善の方法は何ですか?

4

1 に答える 1