Skip to content

Instantly share code, notes, and snippets.

@ocean90
Created January 8, 2012 23:28
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ocean90/1580098 to your computer and use it in GitHub Desktop.
Save ocean90/1580098 to your computer and use it in GitHub Desktop.
Gist to WordPress
/**
* Hook into the backend and load scripts and
* init metabox.
*/
function ds_gist2wordpress_admin() {
add_action( 'wp_ajax_gist', 'ds_gistify' );
add_action( 'admin_print_scripts-post.php', 'ds_gist_js' );
add_action( 'admin_print_scripts-post-new.php', 'ds_gist_js' );
wp_register_script(
'gist-js',
get_bloginfo( 'template_url' ) . "/gist.js",
array( 'jquery' ),
0.1,
true
);
add_meta_box(
'ds_gist',
'Gist',
'ds_gist_metabox_cb',
'post'
);
}
add_action( 'admin_init', 'ds_gist2wordpress_admin' );
/*
* Hook into the frontend and load scripts.
*/
function ds_gist2wordpress() {
wp_register_style(
'gist-css',
'https://gist.github.com/stylesheets/gist/embed.css'
);
add_filter( 'the_content', 'ds_convert_to_gist', 99 );
}
add_action( 'init', 'ds_gist2wordpress' );
/*
* Helper for enqeueing script
*/
function ds_gist_js() {
wp_enqueue_script( 'gist-js' );
}
/*
* Add a metabox the post edit screen with an input field for the gist ID
* and show the file list.
*/
function ds_gist_metabox_cb( $data ) {
wp_nonce_field( 'ds_gist', 'ds-gist-nonce' );
$gist_id = get_post_meta( $data->ID, '_gist_id', true ) ;
$gist_id = ! empty( $gist_id ) ? $gist_id : '';
$gist_data = get_post_meta( $data->ID, '_gist_data', true );
$gist_data = ! empty( $gist_data ) ? $gist_data : array();
$files = '';
if ( ! empty( $gist_data ) ) {
foreach ( $gist_data as $file => $data )
$files .= '<li><code>{' . $file . '}</code></li>';
}
?>
<p>
<label>Gist ID: <input type="text" class="small-text" style="width: 180px;" name="gist-id" id="gist-id" value="<?php echo esc_attr( $gist_id ); ?>" /></label>
<input type="button" value="Fetch" id="gist-update" class="button" />
<img src="<?php echo esc_url( admin_url( 'images/wpspin_light.gif' ) ); ?>" class="ajax-loading" id="gist-ajax-loading" alt="" />
</p>
<ul id="gist-files">
<?php echo $files;?>
</ul>
<?php
}
/*
* Replace {Filename} with associated snippet from the
* custom fields.
*/
function ds_gistify() {
$post_id = intval( $_POST['post_id'] );
$gist_id = sanitize_key( $_POST['gist_id'] );
if ( empty( $post_id ) || empty( $gist_id ) )
die( json_encode( array(
'id' => $gist_id,
'error' => 'Empty Post ID or Gist ID.'
) ) );
check_ajax_referer( 'ds_gist' );
$gist_body = wp_remote_retrieve_body(
wp_remote_get(
$gist_url = sprintf( "https://gist.github.com/%s.json", $gist_id )
)
);
$gist_body = json_decode( $gist_body );
if ( empty( $gist_body ) )
die( json_encode( array(
'id' => $gist_id,
'error' => 'Empty Body'
) ) );
if ( ! empty( $gist_body->error ) ) {
die( json_encode( array(
'id' => $gist_id,
'error' => $gist_body->error
) ) );
}
update_post_meta( $post_id, '_gist_id', $gist_id );
$gist_files = $gist_body->files;
preg_match_all( '/<pre>(.+?)<\/pre>/is', $gist_body->div, $gist_divs );
$gist_divs = $gist_divs[0];
foreach ( $gist_files as $i => $gist_file )
$gist_data[ $gist_file ] = '<div class="gist-syntax">' . $gist_divs[$i] . '</div>';
foreach ( $gist_data as $file => $gist_item ) {
$gist_new_meta = sprintf(
'<div><p class="gist-meta"><a class="gist-raw" href="%s">RAW</a> · <a class="gist-download" href="%s">Download</a> · <a class="gist-github" href="%s">Gist@GitHub</a></p></div>',
esc_url( "https://gist.github.com/raw/{$gist_id}/{$file}" ),
esc_url( "https://gist.github.com/gists/{$gist_id}/download"),
esc_url( "https://gist.github.com/{$gist_id}")
);
$gist_data[ $file ] .= $gist_new_meta;
}
update_post_meta( $post_id, '_gist_data', $gist_data );
die( json_encode( array(
'id' => $gist_id,
'files' => $gist_files
) ) );
}
/*
* AJAX callback function which handles the API response. Saves the data
* into custom fields
*/
function ds_convert_to_gist( $content ) {
$gist_data = get_post_meta( get_the_ID(), '_gist_data', true );
if ( empty( $gist_data ) )
return $content;
wp_enqueue_style('gist-css');
foreach ( $gist_data as $file => $file_data ) {
$files[] = '/{' . $file . '}/';
$data[] = $file_data;
}
$content = preg_replace(
$files,
$data,
$content
);
return $content;
}
// Handle AJAX call
( function( $ ) {
$( '#gist-update' ).click( function( e ) {
e.preventDefault();
$( '#gist-ajax-loading' ).css( 'visibility', 'visible' );
data = {
'action' : 'gist',
'_ajax_nonce' : $('#ds-gist-nonce').val(),
'post_id' : $('#post_ID').val(),
'gist_id' : $('#gist-id').val()
};
$.post( ajaxurl, data,
function( res ) {
res = $.parseJSON( res );
if ( res.error ) {
$( '#gist-ajax-loading' ).css( 'visibility', 'hidden' );
alert( 'Gist ID "' + res.id + '": ' + res.error );
return;
}
if ( res.files ) {
$( '#gist-files' ).empty();
$.each( res.files, function( key, val ) {
$( '#gist-files' ).append( '<li><code>{' + val + '}</code></li>' );
});
$( '#gist-ajax-loading' ).css( 'visibility', 'hidden' );
}
}
)
});
} )( jQuery );
<?php
/*
* AJAX callback function which handles the API response. Saves the data
* into custom fields
*/
function ds_convert_to_gist( $content ) {
$gist_data = get_post_meta( get_the_ID(), '_gist_data', true );
if ( empty( $gist_data ) )
return $content;
wp_enqueue_style('gist-css');
foreach ( $gist_data as $file => $file_data ) {
$files[] = '/{' . $file . '}/';
$data[] = $file_data;
}
$content = preg_replace(
$files,
$data,
$content
);
return $content;
}
<?php
/*
* Hook into the backend and load scripts and
* init metabox.
*/
function ds_gist2wordpress_admin() {
add_action( 'wp_ajax_gist', 'ds_gistify' );
add_action( 'admin_print_scripts-post.php', 'ds_gist_js' );
add_action( 'admin_print_scripts-post-new.php', 'ds_gist_js' );
wp_register_script(
'gist-js',
get_bloginfo( 'template_url' ) . "/gist.js", // Path, needs some update from you
array( 'jquery' ),
0.1,
true
);
add_meta_box(
'ds_gist',
'Gist',
'ds_gist_metabox_cb',
'post'
);
}
add_action( 'admin_init', 'ds_gist2wordpress_admin' );
/*
* Hook into the frontend and load scripts.
*/
function ds_gist2wordpress() {
wp_register_style(
'gist-css',
'https://gist.github.com/stylesheets/gist/embed.css'
);
add_filter( 'the_content', 'ds_convert_to_gist', 99 );
}
add_action( 'init', 'ds_gist2wordpress' );
function ds_gist_js() {
wp_enqueue_script( 'gist-js' );
}
<?php
/*
* Add a metabox the post edit screen with an input field for the gist ID
* and show the file list.
*/
function ds_gist_metabox_cb( $data ) {
wp_nonce_field( 'ds_gist', 'ds-gist-nonce' );
$gist_id = get_post_meta( $data->ID, '_gist_id', true ) ;
$gist_id = ! empty( $gist_id ) ? $gist_id : '';
$gist_data = get_post_meta( $data->ID, '_gist_data', true );
$gist_data = ! empty( $gist_data ) ? $gist_data : array();
$files = '';
if ( ! empty( $gist_data ) ) {
foreach ( $gist_data as $file => $data )
$files .= '<li><code>{' . $file . '}</code></li>';
}
?>
<p>
<label>Gist ID: <input type="text" class="small-text" style="width: 180px;" name="gist-id" id="gist-id" value="<?php echo esc_attr( $gist_id ); ?>" /></label>
<input type="button" value="Fetch" id="gist-update" class="button" />
<img src="<?php echo esc_url( admin_url( 'images/wpspin_light.gif' ) ); ?>" class="ajax-loading" id="gist-ajax-loading" alt="" />
</p>
<ul id="gist-files">
<?php echo $files;?>
</ul>
<?php
}
<?php
/*
* Replace {Filename} with associated snippet from the
* custom fields.
*/
function ds_gistify() {
$post_id = intval( $_POST['post_id'] );
$gist_id = sanitize_key( $_POST['gist_id'] );
if ( empty( $post_id ) || empty( $gist_id ) )
die( json_encode( array(
'id' => $gist_id,
'error' => 'Empty Post ID or Gist ID.'
) ) );
check_ajax_referer( 'ds_gist' );
$gist_body = wp_remote_retrieve_body(
wp_remote_get(
$gist_url = sprintf( "https://gist.github.com/%s.json", $gist_id )
)
);
$gist_body = json_decode( $gist_body );
if ( empty( $gist_body ) )
die( json_encode( array(
'id' => $gist_id,
'error' => 'Empty Body'
) ) );
if ( ! empty( $gist_body->error ) ) {
die( json_encode( array(
'id' => $gist_id,
'error' => $gist_body->error
) ) );
}
update_post_meta( $post_id, '_gist_id', $gist_id );
$gist_files = $gist_body->files;
preg_match_all( '/<pre>(.+?)<\/pre>/is', $gist_body->div, $gist_divs );
$gist_divs = $gist_divs[0];
foreach ( $gist_files as $i => $gist_file )
$gist_data[ $gist_file ] = '<div class="gist-syntax">' . $gist_divs[$i] . '</div>';
foreach ( $gist_data as $file => $gist_item ) {
$gist_new_meta = sprintf(
'<div><p class="gist-meta"><a class="gist-raw" href="%s">RAW</a> · <a class="gist-download" href="%s">Download</a> · <a class="gist-github" href="%s">Gist@GitHub</a></p></div>',
esc_url( "https://gist.github.com/raw/{$gist_id}/{$file}" ),
esc_url( "https://gist.github.com/gists/{$gist_id}/download"),
esc_url( "https://gist.github.com/{$gist_id}")
);
$gist_data[ $file ] .= $gist_new_meta;
}
update_post_meta( $post_id, '_gist_data', $gist_data );
die( json_encode( array(
'id' => $gist_id,
'files' => $gist_files
) ) );
}
@chrismccoy
Copy link

havent got this to work yet with 3.5.2

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment