// // Note that it's quite possible to slurp up the wrong file if your expressions are too broad. $comic_filename_filters = array(); $comic_filename_filters['default'] = "{date}*.*"; require_once(dirname(__FILE__) . '/options.php'); // load all of the comic & non-comic category information add_action('init', '__comicpress_init'); function __comicpress_init() { get_all_comic_categories(); add_action('admin_init', '__comicpress_add_options_admin'); } function get_first_comic() { return get_terminal_post_in_category(get_all_comic_categories_as_cat_string()); } function get_last_comic() { return get_terminal_post_in_category(get_all_comic_categories_as_cat_string(), false); } /** * Get the hyperlink to the first comic post in the database. * @return string The hyperlink to the first comic post, or false. */ function get_first_comic_permalink() { $terminal = get_first_comic(); return !empty($terminal) ? get_permalink($terminal->ID) : false; } /** * Get the hyperlink to the last comic post in the database. * @return string The hyperlink to the first comic post, or false. */ function get_last_comic_permalink() { $terminal = get_last_comic(); return !empty($terminal) ? get_permalink($terminal->ID) : false; } /** * Given a category ID or an array of category IDs, create an exclusion string that will * filter out every category but the provided ones. */ function get_string_to_exclude_all_but_provided_categories($category) { $category_ids = array_keys(get_all_category_objects_by_id()); if (!is_array($category)) { $category = array($category); } return implode(",", array_diff($category_ids, $category)); } /** * Get the link to the previous comic from the current one. */ function previous_comic_link($format, $link) { global $non_comic_categories; previous_post_link($format, $link, false, $non_comic_categories); } /** * Get the link to the next comic from the current one. */ function next_comic_link($format, $link) { global $non_comic_categories; next_post_link($format, $link, false, $non_comic_categories); } /** * Get the previous comic from the current one. */ function get_previous_comic($category = null) { return get_adjacent_comic($category); } /** * Get the next comic from the current one. */ function get_next_comic($category = null) { return get_adjacent_comic($category, true); } /** * Get the adjacent comic from the current one. * @param int $category The category to use. * @param boolean $next True if the next chronological comic should be retrieved. * @return array The WordPress post object for the comic post. */ function get_adjacent_comic($category, $next = false) { global $non_comic_categories; $categories_to_exclude = $non_comic_categories; if (!is_null($category)) { $categories_to_exclude = get_string_to_exclude_all_but_provided_categories($category); } return get_adjacent_post(false, $categories_to_exclude, $next); } /** * Find the terminal post in a specific category. */ function get_terminal_post_in_category($categoryID, $first = true) { global $post; $temp = $wp_query; $wp_query = null; $sortOrder = $first ? "asc" : "desc"; $terminalComicQuery = new WP_Query(); $terminalComicQuery->query("showposts=1&order=${sortOrder}&cat=${categoryID}"); $terninalPost = false; if ($terminalComicQuery->have_posts()) { $terminalPost = reset($terminalComicQuery->posts); } $wp_query = null; $wp_query = $temp; return $terminalPost; } /** * Find a comic file in the filesystem. * @param string $folder The folder name to search. * @param string $override_post A WP Post object to use in place of global $post. * @param string $filter The $comic_filename_filters to use. * @return string The relative path to the comic file, or false if not found. */ function get_comic_path($folder = 'comic', $override_post = null, $filter = 'default') { global $post, $comic_filename_filters, $comic_folder, $archive_comic_folder, $rss_comic_folder, $comic_pathfinding_errors; if (isset($comic_filename_filters[$filter])) { $filter_to_use = $comic_filename_filters[$filter]; } else { $filter_to_use = '{date}*.*'; } switch ($folder) { case "rss": $folder_to_use = $rss_comic_folder; break; case "archive": $folder_to_use = $archive_comic_folder; break; case "comic": default: $folder_to_use = $comic_folder; break; } $post_to_use = (is_object($override_post)) ? $override_post : $post; $post_date = mysql2date(CP_DATE_FORMAT, $post_to_use->post_date); $filter_with_date = str_replace('{date}', $post_date, $filter_to_use); if (count($results = glob("${folder_to_use}/${filter_with_date}")) > 0) { return reset($results); } $comic_pathfinding_errors[] = sprintf(__("Unable to find the file in the %s folder that matched the pattern %s. Check your WordPress and ComicPress settings.", 'comicpress'), $folder, $filter_with_date); return false; } /** * Find a comic file in the filesystem and return an absolute URL to that file. * @param string $folder The folder name to search. * @param string $override_post A WP Post object to use in place of global $post. * @param string $filter The $comic_filename_filters to use. * @return string The absolute URL to the comic file, or false if not found. */ function get_comic_url($folder = 'comic', $override_post = null, $filter = 'default') { if (($result = get_comic_path($folder, $override_post, $filter)) !== false) { return get_option('home') . '/' . $result; } return false; } /** * Turn the tree of comics categories into a string to be fed into wp_query functions. */ function get_all_comic_categories_as_cat_string() { global $all_comic_categories_as_string, $category_tree; if (empty($all_comic_categories_as_string)) { $categories = array(); foreach ($category_tree as $node) { $parts = explode("/", $node); $categories[] = end($parts); } $all_comic_categories_as_string = implode(",", $categories); } return $all_comic_categories_as_string; } /** * Turn the list of categories into a hash table of category objects. */ function get_all_category_objects_by_id() { global $categories_by_id; if (empty($categories_by_id)) { $categories_by_id = array(); foreach (get_categories("hide_empty=0") as $category_object) { $categories_by_id[$category_object->term_id] = $category_object; } } return $categories_by_id; } /** * Parse all categories and sort them into comics and non-comics categories. */ function get_all_comic_categories() { global $comiccat, $category_tree, $non_comic_categories; $categories_by_id = get_all_category_objects_by_id(); foreach (array_keys($categories_by_id) as $category_id) { $category_tree[] = $categories_by_id[$category_id]->parent . '/' . $category_id; } do { $all_ok = true; for ($i = 0; $i < count($category_tree); ++$i) { $current_parts = explode("/", $category_tree[$i]); if (reset($current_parts) != 0) { $all_ok = false; for ($j = 0; $j < count($category_tree); ++$j) { $j_parts = explode("/", $category_tree[$j]); if (end($j_parts) == reset($current_parts)) { $category_tree[$i] = implode("/", array_merge($j_parts, array_slice($current_parts, 1))); break; } } } } } while (!$all_ok); $non_comic_tree = array(); if (get_option('comicpress-enable-storyline-support') == 1) { $result = get_option("comicpress-storyline-category-order"); if (!empty($result)) { $category_tree = explode(",", $result); } $non_comic_tree = array_keys($categories_by_id); foreach ($category_tree as $node) { $parts = explode("/", $node); $category_id = end($parts); if ($parts[1] == $comiccat) { if (($index = array_search($category_id, $non_comic_tree)) !== false) { array_splice($non_comic_tree, $index, 1); } } } } else { $new_category_tree = array(); foreach ($category_tree as $node) { $parts = explode("/", $node); if ($parts[1] == $comiccat) { $new_category_tree[] = $node; } else { $non_comic_tree[] = end($parts); } } $category_tree = $new_category_tree; } $non_comic_categories = implode(" and ", $non_comic_tree); } /** * Return true if the current post is in the comics category or a child category. */ function in_comic_category() { global $post, $category_tree; $comic_categories = array(); foreach ($category_tree as $node) { $comic_categories[] = end(explode("/", $node)); } return (count(array_intersect($comic_categories, wp_get_post_categories($post->ID))) > 0); } // ComicPress Template Functions function the_comic($filter = 'default') { echo get_comic_url('comic', null, $filter); } //The following is deprecated... function comic_display($filter = 'default') { echo get_comic_url('comic', null, $filter); } function the_comic_archive($filter = 'default') { echo get_comic_url('archive', null, $filter); } //The following is deprecated... function comic_archive($filter = 'default') { echo get_comic_url('archive', null, $filter); } function the_comic_rss($filter = 'default') { echo get_comic_url('rss', null, $filter); } //The following is deprecated... function comic_rss($filter = 'default') { echo get_comic_url('rss', null, $filter); } /** * Display the list of Storyline categories. */ function comicpress_list_storyline_categories($args = "") { global $category_tree; $defaults = array( 'style' => 'list', 'title_li' => __('Storyline') ); $r = wp_parse_args($args, $defaults); extract($r); $categories_by_id = get_all_category_objects_by_id(); $output = ''; if ($style == "list") { $output .= '
  • '; } if ($title_li && ($style == "list")) { $output .= $title_li; } if ($style == "list") { $output .= "
  • ", $current_depth); } if ($style == "list") { $output .= ""; } echo $output; } /** * Display text when image (comic) is hovered * Text is taken from a custom field named "hovertext" */ function the_hovertext() { $hovertext = get_post_meta( get_the_ID(), "hovertext", true ); echo (empty($hovertext)) ? get_the_title() : $hovertext; } /** * Display the comic transcript * Transcript must be entered into a custom field named "transcript" * @param string $displaymode, "raw" (straight from the field), "br" (includes html line breaks), "styled" (fully css styled with JavaScript expander) */ function the_transcript($displaymode = 'raw') { $transcript = get_post_meta( get_the_ID(), "transcript", true ); switch ($displaymode) { case "raw": echo $transcript; break; case "br": echo nl2br($transcript); break; case "styled": if (!empty($transcript)) { ?>
    ↓ Transcript


    <?php the_title() ?>

    query('showposts=1&orderby=rand&cat='.get_all_comic_categories_as_cat_string()); while ($randomComicQuery->have_posts()) : $randomComicQuery->the_post(); $random_comic_id = get_the_ID(); endwhile; wp_redirect( get_permalink( $random_comic_id ) ); exit; } if ( isset( $_GET['randomcomic'] ) ) add_action( 'template_redirect', 'random_comic' ); // Register Sidebar and Define Widgets if ( function_exists('register_sidebar') ) register_sidebar(); function widget_comicpress_calendar() { ?>
  • Latest Comics

  • ? Random Comic

  • postmeta ON $wpdb->posts.ID = $wpdb->postmeta.post_id "; } return $join; } add_filter('posts_join', 'szub_search_custom_join'); function szub_search_custom_where($where) { global $wp_query, $wp_version, $wpdb; if( !empty($wp_query->query_vars['s']) && szub_is_search_key() ) { $search = $wp_query->query_vars['s']; $key = $_GET['key']; $status = ($wp_version >= 2.1) ? 'post_type = \'post\' AND post_status = \'publish\'' : 'post_status = \'publish\''; $where = " AND $wpdb->postmeta.meta_key = '$key' AND $wpdb->postmeta.meta_value LIKE '%$search%' AND $status "; } return $where; } add_filter('posts_where', 'szub_search_custom_where'); function szub_search_custom_template($template) { if( is_search() && szub_is_search_key() && file_exists(TEMPLATEPATH . '/search-transcript.php') ) $template = TEMPLATEPATH . '/search-transcript.php'; if( !$template ) $template = get_query_template('search'); return $template; } add_filter('search_template', 'szub_search_custom_template'); function szub_is_search_key($key='') { if( isset($_GET['key']) ) { if( !empty($_GET['key']) || (!empty($key) && ($key = $_GET['key'])) ) return true; } return false; } ?>