-
-
Save tollmanz/2864688 to your computer and use it in GitHub Desktop.
| .gist { | |
| color: #e4322e; | |
| } | |
| .gistdiv { | |
| padding: 0; | |
| margin: 0; | |
| } | |
| .gist .gist-file { | |
| border: none; | |
| font-family: 'Inconsolata', "Bitstream Vera Sans Mono", monospace; | |
| margin-bottom: 1em; | |
| } | |
| .gist .gist-file .gist-meta { | |
| overflow: hidden; | |
| font-size: 14px; | |
| font-weight: 300; | |
| padding: .5em; | |
| color: #666; | |
| font-family: 'Open Sans', sans-serif; | |
| background-color: transparent; | |
| } | |
| .gist .gist-file .gist-meta a { | |
| color: #2FC2EF; | |
| } | |
| .gist .gist-file .gist-meta a:visited { | |
| color: #2FC2EF; | |
| } | |
| .gist .gist-file .gist-data { | |
| overflow: auto; | |
| word-wrap: normal; | |
| background-color: #F8F8F8; | |
| border-top: 1px solid #DDD; | |
| border-bottom: 1px solid #DDD; | |
| font-size: 100%; | |
| } | |
| .gist .gist-file .gist-data pre { | |
| font-family: 'Inconsolata', 'Bitstream Vera Sans Mono', 'Courier', monospace; | |
| background: transparent !important; | |
| margin: 0 !important; | |
| border: none !important; | |
| padding: .25em .5em .5em .5em !important; | |
| } | |
| .gist .gist-file .gist-data .gist-highlight { | |
| background: transparent !important; | |
| } | |
| .gist .gist-file .gist-data .gist-line-numbers { | |
| background-color: #ececec; | |
| color: #aaa; | |
| border-right: 1px solid #ddd; | |
| text-align: right; | |
| } | |
| .gist .gist-file .gist-data .gist-line-numbers span { | |
| clear: right; | |
| display: block; | |
| } | |
| .gist-syntax { | |
| background: #ffffff; | |
| } | |
| .gist-syntax .c { | |
| color: #999988; | |
| font-style: italic | |
| } | |
| /* Comment */ | |
| .gist-syntax .err { | |
| color: #a61717; | |
| background-color: #e3d2d2 | |
| } | |
| /* Error */ | |
| .gist-syntax .k { | |
| color: #a79d00; | |
| font-weight: normal | |
| } | |
| /* Keyword */ | |
| .gist-syntax .o { | |
| color: #849a22; | |
| font-weight: bold | |
| } | |
| /* Operator */ | |
| .gist-syntax .cm { | |
| color: #999988; | |
| font-style: italic | |
| } | |
| /* Comment.Multiline */ | |
| .gist-syntax .cp { | |
| color: #dc322f; | |
| font-weight: normal | |
| } | |
| /* Comment.Preproc */ | |
| .gist-syntax .c1 { | |
| color: #999988; | |
| font-style: italic | |
| } | |
| /* Comment.Single */ | |
| .gist-syntax .cs { | |
| color: #999999; | |
| font-weight: bold; | |
| font-style: italic | |
| } | |
| /* Comment.Special */ | |
| .gist-syntax .gd { | |
| color: #000000; | |
| background-color: #ffdddd | |
| } | |
| /* Generic.Deleted */ | |
| .gist-syntax .gd .x { | |
| color: #000000; | |
| background-color: #ffaaaa | |
| } | |
| /* Generic.Deleted.Specific */ | |
| .gist-syntax .ge { | |
| color: #000000; | |
| font-style: italic | |
| } | |
| /* Generic.Emph */ | |
| .gist-syntax .gr { | |
| color: #aa0000 | |
| } | |
| /* Generic.Error */ | |
| .gist-syntax .gh { | |
| color: #999999; | |
| } | |
| /* Generic.Heading */ | |
| .gist-syntax .gi { | |
| color: #000000; | |
| background-color: #ddffdd | |
| } | |
| /* Generic.Inserted */ | |
| .gist-syntax .gi .x { | |
| color: #000000; | |
| background-color: #aaffaa; | |
| } | |
| /* Generic.Inserted.Specific */ | |
| .gist-syntax .go { | |
| color: #888888; | |
| } | |
| /* Generic.Output */ | |
| .gist-syntax .gp { | |
| color: #555555; | |
| } | |
| /* Generic.Prompt */ | |
| .gist-syntax .gs { | |
| font-weight: bold | |
| } | |
| /* Generic.Strong */ | |
| .gist-syntax .gu { | |
| color: #aaaaaa; | |
| } | |
| /* Generic.Subheading */ | |
| .gist-syntax .gt { | |
| color: #aa0000; | |
| } | |
| /* Generic.Traceback */ | |
| .gist-syntax .kc { | |
| color: #000000; | |
| font-weight: bold | |
| } | |
| /* Keyword.Constant */ | |
| .gist-syntax .kd { | |
| color: #000000; | |
| font-weight: bold | |
| } | |
| /* Keyword.Declaration */ | |
| .gist-syntax .kp { | |
| color: #000000; | |
| font-weight: bold | |
| } | |
| /* Keyword.Pseudo */ | |
| .gist-syntax .kr { | |
| color: #000000; | |
| font-weight: bold | |
| } | |
| /* Keyword.Reserved */ | |
| .gist-syntax .kt { | |
| color: #445588; | |
| font-weight: bold | |
| } | |
| /* Keyword.Type */ | |
| .gist-syntax .m { | |
| color: #009999 | |
| } | |
| /* Literal.Number */ | |
| .gist-syntax .s { | |
| color: #d14 | |
| } | |
| /* Literal.String */ | |
| .gist-syntax .na { | |
| color: #657b83 | |
| } | |
| /* Name.Attribute */ | |
| .gist-syntax .nb { | |
| color: #0086B3 | |
| } | |
| /* Name.Builtin */ | |
| .gist-syntax .nc { | |
| color: #445588; | |
| font-weight: bold | |
| } | |
| /* Name.Class */ | |
| .gist-syntax .no { | |
| color: #008080 | |
| } | |
| /* Name.Constant */ | |
| .gist-syntax .ni { | |
| color: #800080 | |
| } | |
| /* Name.Entity */ | |
| .gist-syntax .ne { | |
| color: #990000; | |
| font-weight: bold | |
| } | |
| /* Name.Exception */ | |
| .gist-syntax .nf { | |
| color: #657b83; | |
| font-weight: normal | |
| } | |
| /* Name.Function */ | |
| .gist-syntax .nn { | |
| color: #555555 | |
| } | |
| /* Name.Namespace */ | |
| .gist-syntax .nt { | |
| color: #000080 | |
| } | |
| /* Name.Tag */ | |
| .gist-syntax .nv { | |
| color: #258ad1 | |
| } | |
| /* Name.Variable */ | |
| .gist-syntax .ow { | |
| color: #000000; | |
| font-weight: bold | |
| } | |
| /* Operator.Word */ | |
| .gist-syntax .w { | |
| color: #bbbbbb | |
| } | |
| /* Text.Whitespace */ | |
| .gist-syntax .mf { | |
| color: #009999 | |
| } | |
| /* Literal.Number.Float */ | |
| .gist-syntax .mh { | |
| color: #009999 | |
| } | |
| /* Literal.Number.Hex */ | |
| .gist-syntax .mi { | |
| color: #4cc0cb | |
| } | |
| /* Literal.Number.Integer */ | |
| .gist-syntax .mo { | |
| color: #009999 | |
| } | |
| /* Literal.Number.Oct */ | |
| .gist-syntax .sb { | |
| color: #d14 | |
| } | |
| /* Literal.String.Backtick */ | |
| .gist-syntax .sc { | |
| color: #d14 | |
| } | |
| /* Literal.String.Char */ | |
| .gist-syntax .sd { | |
| color: #d14 | |
| } | |
| /* Literal.String.Doc */ | |
| .gist-syntax .s2 { | |
| color: #d14 | |
| } | |
| /* Literal.String.Double */ | |
| .gist-syntax .se { | |
| color: #d14 | |
| } | |
| /* Literal.String.Escape */ | |
| .gist-syntax .sh { | |
| color: #d14 | |
| } | |
| /* Literal.String.Heredoc */ | |
| .gist-syntax .si { | |
| color: #d14 | |
| } | |
| /* Literal.String.Interpol */ | |
| .gist-syntax .sx { | |
| color: #d14 | |
| } | |
| /* Literal.String.Other */ | |
| .gist-syntax .sr { | |
| color: #009926 | |
| } | |
| /* Literal.String.Regex */ | |
| .gist-syntax .s1 { | |
| color: #4cc0cb | |
| } | |
| /* Literal.String.Single */ | |
| .gist-syntax .ss { | |
| color: #990073 | |
| } | |
| /* Literal.String.Symbol */ | |
| .gist-syntax .bp { | |
| color: #999999 | |
| } | |
| /* Name.Builtin.Pseudo */ | |
| .gist-syntax .vc { | |
| color: #008080 | |
| } | |
| /* Name.Variable.Class */ | |
| .gist-syntax .vg { | |
| color: #008080 | |
| } | |
| /* Name.Variable.Global */ | |
| .gist-syntax .vi { | |
| color: #008080 | |
| } | |
| /* Name.Variable.Instance */ | |
| .gist-syntax .il { | |
| color: #009999 | |
| } | |
| /* Function call */ | |
| .gist-syntax .nx { | |
| color: #687b89; | |
| } | |
| /* HTML */ | |
| .gist-syntax .x { | |
| color: #258bd2; | |
| } |
| <?php | |
| /** | |
| * Namespacing for Pretty Cacheable Gists. | |
| * | |
| * Pretty Cacheable Gists caches gists locally and adds a nice stylesheet to make them prettier. | |
| * The Gist embed is detected on save and added as a post of type "cgist". When the post is rendered, | |
| * rather than show embed the Gist via Javascript, it is loaded from the cgist post's meta data. This | |
| * allows for quicker rendering and easy caching. | |
| */ | |
| class cgistPrettyCacheableGists { | |
| /** | |
| * Key for the cache incrementor. | |
| * | |
| * @var string | |
| */ | |
| private $_incrementor_key = 'ztol-gist-incrementor'; | |
| /** | |
| * Key for the transient that holds the queued Gist IDs. | |
| * | |
| * @var string | |
| */ | |
| private $_queued_gist_ids_key = 'ztol-queued-gists'; | |
| /** | |
| * Queue the events. | |
| */ | |
| public function __construct() { | |
| add_action( 'init', array( $this, 'init_actions' ) ); | |
| add_action( 'save_post', array( $this, 'queue_gists' ), 99, 2 ); | |
| add_filter( 'the_content', array( $this, 'render_gist' ), 100 ); | |
| add_action( 'wp_print_styles', array( $this, 'wp_print_styles' ) ); | |
| } | |
| /** | |
| * Run functions on init. | |
| * | |
| * @return void | |
| */ | |
| public function init_actions() { | |
| $this->_register_post_type(); | |
| $this->_register_taxonomy(); | |
| add_action( 'ztol_create_gists', array( $this, 'create_gists' ) ); | |
| } | |
| /** | |
| * Register the CPT. | |
| * | |
| * @return void | |
| */ | |
| private function _register_post_type() { | |
| $args = array( | |
| 'labels' => array( | |
| 'name' => 'Gists', | |
| 'singular_name' => 'Gist', | |
| 'add_new' => 'Add New Gist', | |
| 'add_new_item' => 'Add New Gist', | |
| 'edit_item' => 'Edit Gist', | |
| 'new_item' => 'New Gist', | |
| 'all_items' => 'All Gists', | |
| 'view_item' => 'View Gist', | |
| 'search_items' => 'Search Gists', | |
| 'not_found' => 'No gists found', | |
| 'not_found_in_trash' => 'No gists found in Trash', | |
| 'parent_item_colon' => '', | |
| 'menu_name' => 'Gists' | |
| ), | |
| 'description' => 'Gists used in content throughout the site.', | |
| 'public' => true, | |
| 'publicly_queryable' => false, | |
| 'exclude_from_search' => true, | |
| 'rewrite' => false, | |
| 'query_var' => false, | |
| 'menu_position' => 5, | |
| 'can_export' => true, | |
| 'supports' => array( 'title' ), | |
| 'taxonomies' => array( 'cgist-language' ) | |
| ); | |
| register_post_type( 'cgist', $args ); | |
| } | |
| /** | |
| * Register the taxonomy. | |
| * | |
| * @return void | |
| */ | |
| private function _register_taxonomy() { | |
| register_taxonomy( | |
| 'cgist-language', | |
| array( | |
| 'cgist' | |
| ), | |
| array( | |
| 'hierarchical' => true, | |
| 'labels' => array( | |
| 'name' => 'Languages', | |
| 'singular_name' => 'Language', | |
| 'search_items' => 'Languages', | |
| 'all_items' => 'All Languages', | |
| 'parent_item' => 'Parent Language', | |
| 'parent_item_colon' => 'Parent Language:', | |
| 'edit_item' => 'Edit Language', | |
| 'update_item' => 'Update Language', | |
| 'add_new_item' => 'Add New Language', | |
| 'new_item_name' => 'New Language Name', | |
| 'menu_name' => 'Language', | |
| ), | |
| 'show_ui' => true, | |
| 'query_var' => true, | |
| 'rewrite' => array( | |
| 'slug' => 'genre' | |
| ), | |
| ) | |
| ); | |
| } | |
| /** | |
| * Get linked Gists and queue for gist creation. | |
| * | |
| * Examines post content for Gist link. If it is found, the ID is extracted and added | |
| * to a queue. An event is scheduled that will loop through the queue and process the | |
| * each ID into a post of cgist type. | |
| * | |
| * @param $post_id | |
| * @return void | |
| */ | |
| public function queue_gists( $post_id ) { | |
| if ( ! $post = get_post( $post_id ) ) | |
| return; | |
| if ( ! $gist_ids = $this->_extract_gist_id( $post->post_content ) ) | |
| return; | |
| $clean_gist_ids = array(); | |
| foreach ( $gist_ids as $id ) | |
| $clean_gist_ids[] = absint( $id ); | |
| $this->_add_gists_to_queue( $clean_gist_ids ); | |
| } | |
| /** | |
| * Add id(s) to the Gist queue and schedules even to process Gist IDs. | |
| * | |
| * @param $ids array|int | |
| */ | |
| private function _add_gists_to_queue( $ids ) { | |
| if ( ! is_array( $ids ) && ! absint( $ids ) ) | |
| return; | |
| if ( ! is_array( $ids ) ) | |
| $ids = (array) $ids; | |
| if ( empty( $ids ) ) | |
| return; | |
| $currently_queued_ids = get_transient( $this->_queued_gist_ids_key ); | |
| // Merge with previous values if present. Remove duplicates if they exist | |
| $ids_to_queue = false !== $currently_queued_ids ? array_unique( array_merge( $currently_queued_ids, $ids ) ) : $ids; | |
| if ( ! empty( $ids_to_queue ) ) | |
| set_transient( $this->_queued_gist_ids_key, $ids_to_queue ); | |
| if ( get_transient( $this->_queued_gist_ids_key ) && ! wp_next_scheduled( 'ztol_create_gists' ) ) | |
| wp_schedule_single_event( time(), 'ztol_create_gists' ); | |
| } | |
| /** | |
| * Extract the Gist URL and create a new post of cgist type. | |
| * | |
| * This function extracts a Gist URL from the post content, extracts the ID from that | |
| * URL, makes a request for that Gist, and finally adds the Gist as a new post. | |
| * | |
| * @return void | |
| */ | |
| public function create_gists() { | |
| $gist_ids = get_transient( $this->_queued_gist_ids_key ); | |
| if ( false == $gist_ids ) | |
| return; | |
| $posts = array(); | |
| // Foreach Gist ID, get the Gist information | |
| foreach ( $gist_ids as $id ) { | |
| // Verify that it doesn't already exist | |
| if ( ! $this->_get_gist( $id ) ) { | |
| // Get the Gist information | |
| if ( $post_data = $this->_retrieve_gist_information( $id ) ) { | |
| // Get the nice embeddable format | |
| if ( $embed_html = $this->_retrieve_embed_content( $id ) ) { | |
| $post_data['post_meta']['embed_content'] = $embed_html; | |
| $posts[] = $post_data; | |
| } | |
| } | |
| } | |
| } | |
| // Foreach Gist, add a new post | |
| foreach ( $posts as $post_data ) | |
| $this->_insert_gist( $post_data ); | |
| // Since posts are added, remove the queued IDs | |
| delete_transient( $this->_queued_gist_ids_key ); | |
| } | |
| /** | |
| * Get Gist ID from a Gist URL in a post's content. | |
| * | |
| * @param $content | |
| * @return array|bool | |
| */ | |
| private function _extract_gist_id( $content ) { | |
| if ( empty( $content ) ) | |
| return false; | |
| // Match a regular gist URL (e.g., https://gist.github.com/1149945) | |
| $pattern = '#[^"]https:\/\/gist\.github\.com\/([0-9]+)[^"]#'; | |
| preg_match_all( $pattern, $content, $matches ); | |
| if ( empty( $matches ) ) | |
| return false; | |
| $clean_matches = array(); | |
| foreach ( $matches[1] as $value ) { | |
| if ( $clean_val = absint( $value ) ) | |
| $clean_matches[] = $clean_val; | |
| } | |
| if ( ! empty( $clean_matches ) ) | |
| return $clean_matches; | |
| else | |
| return false; | |
| } | |
| /** | |
| * Gets the code from the Gist. | |
| * | |
| * @param $gist_body | |
| * @return bool|string | |
| */ | |
| private function _clean_gist_embed_content( $gist_body ) { | |
| $decoded = json_decode( $gist_body ); | |
| if ( isset( $decoded->div ) ) | |
| return $decoded->div; | |
| else | |
| return false; | |
| } | |
| /** | |
| * Get Gist code from Gist JSON endpoint. | |
| * | |
| * I use this to get the actual code because it returns the code in the syntax highlighted | |
| * version of the code. The code returned in the other API call returns the raw code. | |
| * | |
| * @param $gist_id | |
| * @return bool|string | |
| */ | |
| private function _retrieve_embed_content( $gist_id ) { | |
| if ( ! $gist_id = absint( $gist_id ) ) | |
| return false; | |
| $url = 'https://gist.github.com/' . absint( $gist_id ) . '.json'; | |
| $response = wp_remote_get( $url ); | |
| $response_code = wp_remote_retrieve_response_code( $response ); | |
| if ( 200 != $response_code ) | |
| return false; | |
| $body = wp_remote_retrieve_body( $response ); | |
| $html = $this->_clean_gist_embed_content( $body ); | |
| if ( ! empty( $html ) ) | |
| return $html; | |
| else | |
| return false; | |
| } | |
| /** | |
| * Get ALL of the Gist details from the GitHub API. | |
| * | |
| * Note that this API call is different than the previous method. This returns | |
| * all of the information available for the Gist. Not all of the information is used. | |
| * | |
| * @param $gist_id | |
| * @return array|bool | |
| */ | |
| private function _retrieve_gist_information( $gist_id ) { | |
| if ( ! $gist_id = absint( $gist_id ) ) | |
| return false; | |
| $url = 'https://api.github.com/gists/' . $gist_id; | |
| $response = wp_remote_get( $url ); | |
| $response_code = wp_remote_retrieve_response_code( $response ); | |
| if ( 200 != $response_code ) | |
| return false; | |
| $body = wp_remote_retrieve_body( $response ); | |
| $decoded = json_decode( $body ); | |
| // Currently only supports single file gists | |
| foreach ( $decoded->files as $filename => $information ) { | |
| $file = $filename; | |
| break; | |
| } | |
| if ( ! isset( $file ) ) | |
| return false; | |
| // Get file type for later use | |
| $file_types = $this->_get_file_types(); | |
| $file_type = isset( $file_types[ wp_strip_all_tags( $decoded->files->$file->type ) ] ) ? $file_types[ wp_strip_all_tags( $decoded->files->$file->type ) ] : 'PHP'; | |
| $data = array( | |
| 'post' => array( | |
| 'post_title' => wp_strip_all_tags( $decoded->description ) | |
| ), | |
| 'post_meta' => array( | |
| 'gist_id' => absint( $decoded->id ), | |
| 'url' => esc_url_raw( $decoded->html_url ), | |
| 'raw_file_url' => esc_url_raw( $decoded->files->$file->raw_url ), | |
| 'raw_content' => $decoded->files->$file->content | |
| ), | |
| 'taxonomies' => array( | |
| 'cgist-language' => array( | |
| $file_type | |
| ) | |
| ) | |
| ); | |
| return $data; | |
| } | |
| /** | |
| * Saves the Gist as a post of cgist type. | |
| * | |
| * Creates a new post for the Gist and saves the necessary metadata for later use. | |
| * This function also adds the taxonomy terms for the Gist. | |
| * | |
| * @param $data | |
| * @return bool|int|WP_Error | |
| */ | |
| private function _insert_gist( $data ) { | |
| if ( ! isset( $data['post_meta']['gist_id'] ) || ! absint( $data['post_meta']['gist_id'] ) ) | |
| return false; | |
| // Verify that gist doesn't already exist | |
| if ( $this->_get_gist( $data['post_meta']['gist_id'] ) ) | |
| return false; | |
| $defaults = array( 'post_status' => 'publish', 'post_type' => 'cgist' ); | |
| $post_data = wp_parse_args( $data['post'], $defaults ); | |
| // Insert the post | |
| if ( ! $id = wp_insert_post( $post_data ) ) | |
| return false; | |
| // Add the taxonomies | |
| foreach ( $data['taxonomies'] as $taxonomy => $term ) { | |
| $concatenated_terms = implode( ',', $term ); | |
| wp_set_object_terms( $id, $concatenated_terms, $taxonomy ); | |
| } | |
| // Add the postmeta | |
| foreach ( $data['post_meta'] as $key => $value ) | |
| update_post_meta( $id, '_cgist_' . $key, $value ); | |
| return $id; | |
| } | |
| /** | |
| * Mime-type to human readable relationships. | |
| * | |
| * @return array|void | |
| */ | |
| private function _get_file_types() { | |
| return apply_filters( 'cgist_file_types', array( | |
| 'application/httpd-php' => 'PHP', | |
| 'text/plain' => 'Text', | |
| 'application/ruby' => 'Ruby' | |
| ) ); | |
| } | |
| /** | |
| * Render the Gist content on page view. | |
| * | |
| * If a Gist URL is detected, it is displayed from the saved cgist content. If the | |
| * cgist cannot be found, it is displayed as an embedded Gist. | |
| * | |
| * @param $content | |
| * @return bool|mixed | |
| */ | |
| public function render_gist( $content ) { | |
| global $wp_query; | |
| $pattern = '#[^"]https:\/\/gist\.github\.com\/([0-9]+)[^"]#'; | |
| preg_match_all( $pattern, $content, $matches ); | |
| if ( empty( $matches ) ) | |
| return false; | |
| foreach ( $matches[1] as $id ) { | |
| $id = absint( $id ); | |
| if ( ! $id ) | |
| continue; | |
| $embed = $this->_get_gist_content( $id ); | |
| if ( is_single() || ( is_home() && 0 == $wp_query->current_post ) ) | |
| $content = str_replace( 'https://gist.github.com/' . $id, $embed, $content ); | |
| else | |
| $content = str_replace( 'https://gist.github.com/' . $id, '', $content ); | |
| } | |
| return $content; | |
| } | |
| /** | |
| * Gets a cgist. | |
| * | |
| * @param $id | |
| * @return bool|WP_Query | |
| */ | |
| private function _get_gist( $id ) { | |
| if ( ! absint( $id ) ) | |
| return false; | |
| $existing_gists = new WP_Query( array( | |
| 'post_type' => 'cgist', | |
| 'posts_per_page' => 1, | |
| 'meta_query' => array( | |
| array( | |
| 'key' => '_cgist_gist_id', | |
| 'value' => $id, | |
| 'type' => 'NUMERIC' | |
| ) | |
| ) | |
| ) ); | |
| if ( $existing_gists->post_count > 0) | |
| return $existing_gists; | |
| return false; | |
| } | |
| /** | |
| * Get the Gist embed content from cache or generate it. | |
| * | |
| * @param $id | |
| * @return string | |
| */ | |
| private function _get_gist_content( $id ) { | |
| // Generate key | |
| $key = 'ztol-gist-' . md5( absint( $id ) . $this->_get_incrementor_value() ); | |
| // Get content | |
| $gist_content = get_transient( $key ); | |
| // If not there, generate it | |
| if ( false === $gist_content ) { | |
| $gist = $this->_get_gist( $id ); | |
| /** | |
| * If the Gist is not found in the local database, queue the Gist to be added from GitHub. Cache that value for | |
| * only 5 minutes. Queue the Gist to be created in the system. If the Gist is found, load from local database and | |
| * cache for 1 week. | |
| */ | |
| if ( ! $gist ) { | |
| $gist_content = '<script src="https://gist.github.com/' . $id . '.js"> </script>'; | |
| $this->_add_gists_to_queue( $id ); | |
| set_transient( $key, $gist_content, 300 ); | |
| } else { | |
| $gist_content = get_post_meta( $gist->posts[0]->ID, '_cgist_embed_content', true ); | |
| set_transient( $key, $gist_content, 86400 ); | |
| } | |
| } | |
| return $gist_content; | |
| } | |
| /** | |
| * Update the incrementor. | |
| * | |
| * Used to invalidate the breadcrumb cache whenever and event occurs that should | |
| * signal the update of the cache. | |
| * | |
| * @return int | |
| */ | |
| public function update_incrementor() { | |
| $time = time(); | |
| set_transient( $this->_incrementor_key, $time ); | |
| return $time; | |
| } | |
| /** | |
| * Get current incrementor value. | |
| * | |
| * Returns the value of the incrementor if it exists. If the incrementor does not exist, | |
| * it will update the incrementor and effectively invalidate the cache. | |
| * | |
| * @return int | |
| */ | |
| private function _get_incrementor_value() { | |
| if ( $incrementor = get_transient( $this->_incrementor_key ) ) | |
| return $incrementor; | |
| else | |
| return $this->update_incrementor(); | |
| } | |
| /** | |
| * Add the "pretty" stylesheet. | |
| */ | |
| public function wp_print_styles() { | |
| wp_enqueue_style( 'tollmanz_gist_kinda_solarized', get_stylesheet_directory_uri() . '/css/gist.css', array(), '1.0', 'all' ); | |
| } | |
| } | |
| global $cgistPrettyCacheableGists; | |
| $cgistPrettyCacheableGists = new cgistPrettyCacheableGists(); | |
| /** | |
| * Publicly callable version of cgistCacheableGists::update_incrementor. | |
| */ | |
| function tollmanz_invalidate_gists() { | |
| global $cgistPrettyCacheableGists; | |
| $cgistPrettyCacheableGists->update_incrementor(); | |
| } |
Joey,
Thanks for the feedback as always! My thoughts:
- i18n was intentionally not added as its intent was for me and me only (but I think you understand that ;) )
- Thank you!
- These are actually different than you are thinking, but the point remains that you could not read it and that is a problem. The easiest way to follow would be:
$post = get_post( $post_id ); if ( false === $post ) return; - Nice catch
- Another good call! Always get messed up due to no
wp_enqueue_styles.
i18n was intentionally not added as its intent was for me and me only (but I think you understand that ;) )
Yeah I figured as much, but easy enough to add :)
These are actually different than you are thinking, but the point remains that you could not read it and that is a problem. The easiest way to follow would be: $post = get_post( $post_id ); if ( false === $post ) return;
Right... I've always hated assigning variables inside if statements because of the lack of readability it creates, and that just confirms my hate for them :)
awesome job on this class! works awesome. only thing i had to change was this:
- for wp_remote_get(), i had to add an argument for 'sslverify' => false so that my server would actually retrieve the gist contents. otherwise, it failed and wouldn't ever cache it.
I will def. be thinking of more features as I keep using this. great job, it's exactly what I needed!
Really neat way to integrate gists into your site :)
Made a fork at https://gist.github.com/2865210 with some really minor edits:
! $a = $bto$a != $b- more readable that way IMO$existing_gists->post_count ...with$existing_gists->have_posts()wp_print_styleswithwp_enqueue_scripts, which is the correct hook to use for enqueuing stuff