私はサードパーティのjsonフィードを持っています http://feeds.artlogic.net/artworks/artlogiconline/json/ 私は "アートワーク"と呼ばれるカスタム投稿タイプとしてワードプレスでデータをインポートするために使用する必要があります。
このデータをマッピングできる便利なプラグインがありますか。あるいは、これをコーディングしやすくするための便利なAPIがあります。私はワードプレス開発が一番新しいです。
あなたがD.I.Y.が欲しいならルート...
この例の投稿タイプは 'post'に設定されていますが、変更する場所を確認できます。これは、データ(この例では最初のページ)を取得し、応答を解析し、クリーンな(er)データのクラスを作成し、そのデータから投稿を生成し、特定の属性の投稿メタを更新する実用的な例です。
何が通話をトリガーするのかを調整したいと思うでしょうが、フロントエンドを打ったときに5つの投稿が作成されます。彼らはタイトルが生成される前にスラグと同様に既に存在していないことをチェックし、確認するでしょう。
内容はartwork_htmlから設定されています+そこにimgのURLを追加しました。 media_sideload_image
を使ってデータベースにその画像を取得したいでしょう。
<?php
if (!class_exists('RemoteArtwork')) :
class RemoteArtwork
{
// original data
public $raw;
// public items
public $title;
public $artwork_html;
public $id;
public function __construct($dirty_data)
{
$this->parse_data($dirty_data);
}
/**
* Clean the data, never expect good data
*/
private function sanitize_remote_data($data_as_array)
{
foreach ($data_as_array as $inx => $data) {
$data_as_array [$inx] = sanitize_text_field($data);
}
return $data_as_array;
}
/**
* Take the dirty data, clean it, then set our properties
*/
private function parse_data($dirty_data_as_array)
{
$clean_data = $this->sanitize_remote_data($dirty_data_as_array);
// save the raw data (cleaned)
$this->raw = $clean_data;
// grab the values we need
$this->title = $this->raw ['_title'];
$this->artwork_html = $this->raw ['artwork_html'];
$this->id = $this->raw ['id'];
}
/**
* Update a post with the latest meta data
*/
public function update_artwork_post_meta($post_id)
{
$meta_values_to_set = array (
'__artwork_dimensions' => $this->raw['dimensions'],
);
foreach($meta_values_to_set as $key => $meta_value){
$success = $this->update_meta($post_id, $key, $meta_value );
}
}
public function update_meta ( $post_id, $key, $meta_value ){
if ( isset( $meta_value ) && 0 < strlen( trim( $meta_value ) ) ) {
return update_post_meta ( $post_id, $key, $meta_value );
}
return false;
}
public function get_meta ( $post_id, $key ){
$meta_value = get_post_meta( $post_id, $key, true );
return empty( $value ) ? null : $meta_value;
}
} // RemoteArtwork
endif; // RemoteArtwork
if (!class_exists('RemoteArtworks')) :
class RemoteArtworks
{
/** data from url */
public static $remote_data;
/** parsed data -- use these instances for stuffs */
public static $artworks;
/**
* Pull the main feed & extra pages
*/
private static function GetRemoteArtworks($url)
{
// remote data
$response = wp_remote_get($url);
if (is_wp_error($response) || !isset($response['body'])) return; // bad response
// the good stuff
$body = wp_remote_retrieve_body($response);
if (is_wp_error($body)) return; // bad body
// decode the data
$data = json_decode($body, true);
if (!$data || empty($data)) return; // bad data
// make sure there isn't anymore
if (isset($data['page']) && isset($data['no_of_pages'])) {
$page = $data['page'];
$pages = $data['no_of_pages'];
$next_page_link = $data['next_page_link'];
if ($page !== $pages) {
// keep loading data from $next_page_link.....
}
}
// final remote data
return $data;
}
/**
* Load the remote feed and parse the data
*/
public static function LoadRemoteArtworks($to_create_posts)
{
self::$remote_data = self::GetRemoteArtworks('http://feeds.artlogic.net/artworks/artlogiconline/json/');
if (!isset(self::$remote_data ['rows'])) return; // no rows --- booo!
$works = array();
foreach (self::$remote_data ['rows'] as $inx => $remote_item_data) {
// create artwork instance
$artwork = new RemoteArtwork($remote_item_data);
$works[] = $artwork;
}
// set our local data that has been cleaned and parsed
self::$artworks = $works;
// let's make new POSTS!!!
if ($to_create_posts) {
$count = 0;
foreach (self::$artworks as $inx => $artwork) {
$count++; // for demo ---- let's not go overboard here
$post_id = self::CreateLocalArtworkPost($artwork);
if ($post_id == -1) {
// Nothing happened
} else if ($post_id == -2) {
// already exists
// ... I guess we could update a post's data here...
} else {
// new post was created, let's update it's meta
$success = $artwork->update_artwork_post_meta($post_id);
}
///////////////////////////////////////////////////
///////////////////////////////////////////////////
if ($count >= 5) return self::$remote_data; ///////
///////////////////////////////////////////////////
/////////////////// FOR DEMO... DON'T DO EVERY POST
///////////////////////////////////////////////////
////////////////////////////////// BUT YOU COULD...
///////////////////////////////////////////////////
///////////////////////////////////////////////////
}
}
// return the remote data... for whatever reason outsite of this class
return self::$remote_data;
}
public static function CreateLocalArtworkPost($artwork)
{
if (!$artwork) return -1;
///////////////////////////////////////////////////
///////////////////////////////////////////////////
// DEBUG
// echo '<pre>';
// print_r( $artwork );
// echo '</pre>';
///////////////////////////////////////////////////
///////////////////////////////////////////////////
// do post creation from $artwork data that has been sanitized
$template = ''; // add a custom template if you want
$post_type = 'post';
$img_url = $artwork->raw['img_url'];
$artwork_html = $artwork->artwork_html;
$content = "<p>${artwork_html}</p>\n\r<br />\r\n<a target=\"_blank\" href=\"${img_url}\"><img width=\"100%\" height=\"auto\" src=\"${img_url}\"></a>";
$new_post_id = self::CreateNewArtworkPost($post_type, $artwork->title, $content, $template, $artwork);
return $new_post_id;
}
/**
* orginal from - https://tommcfarlin.com/programmatically-create-a-post-in-wordpress/
*/
public static function CreateNewArtworkPost($post_type = 'post', $title, $content, $template_rel_path = '', $data)
{
// Initialize the page ID to -1. This indicates no action has been taken.
$post_id = -1;
if (!current_user_can('publish_posts')) {
// sorry...
return $post_id;
}
// Prep
$author_id = get_current_user_id();
if (!$author_id) {
return $post_id;
}
$title = sanitize_text_field(wp_strip_all_tags($title)); // remove any junk
$title = esc_html(wp_unslash($title));
$slug = sanitize_title_with_dashes($title); // converts to a usable post_name
$post_type = post_type_exists($post_type) ? $post_type : 'post'; // make sure it exists
// If the page doesn't already exist, then create it (by title & slug)
if (null == get_page_by_title($title) && empty(get_posts(array('name' => $slug)))) {
// Set the post ID so that we know the post was created successfully
$post_id = wp_insert_post(
array(
'post_name' => $slug,
'post_title' => $title,
'post_content' => $content,
'post_type' => $post_type,
'post_author' => $author_id,
'comment_status' => 'closed',
'ping_status' => 'closed',
'post_status' => 'publish',
)
);
if ($post_id && $post_id > 0 && !empty($template_rel_path)) {
// make sure the template exists
$template_full_path = trailingslashit(get_stylesheet_directory()) . $template_rel_path;
if (file_exists($template_full_path)) {
// set the post meta data -- use relative path
update_post_meta($post_id, '_wp_page_template', $template_rel_path);
}
} // end template check
// Otherwise, we'll stop
} else {
// Arbitrarily use -2 to indicate that the page with the title already exists
$post_id = -2;
} // end if
return $post_id;
} // end programmatically_create_post
}// RemoteArtworks
endif; // RemoteArtworks
それからリモートフェッチと作成を開始します
add_action ( 'init', function(){
// break time in the demo... run on the front and watch the posts pile up
if( is_admin() ) return;
// Create posts from remote data?
$to_create_posts = true;
// Load the feed
$data = RemoteArtworks::LoadRemoteArtworks( $to_create_posts );
});
参照
類似