Forked from tomazzaman/class-developer-import.php
Last active
August 29, 2015 14:21
-
-
Save lori/aafb65002720eb5a3fd3 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment