/** * Modify queries for Comics * * @global wpdb $wpdb WordPress DB oject * @param WP_Query $query */ function _mangapress_comics_pre_get_posts($query) { global $wpdb; if ($query->get('post_type') !== MangaPress_Posts::POST_TYPE || is_admin()) { return; } $sql = "SELECT * FROM {$wpdb->term_taxonomy} WHERE taxonomy='" . MangaPress_Posts::TAX_SERIES . "'"; $is_taxonomy = $wpdb->get_var($sql); if (!$is_taxonomy) { return; } add_filter('posts_join', 'mangapress_join'); if ($query->is_single()) { add_filter('posts_fields', 'mangapress_select_fields'); } else { add_filter('posts_distinct', 'mangapress_distinct_rows'); } }
/** * Get the fork's parent post, set up a query, and load correct template. * * Duplicates the functionality of /wp-includes/template-loader.php and includes * a lot of copypasta, but that's only to ensure that it follows the same logic. * */ function choose_template() { $p = get_queried_object_id(); if (get_post_type($p) !== 'fork') { return; } $pp = get_post($p)->post_parent; $parent = get_post($pp); if ($parent->post_type == 'page') { $query = array('page_id' => $pp); } else { $query = array('p' => $pp); } $t = new WP_Query($query); $template = false; if ($t->is_404() && ($template = get_404_template())) { } elseif ($t->is_search() && ($template = get_search_template())) { } elseif ($t->is_tax() && ($template = get_taxonomy_template())) { } elseif ($t->is_front_page() && ($template = get_front_page_template())) { } elseif ($t->is_home() && ($template = get_home_template())) { } elseif ($t->is_attachment() && ($template = get_attachment_template())) { remove_filter('the_content', 'prepend_attachment'); } elseif ($t->is_single() && ($template = get_single_template())) { } elseif ($t->is_page && ($template = get_page_template())) { } elseif ($t->is_category() && ($template = get_category_template())) { } elseif ($t->is_tag() && ($template = get_tag_template())) { } elseif ($t->is_author() && ($template = get_author_template())) { } elseif ($t->is_date() && ($template = get_date_template())) { } elseif ($t->is_archive() && ($template = get_archive_template())) { } elseif ($t->is_comments_popup() && ($template = get_comments_popup_template())) { } elseif ($t->is_paged() && ($template = get_paged_template())) { } else { $template = get_index_template(); } if ($template = apply_filters('template_include', $template)) { include $template; } return; }
/** * Send navigation-related headers for post collections * * @param WP_Query $query */ public function query_navigation_headers($query) { $max_page = $query->max_num_pages; $paged = $query->get('paged'); if (!$paged) { $paged = 1; } $nextpage = intval($paged) + 1; if (!$query->is_single()) { if ($paged > 1) { $request = remove_query_arg('page'); $request = add_query_arg('page', $paged - 1, $request); $this->set_info('prev', $paged - 1); } if ($nextpage <= $max_page) { $request = remove_query_arg('page'); $request = add_query_arg('page', $nextpage, $request); $this->set_info('next', $nextpage); } } $this->set_info('total', $query->found_posts); $this->set_info('total_page', $max_page); do_action('json_query_navigation_headers', $this, $query); }
/** * Add custom query modification to the pre_get_posts hook as necessary for PRO. * * @param WP_Query $query The current query object. * * @return WP_Query The modified query object. */ public function pre_get_posts($query) { if ($query->is_single() && $query->get('eventDate')) { $this->set_post_id_for_recurring_event_query($query); } if (!empty($query->tribe_is_event_pro_query)) { switch ($query->query_vars['eventDisplay']) { case 'week': $start_date = tribe_get_first_week_day($query->get('eventDate')); $end_date = tribe_get_last_week_day($start_date); // if the setting to hide weekends is true if (tribe_get_option('week_view_hide_weekends', false) == true) { $start_of_week = get_option('start_of_week'); // check if the week is set to start on a weekend day // If so, start on the next weekday. // 0 = Sunday, 6 = Saturday if ($start_of_week == 0 || $start_of_week == 6) { $start_date = date(Tribe__Events__Date_Utils::DBDATEFORMAT, strtotime($start_date . ' +1 Weekday')); } // If the week starts on saturday or friday // sunday and/or saturday would be on the other end, so we need to end the previous weekday // 5 = Friday, 6 = Saturday if ($start_of_week == 5 || $start_of_week == 6) { $end_date = date(Tribe__Events__Date_Utils::DBDATEFORMAT, strtotime($end_date . ' -1 Weekday')); } } // if the setting to hide weekends is on // need to filter the query // need to only show 5 days on the week view // if we're using an non-default hour range on week view if (has_filter('tribe_events_week_get_hours')) { $start_date .= ' ' . tribe_events_week_get_hours('first-hour'); $end_date .= ' ' . tribe_events_week_get_hours('last-hour'); } $query->set('eventDate', $start_date); $query->set('start_date', $start_date); $query->set('end_date', $end_date); $query->set('posts_per_page', -1); // show ALL week posts $query->set('hide_upcoming', false); break; case 'photo': $query->set('hide_upcoming', false); break; case 'all': new Tribe__Events__Pro__Recurrence__Event_Query($query); break; } apply_filters('tribe_events_pro_pre_get_posts', $query); } }
/** * Add custom query modification to the pre_get_posts hook as necessary for PRO. * * @param WP_Query $query The current query object. * @return WP_Query The modified query object. * @author Timothy Wood * @since 3.0 */ public function pre_get_posts($query) { if ($query->is_single() && $query->get('eventDate')) { $this->set_post_id_for_recurring_event_query($query); } if (!empty($query->tribe_is_event_pro_query)) { switch ($query->query_vars['eventDisplay']) { case 'week': $week = tribe_get_first_week_day($query->get('eventDate')); $query->set('eventDate', $week); $query->set('start_date', $week); $query->set('end_date', tribe_get_last_week_day($week)); $query->set('posts_per_page', -1); // show ALL week posts $query->set('hide_upcoming', false); break; case 'photo': $query->set('hide_upcoming', false); break; case 'all': $slug = $query->get('name'); if (empty($slug)) { break; // we shouldn't be here } unset($query->query_vars['name']); unset($query->query_vars['tribe_events']); $all_ids = TribeEventsRecurrenceMeta::get_events_by_slug($slug); if (empty($all_ids)) { $query->set('p', -1); } else { $query->set('post__in', $all_ids); $query->set('post_status', 'publish'); } break; } apply_filters('tribe_events_pro_pre_get_posts', $query); } }
protected function is_single_event_main_query(WP_Query $query) { return $query->is_main_query() && $query->is_single() && $query->get('post_type') === Tribe__Events__Main::POSTTYPE; }
/** * Add custom query modification to the pre_get_posts hook as necessary for PRO. * * @param WP_Query $query The current query object. * * @return WP_Query The modified query object. */ public function pre_get_posts($query) { if ($query->is_single() && $query->get('eventDate')) { $this->set_post_id_for_recurring_event_query($query); } if (!empty($query->tribe_is_event_pro_query)) { switch ($query->query_vars['eventDisplay']) { case 'week': $start_date = tribe_get_first_week_day($query->get('eventDate')); $end_date = tribe_get_last_week_day($start_date); // if the setting to hide weekends is true if (tribe_get_option('week_view_hide_weekends', false) == true) { $start_of_week = get_option('start_of_week'); // check if the week is set to start on a weekend day // If so, start on the next weekday. // 0 = Sunday, 6 = Saturday if ($start_of_week == 0 || $start_of_week == 6) { $start_date = date(Tribe__Events__Date_Utils::DBDATEFORMAT, strtotime($start_date . ' +1 Weekday')); } // If the week starts on saturday or friday // sunday and/or saturday would be on the other end, so we need to end the previous weekday // 5 = Friday, 6 = Saturday if ($start_of_week == 5 || $start_of_week == 6) { $end_date = date(Tribe__Events__Date_Utils::DBDATEFORMAT, strtotime($end_date . ' -1 Weekday')); } } // if the setting to hide weekends is on // need to filter the query // need to only show 5 days on the week view // if we're using an non-default hour range on week view if (has_filter('tribe_events_week_get_hours')) { $start_date .= ' ' . tribe_events_week_get_hours('first-hour'); $end_date .= ' ' . tribe_events_week_get_hours('last-hour'); } $query->set('eventDate', $start_date); $query->set('start_date', $start_date); $query->set('end_date', $end_date); $query->set('posts_per_page', -1); // show ALL week posts $query->set('hide_upcoming', false); break; case 'photo': $query->set('hide_upcoming', false); break; case 'all': $slug = $query->get('name'); if (empty($slug)) { break; // we shouldn't be here } unset($query->query_vars['name']); unset($query->query_vars['tribe_events']); $posts = get_posts(array('name' => $slug, 'post_type' => Tribe__Events__Main::POSTTYPE, 'post_status' => 'publish', 'numberposts' => 1)); $post = reset($posts); if (empty($post)) { $query->set('p', -1); } else { $query->set('post_parent', $post->ID); $query->set('post_status', 'publish'); $query->set('posts_per_page', tribe_get_option('postsPerPage', 10)); $query->is_singular = false; } break; } apply_filters('tribe_events_pro_pre_get_posts', $query); } }
/** * Get the term keys for every term associated with a post. * * @since 1.0.0. * * @param int $post_id Post ID. * @param string $taxonomy The taxonomy to look for associated terms. * @param WP_Query $wp_query The current wp_query to investigate. * @return array The term slug/taxonomy combos for the post. */ private function _add_key_terms($post_id, $taxonomy, $wp_query) { $terms = array(); $keys = array(); $queried_object = get_queried_object(); if ($wp_query->is_single()) { $terms = get_the_terms($post_id, $taxonomy); } else { if (isset($queried_object->slug) && isset($queried_object->taxonomy) && $taxonomy === $queried_object->taxonomy) { $terms[] = $queried_object; } } if (is_array($terms)) { foreach ($terms as $term) { if (isset($term->slug)) { $keys[] = $taxonomy . '-' . $term->slug; } } } return $keys; }
/** * The rule of this ordering is: from the most specific to the least. * Most of the default WP Template Hierarchy is the same, but not all is followed. * * For the full example of our lookup order plesase follow to: * * For the default WP hierarchy follow to: * http://codex.wordpress.org/Template_Hierarchy * * @param WP_Query $wp_query * @return array */ protected function defineLookupOrder(\WP_Query $wp_query) { $result = []; if (!$wp_query) { return $result; } // prepare vars $post = !empty($wp_query->posts) ? $wp_query->posts[0] : false; $post_type = $post ? $post->post_type : false; $post_slug = $post ? $post->post_name : false; $query_post_type = $wp_query->query_vars['post_type']; if (is_array($query_post_type)) { // it's not usual to have multiple post types on a rewrite rule // but even if there is, it's extremely inconsistent to rely on // a template name with multiple post types // if that's the case, the user will have to alter the template // order manually $query_post_type = false; } // start the template hierarchy build up if ($wp_query->is_404()) { // 404-[post-type] // 404 if ($query_post_type) { $result[] = '404-' . $query_post_type; } $result[] = '404'; } elseif ($wp_query->is_search()) { // search // archive $result[] = 'search'; $result[] = 'archive'; } elseif ($wp_query->is_front_page()) { // if is page on front: // front-page // page // singular // if is posts on front: // front-page // home // archive-[post-type] // [post-type] // archive $result[] = 'front-page'; if ($post_type) { if ($post_type !== 'page') { $result[] = 'home'; $result[] = 'archive-' . $post_type; $result[] = $post_type; $result[] = 'archive'; } else { $result[] = 'page'; $result[] = 'singular'; } } } elseif ($wp_query->is_home()) { // home // archive-[post-type] // [post-type] // archive $result[] = 'home'; if ($post_type) { $result[] = 'archive-' . $post_type; $result[] = $post_type; $result[] = 'archive'; } // for now this is not needed, test more // } elseif ($wp_query->is_post_type_archive()) { // $result[] = 'archive-'.$query_post_type; // $result[] = $query_post_type; // $result[] = 'archive'; } elseif ($wp_query->is_author()) { // author-[user-login] // author-[user-nicename] // author // archive if ($author = get_userdata($post->post_author)) { $result[] = 'author-' . $author->data->user_login; if ($author->data->user_login !== $author->data->user_nicename) { $result[] = 'author-' . $author->data->user_nicename; } } $result[] = 'author'; $result[] = 'archive'; } elseif ($wp_query->is_tax() || $wp_query->is_tag() || $wp_query->is_category()) { // taxonomy-[taxonomy]-[term-slug] // taxonomy-[taxonomy] // taxonomy-[post-type] // taxonomy // archive-[post-type] // [post-type] // archive $term = get_queried_object(); if (!empty($term->slug)) { $result[] = 'taxonomy-' . $term->taxonomy . '-' . $term->slug; $result[] = 'taxonomy-' . $term->taxonomy; } if ($query_post_type) { $result[] = 'taxonomy-' . $query_post_type; } $result[] = 'taxonomy'; if ($query_post_type) { $result[] = 'archive-' . $query_post_type; $result[] = $query_post_type; } $result[] = 'archive'; } elseif ($wp_query->is_date()) { // date-[post-type] // date // archive-[post-type] // [post-type] // archive if ($query_post_type) { $result[] = 'date-' . $query_post_type; } $result[] = 'date'; if ($query_post_type) { $result[] = 'archive-' . $query_post_type; $result[] = $query_post_type; } $result[] = 'archive'; } elseif ($wp_query->is_archive()) { // archive-[post-type] // [post-type] // archive if ($query_post_type) { $result[] = 'archive-' . $query_post_type; $result[] = $query_post_type; } $result[] = 'archive'; } elseif ($wp_query->is_page()) { // page-[parent-slug]-[post-slug] // page-[post-slug] // [page-template-name] // page // singular if ($post->post_parent) { if ($parent_slug = get_slug($post->post_parent)) { $result[] = 'page-' . $parent_slug . '-' . $post_slug; } } $result[] = 'page-' . $post_slug; // page templates can have their unique names, let's add them before the fallback if ($page_template_name = get_page_template_name($post->ID)) { $result[] = $page_template_name; } $result[] = 'page'; $result[] = 'singular'; } elseif ($wp_query->is_attachment()) { // single-attachment-[slugfied-long-mime-type] // single-attachment-[slugfied-short-mime-type] // single-attachment // attachment // single // singular // slugfied-long-mime-type = image-jpeg // slugfied-short-mime-type = jpeg if (!empty($post->post_mime_type)) { $result[] = 'single-attachment-' . \Bond\to_slug($post->post_mime_type); $mime = explode('/', $post->post_mime_type); if (count($mime) > 1) { $result[] = 'single-attachment-' . \Bond\to_slug($mime[1]); } $result[] = 'single-attachment-' . $mime[0]; } $result[] = 'single-attachment'; $result[] = 'attachment'; $result[] = 'single'; $result[] = 'singular'; } elseif ($wp_query->is_single()) { // single-[post-type]-[post-slug] // single-[post-type] // [post-type] // single // singular $result[] = 'single-' . $post_type . '-' . $post_slug; $result[] = 'single-' . $post_type; $result[] = $post_type; $result[] = 'single'; $result[] = 'singular'; } // everything is handled, allow a filter and go $result = apply_filters($this->hooks_prefix . '/lookup_order', $result); return $result; }