__('Comic Easel', 'comiceasel'), 'singular_name' => __('Comic', 'comiceasel'), 'add_new' => __('Add Comic', 'comiceasel'), 'add_new_item' => __('Add Comic', 'comiceasel'), 'edit_item' => __('Edit Comic','comiceasel'), 'edit' => __('Edit', 'comiceasel'), 'new_item' => __('New Comic', 'comiceasel'), 'view_item' => __('View Comic', 'comiceasel'), 'search_items' => __('Search Comics', 'comiceasel'), 'not_found' => __('No comics found', 'comiceasel'), 'not_found_in_trash' => __('No comics found in Trash', 'comiceasel'), 'view' => __('View Comic', 'comiceasel'), 'parent_item_colon' => '' ); register_post_type( 'comic', array( 'labels' => $labels, 'public' => true, 'public_queryable' => true, 'show_ui' => true, 'query_var' => true, 'capability_type' => 'post', 'taxonomies' => array( 'post_tag' ), 'rewrite' => array( 'slug' => 'comic', 'with_front' => true ), 'hierarchical' => false, 'can_export' => true, 'menu_position' => 5, 'menu_icon' => ceo_pluginfo('plugin_url') . '/images/ceo-icon.png', 'supports' => array( 'title', 'editor', 'excerpt', 'author', 'comments', 'thumbnail', 'custom-fields' ), 'description' => 'Post type for Comics' )); $labels = array( 'name' => _x( 'Chapters', 'taxonomy general name' ), 'singular_name' => _x( 'Chapter', 'taxonomy singular name' ), 'search_items' => __( 'Search Chapters' ), 'popular_items' => __( 'Popular Chapters' ), 'all_items' => __( 'All Chapters' ), 'parent_item' => __( 'Parent Chapter' ), 'parent_item_colon' => __( 'Parent Chapter:' ), 'edit_item' => __( 'Edit Chapters' ), 'update_item' => __( 'Update Chapters' ), 'add_new_item' => __( 'Add New Chapter' ), 'new_item_name' => __( 'New Chapter Name' ), ); register_taxonomy('chapters', 'comic', array( 'hierarchical' => true, 'public' => true, 'labels' => $labels, 'show_ui' => true, 'query_var' => true, 'show_tagcloud' => false, 'rewrite' => array( 'slug' => 'chapter' ), )); $labels = array( 'name' => _x('Characters', 'taxonomy general name' ), 'singular_name' => _x( 'Character', 'taxonomy singular name' ), 'search_items' => __( 'Search Characters' ), 'popular_items' => __( 'Popular Characters' ), 'all_items' => __( 'All Characters' ), 'parent_item' => __( 'Parent Character' ), 'parent_item_colon' => __( 'Parent Character:' ), 'edit_item' => __( 'Edit Character' ), 'update_item' => __( 'Update Character' ), 'add_new_item' => __( 'Add New Character' ), 'new_item_name' => __( 'New Character Name' ), ); register_taxonomy('characters', 'comic', array( 'hierarchical' => false, 'public' => true, 'labels' => $labels, 'show_ui' => true, 'query_var' => true, 'show_tagcloud' => false, 'rewrite' => array( 'slug' => 'character' ), )); $labels = array( 'name' => _x( 'Locations', 'taxonomy general name' ), 'singular_name' => _x( 'Location', 'taxonomy singular name' ), 'search_items' => __( 'Search Locations' ), 'popular_items' => __( 'Popular Locations' ), 'all_items' => __( 'All Locations' ), 'parent_item' => __( 'Parent Locations' ), 'parent_item_colon' => __( 'Parent Location:' ), 'edit_item' => __( 'Edit Location' ), 'update_item' => __( 'Update Location' ), 'add_new_item' => __( 'Add New Location' ), 'new_item_name' => __( 'New Location Name' ), ); register_taxonomy('locations', 'comic', array( 'hierarchical' => true, 'public' => true, 'labels' => $labels, 'show_ui' => true, 'query_var' => true, 'show_tagcloud' => false, 'rewrite' => array( 'slug' => 'location' ), )); register_taxonomy_for_object_type('chapters', 'comic'); register_taxonomy_for_object_type('characters', 'comic'); register_taxonomy_for_object_type('locations', 'comic'); } // THIS STUFF ONLY RUNS IN THE WP-ADMIN if (is_admin()) { // check if this is a easel theme, if not, dont execute. // This will be removed since actions can be added to any theme. if (strpos(get_template_directory(), 'easel') == false) { if( substr( $_SERVER[ 'PHP_SELF' ], -19 ) != '/wp-admin/index.php' ) return; function ceo_no_ceo_theme() { $output = '
'; $output .= '

'.__('Comic Easel Error','comiceasel').'

'; $output .= __('The current theme is not an Easel theme; Comic Easel will not load.','comiceasel').'
'; $output .='
'; $output .='
'; echo $output; } add_action( 'admin_notices', 'ceo_no_ceo_theme' ); return; } // only load the plugin code of we're in the administration part of WordPress. @require('ceo-core.php'); @require('functions/admin-meta.php'); } else { // This style needs to be loaded on all the comic-easel pages inside ceo-core.php instead. wp_enqueue_style('comiceasel-default-style', ceo_pluginfo('plugin_url').'/css/comiceasel.css'); } // Flush Rewrite Rules & create chapters register_activation_hook( __FILE__, 'ceo_flush_rewrite' ); register_deactivation_hook( __FILE__, 'ceo_flush_rewrite' ); function ceo_flush_rewrite() { global $wp_rewrite; $wp_rewrite->flush_rules(); } // Checks chapters, creates them if needs be, checks directories, creates them if need be. // This does not work yet, its purpose is to generate default chapters if no chapters exist. function ceo_checkdefaults() { $checkchapters = get_terms('chapters', 'orderby=count&hide_empty=0'); if (empty($checkchapters)) { $bookname = stripslashes(__('Book 1', 'comiceasel')); $bookslug = sanitize_title($bookname); // Should I check for .. the slug of term or name of term? if (!term_exists($bookslug, 'chapters')) { $args = array( 'description' => stripslashes(__('The first book.', 'comiceasel')), 'slug' => $bookslug ); $returned_book_info = wp_insert_term($bookname, 'chapters', $args); $parent_term_id = 0; // should I get term_taxonomy_id ? // old: if (isset($returned_book_info['term_id'])) $parent_term_id = $returned_book_info['term_id']; $parent_term = term_exists( $bookslug, 'chapters' ); // array is returned if taxonomy is given $parent_term_id = $parent_term['term_id']; // get numeric term id if ($parent_term_id) { $chaptername = stripslashes(__('Chapter 1', 'comiceasel')); $chapterslug = sanitize_title($chaptername); $args = array( 'description' => stripslashes(__('First chapter of Book 1', 'comiceasel')), 'slug' => $chapterslug, 'parent' => $parent_term_id ); $returned_chapter_info = wp_insert_term($chaptername, 'chapters', $args); } } } } // This file handles navigation of the comic @require('functions/navigation.php'); // This file handles reading the comic from the filesystem and displaying it @require('functions/displaycomic.php'); // This file contains the functions that are injected into the theme @require('functions/injections.php'); /** * This is function ceo_clean_filename * * @param string $filename the BASE filename * @return string returns the rawurlencoded filename with the %2F put back to / * */ function ceo_clean_filename($filename) { return str_replace("%2F", "/", rawurlencode($filename)); } /** * Get the path to the plugin folder. */ function ceo_get_plugin_path() { return PLUGINDIR . '/' . preg_replace('#^.*/([^\/]*)#', '\\1', dirname(plugin_basename(__FILE__))); } /** * These set of functions are for the configuration ceo_pluginfo() information * */ function ceo_load_options($reset = false) { if ($reset) delete_option('comiceasel-config'); $ceo_config = get_option('comiceasel-config'); if (empty($ceo_config)) { delete_option('comiceasel-config'); foreach (array( 'comic_folder' => 'comics', 'comic_folder_medium' => 'comics-medium', 'comic_folder_small' => 'comics-small', 'medium_comic_width' => '360', 'small_comic_width' => '200', 'add_dashboard_frumph_feed_widget' => true ) as $field => $value) { $ceo_config[$field] = $value; } add_option('comiceasel-config', $ceo_config, '', 'yes'); } return $ceo_config; } function ceo_pluginfo($whichinfo = null) { global $ceo_pluginfo; if (empty($ceo_pluginfo) || $whichinfo == 'reset') { // Important to assign pluginfo as an array to begin with. $ceo_pluginfo = array(); $ceo_options = ceo_load_options('reset'); // TEMP: Reset is temporary $ceo_coreinfo = wp_upload_dir(); // Child and Parent theme directories style = child(or parent), theme = parent $ceo_addinfo = array( // if wp_upload_dir reports an error, capture it 'error' => $ceo_coreinfo['error'], // upload_path-url 'base_url' => trailingslashit($ceo_coreinfo['baseurl']), 'base_path' => trailingslashit($ceo_coreinfo['basedir']), // Parent theme 'theme_url' => get_template_directory_uri(), 'theme_path' => get_template_directory(), // Child Theme (or parent if no child) 'style_url' => get_stylesheet_directory_uri(), 'style_path' => get_stylesheet_directory(), // comic-easel plugin directory/url 'plugin_url' => plugin_dir_url(dirname (__FILE__)) . 'comic-easel', 'plugin_path' => trailingslashit(ABSPATH) . ceo_get_plugin_path(), // Comic folders 'comic_url' => trailingslashit($ceo_coreinfo['baseurl']) . $ceo_options['comic_folder'], 'comic_path' => trailingslashit($ceo_coreinfo['basedir']) . $ceo_options['comic_folder'], // Medium Thumbnail Folder 'thumbnail_medium_url' => trailingslashit($ceo_coreinfo['baseurl']) . $ceo_options['comic_folder_medium'], 'thumbnail_medium_path' => trailingslashit($ceo_coreinfo['basedir']) . $ceo_options['comic_folder_medium'], // Small Thumbnail Folder 'thumbnail_small_url' =>trailingslashit($ceo_coreinfo['baseurl']) . $ceo_options['comic_folder_small'], 'thumbnail_small_path' => trailingslashit($ceo_coreinfo['basedir']) . $ceo_options['comic_folder_small'] ); // Combine em. $ceo_pluginfo = array_merge($ceo_pluginfo, $ceo_addinfo); $ceo_pluginfo = array_merge($ceo_pluginfo, $ceo_options); } if ($whichinfo && isset($ceo_pluginfo[$whichinfo])) return $ceo_pluginfo[$whichinfo]; return $ceo_pluginfo; } /** * This functions is to display test information on the dashboard, instead of dumping it out to everyone. * This is so that a plugin doesn't generate errors on output of the var_dump() to the end user. */ function ceo_test_information($vartodump) { ?>

1 ) // not a custom post type archive return false; $post_type = $post_type[0]; } if ( !is_string($post_type) ) return; $post_type = get_post_type_object( $post_type ); if ( !is_null( $post_type ) && ($post_type->public == true) ) return $post_type; return false; } add_action( 'generate_rewrite_rules', 'ceo_rewrite_rules' ); function ceo_rewrite_rules( $wp_rewrite ) { $args = array( 'public' => true, '_builtin' => false ); $output = 'names'; $operator = 'and'; $post_types = get_post_types( $args , $output , $operator ); $feed = get_default_feed(); foreach ( $post_types as $ptype ) : $this_type = get_post_type_object( $ptype ); $type_slug = $this_type->rewrite['slug']; if (!empty($type_slug)) { $new_rules = array( $type_slug.'/?$' => 'index.php?post_type='.$ptype, $type_slug.'/page/?([0-9]{1,})/?$' => 'index.php?post_type='.$ptype.'&paged='.$wp_rewrite->preg_index(1), $type_slug.'/feed/(feed|rdf|rss|rss2|atom)/?$' => 'index.php?post_type='.$ptype.'&feed='.$wp_rewrite->preg_index(1), $type_slug.'/(feed|rdf|rss|rss2|atom)/?$' => 'index.php?post_type='.$ptype.'&feed='.$wp_rewrite->preg_index(1) ); $wp_rewrite->rules = array_merge($new_rules, $wp_rewrite->rules); } endforeach; } function ceo_get_feed_link( $post_type, $feed = '' ) { if ( !$post_type = ceo_is_post_type( $post_type ) ) return false; if ( empty($feed) ) $feed = get_default_feed(); $permalink_structure = get_option('permalink_structure'); if ( '' == $permalink_structure ) { $link = home_url("?feed=$feed&post_type=" . $post_type->name); } else { $link = home_url( $post_type->rewrite['slug'] ); $feed_link = ( $feed == get_default_feed() ) ? 'feed' : "feed/$feed"; $link = trailingslashit($link) . user_trailingslashit($feed_link, 'feed'); } return apply_filters('ceo_get_feed_link', $link, $feed); } add_action( 'wp_head', 'ceo_feed_links', 2 ); function ceo_feed_links() { if ( !current_theme_supports('automatic-feed-links') ) return; $args = array( 'public' => true, '_builtin' => false ); $output = 'names'; $operator = 'and'; $post_types = get_post_types( $args , $output , $operator ); if (!empty($post_types)) { foreach ($post_types as $ptype) { $this_type = get_post_type_object( $ptype ); $type_slug = $this_type->rewrite['slug']; echo '\n"; } } } add_action( 'template_redirect', 'ceo_template_redirect' ); function ceo_template_redirect() { if ( ceo_is_custom_post_type_archive() ) : $post_type = ceo_is_post_type( get_query_var('post_type') ); $template = array( "type-".$post_type->name.".php" ); if ( isset( $post_type->rewrite['slug'] ) ) $template[] = "type-".$post_type->rewrite['slug'].".php"; array_push( $template, 'type.php', 'index.php' ); locate_template( $template, true ); die(); endif; } function ceo_is_custom_post_type_archive( $post_type = '' ) { global $wp_query; if ( !isset($wp_query->is_custom_post_type_archive) || !$wp_query->is_custom_post_type_archive ) return false; if ( empty($post_type) || $post_type == get_query_var('post_type') ) return true; // not sure whether to add checks against label, singular label or slug... adds more overhead and could be problematic with default labels (post) return false; } add_action( 'parse_query', 'ceo_parse_query', 100 ); function ceo_parse_query( $wp_query ) { if ( !isset($wp_query->query_vars['post_type']) ) return; $post_type = $wp_query->query_vars['post_type']; if ( get_query_var('name') || !ceo_is_post_type($post_type) || is_robots() || is_feed() || is_trackback() ) return; $wp_query->is_home = false; // correct is_home variable $wp_query->is_archive = true; $wp_query->is_custom_post_type_archive = true; // define new query variable } ?>