Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save ellefsen/ef5dba591197436796ab6bca9d04585b to your computer and use it in GitHub Desktop.
Save ellefsen/ef5dba591197436796ab6bca9d04585b to your computer and use it in GitHub Desktop.

Revisions

  1. @tomazzaman tomazzaman created this gist Mar 31, 2015.
    101 changes: 101 additions & 0 deletions class-developer-import.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,101 @@
    <?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();