/** * Display all existing portfolio posts on the page (without pagination) * Because in this theme we use the https://mixitup.kunkalabs.com/ plugin to display portfolio posts * If your theme displays portfolio posts in a different way, feel free to change or remove this function * @internal * @param WP_Query $query */ function _fw_ext_portfolio_theme_action_set_posts_per_page($query) { if (!$query->is_main_query()) { return; } /** * @var FW_Extension_Portfolio $portfolio */ $portfolio = fw()->extensions->get('portfolio'); $is_portfolio_taxonomy = $query->is_tax($portfolio->get_taxonomy_name()); $is_portfolio_archive = $query->is_archive() && isset($query->query['post_type']) && $query->query['post_type'] == $portfolio->get_post_type_name(); if ($is_portfolio_taxonomy || $is_portfolio_archive) { $query->set('posts_per_page', -1); } }
/** * Check if the query is requesting event post type * * @param WP_Query $query * @return boolean true if events are queried, false otherwises */ function is_pronamic_events_query(WP_Query $query) { $is_pronamic_events = false; if ($query->is_archive() && !$query->is_tax('pronamic_event_status')) { // Check 'post_type' var // Note: post_type could also be an array $post_type = $query->get('post_type'); if (!empty($post_type) && !is_array($post_type)) { $is_pronamic_events = post_type_supports($post_type, 'pronamic_event'); } if (!$is_pronamic_events) { // Check queried object $object = $query->get_queried_object(); $is_pronamic_events = isset($object, $object->name) && post_type_supports($object->name, 'pronamic_event'); } } return $is_pronamic_events; }
/** * 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; }
function tst_main_query_mods(WP_Query $query) { // exclude account_deleted's tasks: if (!is_admin() && $query->is_main_query()) { if (is_tag() && !$query->get('post_type')) { $query->set('post_type', 'tasks'); } $query->set('author', '-' . ACCOUNT_DELETED_ID); } if ($query->is_main_query() && $query->is_archive() || $query->get('post_type') == 'tasks') { if (!empty($_GET['st'])) { $query->set('post_status', $_GET['st'] == '-' ? array('publish', 'in_work', 'closed') : $_GET['st']); } if (!empty($_GET['dl'])) { $metas = (array) $query->get('meta_query'); switch ($_GET['dl']) { case '10': $metas[] = array('key' => 'deadline', 'value' => array(date('Ymd'), date('Ymd', strtotime('+10 days'))), 'compare' => 'BETWEEN', 'type' => 'DATE'); break; case 'lm': $metas[] = array('key' => 'deadline', 'value' => array(date('Ymd'), date('Ymd', strtotime('+1 month'))), 'compare' => 'BETWEEN', 'type' => 'DATE'); break; case 'mm': $metas[] = array('key' => 'deadline', 'value' => array(date('Ymd', strtotime('+1 month')), date('Ymd', strtotime('+6 months'))), 'compare' => 'BETWEEN', 'type' => 'DATE'); break; } $query->set('meta_query', $metas); } if (!empty($_GET['rw'])) { $metas = (array) $query->get('meta_query'); $metas[] = array('key' => 'reward', 'value' => $_GET['rw'], 'compare' => '='); $query->set('meta_query', $metas); } if (!empty($_GET['tt'])) { $query->set('tag_slug__in', (array) $_GET['tt']); } } }
/** * pre_get_posts * * @access public * @param \WP_Query $WP_Query * @return \WP_Query */ public function pre_get_posts(WP_Query $WP_Query) { //EEH_Debug_Tools::printr( $WP_Query, '$WP_Query <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' ); if (!$WP_Query->is_main_query() && !$WP_Query->is_archive()) { return $WP_Query; } // $WP_Query->set( 'post_type', array( $this->CPT['post_type'] )); // $WP_Query->set( 'fields', 'ids' ); return $WP_Query; }
/** * @param $query_string string * * Checks if the WP_Query functionality can decisively recognize if a querystring points * towards an archive. * * @return bool */ private static function query_points_to_archive($query_string) { $root_page_actions = wpml_get_root_page_actions_obj(); remove_action('parse_query', array($root_page_actions, 'wpml_home_url_parse_query')); $query_string = str_replace('?', '', $query_string); $query = new WP_Query($query_string); $is_archive = $query->is_archive(); add_action('parse_query', array($root_page_actions, 'wpml_home_url_parse_query')); return $is_archive; }
/** * @param $query_string string * * Checks if the WP_Query functionality can decisively recognize if a querystring points * towards an archive. * * @return bool */ private static function query_points_to_archive($query_string) { remove_action('parse_query', 'wpml_home_url_parse_query'); $query_string = str_replace('?', '', $query_string); $query = new WP_Query($query_string); add_action('parse_query', 'wpml_home_url_parse_query'); return $query->is_archive(); }
/** * Make any needed modifications to the main query * via pre_get_posts for the homepage or frontpage * * @since 2.3.0 * * @param WP_Query $q Current WP_Query object at the time of pre_get_posts */ public function pre_get_posts($q) { if (!$q->is_main_query() || !$q->is_home() && !$q->is_page() && !$q->is_archive()) { return; } // Static frontpage if ($q->is_page() && get_option('show_on_front') == 'page' && get_option('page_on_front') == $q->get('page_id')) { $templates = apply_filters('themeblvd_paginated_templates', array('template_list.php', 'template_list.php', 'template_builder.php')); $template = get_post_meta($q->get('page_id'), '_wp_page_template', true); if (in_array($template, $templates) && isset($q->query['paged'])) { $q->set('paged', $q->query['paged']); } } // Adjust posts_per_page if framework is in grid mode if ($q->is_archive() || $this->is_blog($q)) { // Check to make sure we're in grid mode if (themeblvd_is_grid_mode()) { $key = 'archive'; if ($this->is_blog($q)) { $key = 'index'; } $columns = themeblvd_get_option("{$key}_grid_columns"); if (!$columns) { $columns = apply_filters('themeblvd_default_grid_columns', 3); } $rows = themeblvd_get_option("{$key}_grid_rows"); if (!$rows) { $rows = apply_filters('themeblvd_default_grid_rows', 4); } // Posts per page = $columns x $rows $q->set('posts_per_page', $columns * $rows); } } // Exclude any categories from posts page if ($this->is_blog($q)) { $cat = ''; if (themeblvd_is_grid_mode()) { $exclude = themeblvd_get_option('grid_categories'); } else { $exclude = themeblvd_get_option('blog_categories'); } if ($exclude) { foreach ($exclude as $key => $value) { if ($value) { $cat .= sprintf('-%s,', $key); } } } if ($cat) { $cat = themeblvd_remove_trailing_char($cat, ','); $q->set('cat', $cat); } } // Apply pagination fix when homepage custom layout // set over home "posts page" if (defined('TB_BUILDER_PLUGIN_VERSION') && $q->is_home() && 'custom_layout' == themeblvd_get_option('homepage_content')) { // Layout info $kayout_name = themeblvd_get_option('homepage_custom_layout'); $layout_post_id = themeblvd_post_id_by_name($kayout_name, 'tb_layout'); if ($layout_post_id) { $elements = get_post_meta($layout_post_id, 'elements', true); } // Loop through elements and look for that single // paginated element (there can only be one in a layout). if (!empty($elements) && is_array($elements)) { foreach ($elements as $area) { if (!empty($area) && is_array($area)) { foreach ($area as $element) { switch ($element['type']) { case 'post_grid_paginated': if (!empty($element['options']['rows']) && !empty($element['options']['columns'])) { $posts_per_page = intval($element['options']['rows']) * intval($element['options']['columns']); } $q->set('posts_per_page', $posts_per_page); break; case 'post_list_paginated': if (isset($element['options']['source']) && 'query' == $element['options']['source']) { if (!empty($element['options']['query'])) { $custom_q = wp_parse_args(htmlspecialchars_decode($element['options']['query'])); } if (isset($custom_q['posts_per_page'])) { $q->set('posts_per_page', $custom_q['posts_per_page']); } } else { if (!empty($element['options']['posts_per_page'])) { $q->set('posts_per_page', $element['options']['posts_per_page']); } } break; } } } } } } do_action('themeblvd_pre_get_posts', $q, $this); }
/** * Don't show child posts on the front page of the site, they'll be pulled in separately as updates to a live post. * * @param WP_Query $query The current query * * @return WP_Query */ public function filter_children_from_query(WP_Query $query) { $post_type = $query->get('post_type'); // only applies to indexes and post format if (($query->is_home() || $query->is_archive()) && (empty($post_type) || in_array($post_type, apply_filters('livepress_post_types', array('post'))))) { $parent = $query->get('post_parent'); if (empty($parent)) { $query->set('post_parent', 0); } } }
/** * @param bool|String $requested_url String If this is specified the value of $url will be checked for whether it's the root page. * Checks whether the currently requested page is the root page. * * @return bool */ function is_root_page($requested_url = false) { /* * A request leads to the root page under the following conditions. * * 1. The get parameter on it specifically requests the root page via either: * ?preview_id = {root_page_id} * ?page_id = {root_page_id} * ?p = {root_page_id} * * 2. The root page slug is the first slug after the domain. * * 3. There is no slug after the domain and the get parameters are not set as to redirect * to another page meaning: * no ?p, ?page_id or similar query parameter redirects to another post/page * no get parameter such as ?cat redirects to an archive page * */ $is_root = true; // before checking anything see if the site even uses a root page $urls = $this->get_setting('urls'); if (!$urls || !isset($urls['directory_for_default_language']) || !$urls['directory_for_default_language'] || !isset($urls['root_page']) || $urls['root_page'] == 0) { $is_root = false; } elseif (isset($_SERVER['REQUEST_URI']) || $requested_url !== false) { $root_id = $urls['root_page']; $root_slug = false; if ($root_id) { $root_page_object = get_post($root_id); if ($root_page_object && isset($root_page_object->post_name)) { $root_slug = $root_page_object->post_name; } } if ($root_slug === false) { $is_root = false; } else { if ($requested_url) { $request_uri = parse_url($requested_url, PHP_URL_PATH); $query_string = parse_url($requested_url, PHP_URL_QUERY); if ($query_string) { $request_uri .= '?' . $query_string; } } else { $request_uri = $_SERVER['REQUEST_URI']; } //If the get parameter ? is not preceeded by a /, add a '/' if (strpos($request_uri, '?') !== false && strpos($request_uri, '/?') === false) { $request_uri = str_replace('?', '/?', $request_uri); } $request_uri = wpml_strip_subdir_from_url($request_uri); //First get the slug of the requested url, should there be one. $slugs_and_get_params = explode('/', $request_uri); foreach ($slugs_and_get_params as $key => $slug) { if (!trim($slug)) { unset($slugs_and_get_params[$key]); } } // if we have any slugs or get parameters it could be we are not on the root page if (!empty($slugs_and_get_params)) { $get_query_string = ''; // First of all see if we have get parameters if (isset($_GET) && !empty($_GET)) { $get_query_string = array_pop($slugs_and_get_params); /* In case we have get parameters we can instantly be sure to be on the root page * This can be done by either id parameters or by slug/name parameters. * ID parametes as of WP 4.1 are : p, page_id * Name parameters as of WP 4.1 are: name, pagename */ if (isset($_GET['p']) && $_GET['p'] != $root_id || isset($_GET['page_id']) && $_GET['page_id'] != $root_id || isset($_GET['name']) && $_GET['name'] != $root_slug || isset($_GET['pagename']) && $_GET['pagename'] != $root_slug) { $is_root = false; } } /* * Next up there are other get parameters that allow us to recognize not being on the root page for certain. * These only come into play when neither of the above page parameters is set and therefore no specific page is queried for. */ if (!(isset($_GET['pagename']) || isset($_GET['name']) || isset($_GET['page_id']) || isset($_GET['p']))) { /* The under these conditions excluded parameters, that ensure the root page to not be queried for, are determined in this way: * First we fetch all rewrite rules. This has to be done from the options cache since the actual rewrite object is not initialized yet. * Initializing it would impose a siginificant performance hit too. */ $query = new WP_Query(str_replace('?', '', $get_query_string)); if ($query->is_archive()) { $is_root = false; } } // In case we have slugs, we need to check the last slug for whether it is the slug of the root page if ($is_root && !empty($slugs_and_get_params)) { $slugs = $slugs_and_get_params; $last_slug = array_pop($slugs); $second_slug = array_pop($slugs); if (($root_slug != $last_slug && !is_numeric($last_slug) || is_numeric($last_slug) && $second_slug != null && $root_slug != $second_slug && 'page' != $second_slug) && (!(isset($_GET['p']) && $_GET['p'] == $root_id) || !(isset($_GET['page_id']) && $_GET['page_id'] == $root_id) || !(isset($_GET['name']) && $_GET['name'] == $root_slug) || !(isset($_GET['pagename']) && $_GET['pagename'] == $root_slug))) { /* If the last slug is not the root slug or numeric, * then the current page is not the root page. This condition only holds though * in case no page/post parameters are appended to the request, that point towards the root page. */ $is_root = false; } } } } } return $is_root; }
/** * Determine if the query is the main query for an issue archive * * @param WP_Query $query * @return bool */ private function is_issue_archive($query) { if (!$query->is_main_query()) { return FALSE; } if (get_query_var('post_type') != 'issue') { return FALSE; } if (!$query->is_archive()) { return FALSE; } return TRUE; }
/** * 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; }
/** * Fix for custom loop pagination in custom taxonomy archives. * * @param Request $request Page request * @return Request */ public function paginationFix($request) { if (!thb_array_contains($this->_type, array('post', 'page')) && $this->isPublicContent()) { $dummy_query = new WP_Query(); $dummy_query->parse_query($request); $thb_works_taxonomies = $this->getTaxonomies(); foreach ($thb_works_taxonomies as $tax) { if (isset($request[$tax->getType()])) { if ($dummy_query->is_front_page() || $dummy_query->is_archive()) { $posts_per_page = thb_get_option($this->getType() . '_per_page'); if (!empty($posts_per_page)) { $request["posts_per_page"] = $posts_per_page; } } } } } return $request; }