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'));
}
しかし、このアプローチを使用すると、管理ページを更新するたびに関数が呼び出され、データも複製されます。
データの重複を防ぐにはどうすればよいですか? また、これを行う最善の方法は何ですか?