<?php // Published under GPL // tutorial here: https://codeable.io/community/how-to-import-json-into-wordpress/ class Developer_Import { public function __construct() { add_action( 'wp_ajax_import_developer', array( $this, 'import_developer' ) ); add_action( 'wp_ajax_nopriv_import_developer', array( $this, 'import_developer' ) ); } public function import_developer() { $developer_data = json_decode( file_get_contents( 'php://input' ) ); if ( $this->compare_keys() ) { $this->insert_or_update($developer_data); } wp_die(); } private function insert_or_update($developer_data) { if ( ! $developer_data) return false; // We search by the custom field 'developer_id' which stores the id of the // object that is stored in the external service $args = array( 'meta_query' => array( array( 'key' => 'developer_id', 'value' => $developer_data->id ) ), 'post_type' => 'developer', 'post_status' => array('publish', 'pending', 'draft', 'auto-draft', 'future', 'private', 'inherit'), 'posts_per_page' => 1 ); $developer = get_posts( $args ); $developer_id = ''; if ( $developer ) $developer_id = $developer[0]->ID; $developer_post = array( 'ID' => $developer_id, 'post_title' => $developer_data->full_name, 'post_content' => $developer_data->bio, 'post_type' => 'developer', // If developer exists then it reuses its post status 'post_status' => ( $developer ) ? $developer[0]->post_status : 'publish' ); $developer_id = wp_insert_post( $developer_post ); if ( $developer_id ) { update_post_meta( $developer_id, 'developer_id', $developer_data->id ); update_post_meta( $developer_id, 'json', addslashes( file_get_contents( 'php://input' ) ) ); // Remove if you don't need to import tags and make sure // the tag name is correct if you do wp_set_object_terms( $developer_id, $developer_data->tags, 'developer_tag' ); $this->generate_background_images( $developer_data->full_name, $developer_data->avatar->large_url ); } print_r( $developer_id ); } private function compare_keys() { // Signature should be in a form of algorihm=hash // for example: X-Codeable-Signature: sha1=246d2e58593645b1f261b1bbc867fe2a9fc1a682 if ( ! isset( $_SERVER['HTTP_X_CODEABLE_SIGNATURE'] ) ) { throw new \Exception( "HTTP header 'X-Codeable-Signature' is missing." ); } list( $algo, $hash ) = explode( '=', $_SERVER['HTTP_X_CODEABLE_SIGNATURE'], 2 ) + array( '', '' ); $raw_post = file_get_contents( 'php://input' ); // Don't forget to define your key! if ( $hash !== hash_hmac( $algo, $raw_post, CODEABLE_KEY ) ) { throw new \Exception( 'Secret hash does not match.' ); } return true; } } new Developer_Import();