get_queried_object(); /* Check if the post type supports the 'entry-views' feature. */ if ( post_type_supports( $post->post_type, 'entry-views' ) ) { /* Set the post ID for later use because we wouldn't want a custom query to change this. */ $entry_views->post_id = $post->ID; /* Enqueue the jQuery library. */ wp_enqueue_script( 'jquery' ); /* Load the entry views JavaScript in the footer. */ add_action( 'wp_footer', 'entry_views_load_scripts' ); } } } /** * Updates the number of views when on a singular view of a post. This function uses post meta to store * the number of views per post. By default, the meta key is 'Views', but you can filter this with the * 'entry_views_meta_key' hook. * * @since 0.1 */ function entry_views_update( $post_id = '' ) { global $wp_query; /* If we're on a singular view of a post, calculate the number of views. */ if ( !empty( $post_id ) ) { /* Allow devs to override the meta key used. By default, this is 'Views'. */ $meta_key = apply_filters( 'entry_views_meta_key', 'Views' ); /* Get the number of views the post currently has. */ $old_views = get_post_meta( $post_id, $meta_key, true ); /* Add +1 to the number of current views. */ $new_views = absint( $old_views ) + 1; /* Update the view count with the new view count. */ update_post_meta( $post_id, $meta_key, $new_views, $old_views ); } } /** * Gets the number of views a specific post has. It also doubles as a shortcode, which is called with the * [entry-views] format. * * @since 0.1 * @param array $attr Attributes for use in the shortcode. */ function entry_views_get( $attr = '' ) { global $post; /* Merge the defaults and the given attributes. */ $attr = shortcode_atts( array( 'before' => '', 'after' => '', 'post_id' => $post->ID ), $attr ); /* Allow devs to override the meta key used. */ $meta_key = apply_filters( 'entry_views_meta_key', 'Views' ); /* Get the number of views the post has. */ $views = intval( get_post_meta( $attr['post_id'], $meta_key, true ) ); /* Returns the formatted number of views. */ return $attr['before'] . number_format_i18n( $views ) . $attr['after']; } /** * Callback function hooked to 'wp_ajax_entry_views' and 'wp_ajax_nopriv_entry_views'. It checks the * AJAX nonce and passes the given $post_id to the entry views update function. * * @since 0.1 */ function entry_views_update_ajax() { /* Check the AJAX nonce to make sure this is a valid request. */ check_ajax_referer( 'entry_views_ajax' ); /* If the post ID is set, set it to the $post_id variable and make sure it's an integer. */ if ( isset( $_POST['post_id'] ) ) $post_id = absint( $_POST['post_id'] ); /* If $post_id isn't empty, pass it to the entry_views_update() function to update the view count. */ if ( !empty( $post_id ) ) entry_views_update( $post_id ); } /** * Displays a small script that sends an AJAX request for the page. It passes the $post_id to the AJAX * callback function for updating the meta. * * @since 0.1 */ function entry_views_load_scripts() { global $entry_views; /* Create a nonce for the AJAX request. */ $nonce = wp_create_nonce( 'entry_views_ajax' ); /* Display the JavaScript needed. */ echo '' . "\n"; } ?>