/** * 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; }
/** * Hook into the_posts to do the main product query if needed - relevanssi compatibility * * @access public * @param array $posts * @param WP_Query|bool $query (default: false) * @return array */ public function the_posts($posts, $query = false) { // Abort if there's no query if (!$query) { return $posts; } // Abort if we're not filtering posts if (empty($this->post__in)) { return $posts; } // Abort if this query has already been done if (!empty($query->wc_query)) { return $posts; } // Abort if this isn't a search query if (empty($query->query_vars["s"])) { return $posts; } // Abort if we're not on a post type archive/product taxonomy if (!$query->is_post_type_archive('product') && !$query->is_tax(get_object_taxonomies('product'))) { return $posts; } $filtered_posts = array(); $queried_post_ids = array(); foreach ($posts as $post) { if (in_array($post->ID, $this->post__in)) { $filtered_posts[] = $post; $queried_post_ids[] = $post->ID; } } $query->posts = $filtered_posts; $query->post_count = count($filtered_posts); // Ensure filters are set $this->unfiltered_product_ids = $queried_post_ids; $this->filtered_product_ids = $queried_post_ids; if (sizeof($this->layered_nav_post__in) > 0) { $this->layered_nav_product_ids = array_intersect($this->unfiltered_product_ids, $this->layered_nav_post__in); } else { $this->layered_nav_product_ids = $this->unfiltered_product_ids; } return $filtered_posts; }
/** * @param string $where * @param WP_Query $query * * @return string */ function posts_where_filter($where, $query) { global $pagenow, $wp_taxonomies, $sitepress, $sitepress_settings; //exceptions $post_type = false; if (isset($query->queried_object) && isset($query->queried_object->ID) && $query->queried_object->ID == $sitepress_settings['urls']['root_page']) { return $where; } // determine post type $debug_backtrace = $this->get_backtrace(0, true, false); //Limit to a maximum level? foreach ($debug_backtrace as $o) { if ($o['function'] == 'apply_filters_ref_array' && $o['args'][0] == 'posts_where') { $post_type = $o['args'][1][1]->query_vars['post_type']; break; } } // case of taxonomy archive if (empty($post_type) && $query->is_tax()) { $tax = $query->get('taxonomy'); $post_type = $wp_taxonomies[$tax]->object_type; foreach ($post_type as $k => $v) { if (!$this->is_translated_post_type($v)) { unset($post_type[$k]); } } if (empty($post_type)) { return $where; } // don't filter } if (!$post_type) { $post_type = 'post'; } if (is_array($post_type) && !empty($post_type)) { $none_translated = true; foreach ($post_type as $ptype) { if ($this->is_translated_post_type($ptype)) { $none_translated = false; } } if ($none_translated) { return $where; } } else { if (!$this->is_translated_post_type($post_type) && 'any' != $post_type) { return $where; } } $attachment_is_translatable = $sitepress->is_translated_post_type('attachment'); if (($pagenow == 'upload.php' || $pagenow == 'media-upload.php' || $query->is_attachment()) && !$attachment_is_translatable) { return $where; } $current_language = $sitepress->get_current_language(); $requested_id = false; // Fix for when $sitepress->get_current_language() does not return the correct value (e.g. when request is made for an attachment, an iframe or an ajax call) if (isset($_REQUEST['attachment_id']) && $_REQUEST['attachment_id']) { $requested_id = $_REQUEST['attachment_id']; } if (isset($_REQUEST['post_id']) && $_REQUEST['post_id']) { $requested_id = $_REQUEST['post_id']; } if ($requested_id) { $post_type = get_post_type($requested_id); $current_language = $sitepress->get_language_for_element($requested_id, 'post_' . $post_type); if (!$current_language) { $current_language = $sitepress->get_current_language(); } } if ('all' != $this->this_lang) { if ('any' == $post_type) { $condition = " AND (t.language_code='" . esc_sql($current_language) . "' OR t.language_code IS NULL )"; } else { $condition = " AND t.language_code='" . esc_sql($current_language) . "'"; } } else { $condition = ''; } $where .= $condition; return $where; }
/** * @param WP_Query $query * @return String[] */ private function tax_post_types_from_query($query) { if ($query->is_tax() && $query->is_main_query()) { $taxonomy_post_types = $this->get_tax_query_posttype($query); } else { $taxonomy_post_types = array_keys($this->sitepress->get_translatable_documents(false)); } return $taxonomy_post_types; }
/** * @param WP_Query $wp_query * * @return array() */ private function extract_tax_archive_data($wp_query) { $taxonomy = false; $term_id = false; if ($wp_query->is_category()) { $taxonomy = 'category'; $term_id = $wp_query->get('cat'); } elseif ($wp_query->is_tag()) { $taxonomy = 'post_tag'; $term_id = $wp_query->get('tag_id'); } elseif ($wp_query->is_tax()) { $taxonomy = $wp_query->get('taxonomy'); $term_id = $wp_query->get_queried_object_id(); } return array($taxonomy, $term_id); }
/** * Filter post type archive view queries. * * - Projects and entities are sorted by title. * - People are sorted by last name. * - Publications are left to a default sort by date. * - All posts_per_page limits are bumped to 2000. * * @param WP_Query $query */ public function filter_query($query) { if (!$query->is_main_query() || is_admin()) { return; } $post_types = $this->get_object_type_slugs(); // Avoid paginating without intent by maxing out at 2000 per archive. if ($query->is_post_type_archive($post_types)) { $query->set('posts_per_page', 2000); } // Avoid pagination without intent by maxing out at 2000 per taxonomy archive. if ($query->is_tax($this->entity_type_taxonomy) || $query->is_tax($this->topics_taxonomy)) { $query->set('posts_per_page', 2000); } // Entities and projects are sorted by their titles in archive views. if ($query->is_tax($this->topics_taxonomy) || $query->is_tax($this->entity_type_taxonomy) || $query->is_post_type_archive($this->entity_content_type) || $query->is_post_type_archive($this->project_content_type)) { $query->set('orderby', 'title'); $query->set('order', 'ASC'); } // People are sorted by their last names in archive views. if ($query->is_post_type_archive($post_types) && $query->is_post_type_archive($this->people_content_type)) { $query->set('meta_key', '_wsuwp_uc_person_last_name'); $query->set('orderby', 'meta_value'); $query->set('order', 'ASC'); } }
/** * Alternates the 'posts_per_page' query_var on taxonomy archive pages * * @todo Correct taxonomy value ? * * @param WP_Query $query */ public function alter_taxonomy_archive($query) { if (is_admin() || !$query->is_main_query()) { return; } if (!($query->is_tax() || $query->is_category() || $query->is_tag())) { return; } if (is_tax()) { // Get query var $taxonomy = $query->tax_query->queries[0]['taxonomy']; $tax_obj = get_taxonomy($taxonomy); $query_var = $tax_obj->query_var; if ($query->get($taxonomy)) { $term = get_term_by('slug', $query->get($query_var), $taxonomy); } } elseif (is_category()) { $taxonomy = 'category'; if ($query->get('cat')) { $term = get_term($query->get('cat'), 'category'); } elseif ($query->get('category_name')) { $term = get_term_by('slug', $query->get('category_name'), 'category'); } } elseif (is_tag()) { $taxonomy = 'post_tag'; if ($query->get('tag_id')) { $term = get_term($query->get('tag_id'), 'post_tag'); } else { $term = get_term_by('slug', $query->get('tag'), 'post_tag'); } } if (taxonomy_supports($taxonomy, $this->global_feature)) { $posts_per_page = (int) g1_get_theme_option('taxonomy_' . $taxonomy, 'posts_per_page'); if (-1 === $posts_per_page || $posts_per_page > 0) { $query->set('posts_per_page', $posts_per_page); } } if (taxonomy_supports($taxonomy, $this->individual_feature)) { if ($term) { $term_meta = (array) g1_get_term_meta($term->term_id, '_g1'); $posts_per_page = isset($term_meta['posts_per_page']) ? (int) $term_meta['posts_per_page'] : 0; if (-1 === $posts_per_page || $posts_per_page > 0) { $query->set('posts_per_page', $posts_per_page); } } } }
/** * Replaces Main Query objects. * * When browsing by category by default WP will display list of categories * (depending on the theme), we do not want that, instead we want to take control * over the page content. In order to do that this function removes main query * list of terms and replaces them with post that holds adverts list. * * @param array $posts * @param WP_Query $query * @return array Post objects */ function adverts_posts_results($posts, $query) { if ($query->is_main_query() && $query->is_tax("advert_category")) { $title = sprintf(__("Category: %s", "adverts"), $query->get_queried_object()->name); $post = get_post(adverts_config('config.ads_list_id')); $post->post_title = apply_filters("adverts_category_the_title", $title); return array($post); } else { return $posts; } }
/** * used by the layered_nav widget and the price filter widget as they access the global ($all_post_ids) * is run on the 'request' filter with highest priority to ensure it runs before main filter_catalog_query * gathers all product ID's into a global variable for use elsewhere ($all_post_ids) * * @param array $request - the array representing the current WordPress request eg. post_type => 'product' * @return array - unaltered array of the intial request * @since 0.9.9 **/ function jigoshop_get_product_ids_in_view($request) { global $jigoshop_all_post_ids_in_view; $jigoshop_all_post_ids_in_view = array(); $this_query = new WP_Query(); $this_query->parse_query($request); if ($this_query->is_post_type_archive('product') || $this_query->is_tax('product_cat') || $this_query->is_tax('product_tag')) { $args = array_merge($this_query->query, array('page_id' => '', 'fields' => 'ids', 'posts_per_page' => -1, 'post_type' => 'product', 'post_status' => 'publish', 'meta_query' => self::meta_query($this_query))); $custom_query = get_posts($args); $jigoshop_all_post_ids_in_view = array_merge($jigoshop_all_post_ids_in_view, $custom_query); } $jigoshop_all_post_ids_in_view[] = 0; return $request; }
/** * 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; }
/** * Parse which page we are on using URL */ public function getPageObject($pageUrl) { global $wp_rewrite; // If post type, we are using url_to_postid function $postId = url_to_postid($pageUrl); if ($postId) { $postType = get_post_type_object(get_post($postId)->post_type); return array('value' => $postId, 'title' => get_the_title($postId), 'type' => get_post($postId)->post_type, 'label' => is_array($postType->labels) ? $postType->labels['name'] : $postType->labels->name); } $path = str_replace(get_site_url(), '', $pageUrl); $path = trim($path, '/'); // If path is empty, then it is front page if (empty($path)) { return array('value' => get_option('page_on_front') ? get_option('page_on_front') : '', 'title' => '', 'type' => 'front_page', 'label' => __('Home Page')); } // Otherwise, we will try to match through rewrite or by query $rewrite = $wp_rewrite->wp_rewrite_rules(); if (is_array($rewrite) && count($rewrite) > 0) { foreach ($rewrite as $match => $query) { if (preg_match("#^{$match}#", $path, $matches) || preg_match("#^{$match}#", urldecode($path), $matches)) { $query = preg_replace("!^.*\\?!", '', $query); $query = addslashes(WP_MatchesMapRegex::apply($query, $matches)); parse_str($query, $query_vars); break; } } } else { $query = preg_replace("!^.*\\?!", '', $path); parse_str($query, $query_vars); } // Workaround for fail pagename rewrite match if (isset($query_vars['pagename']) && strpos($query_vars['pagename'], '?') !== false) { $query = preg_replace("!^.*\\?!", '', $query_vars['pagename']); parse_str($query, $query_vars); } $querypost = new WP_Query($query_vars); if ($querypost->is_date()) { if ($querypost->query_vars['m']) { $date = $querypost->query_vars['m']; } else { if ($querypost->is_day()) { $date = $querypost->query_vars['year'] . zeroise($querypost->query_vars['monthnum'], 2) . zeroise($querypost->query_vars['day'], 2); } else { if ($querypost->is_month()) { $date = $querypost->query_vars['year'] . zeroise($querypost->query_vars['monthnum'], 2); } else { if ($querypost->is_year()) { $date = $querypost->query_vars['year']; } } } } return array('value' => $date, 'title' => '', 'type' => 'archive', 'label' => __("Archive")); } else { if ($querypost->is_category() || $querypost->is_tag() || $querypost->is_tax()) { $tax_query = $querypost->tax_query->queries; $taxonomy = get_taxonomy($tax_query[0]['taxonomy']); if ($tax_query[0]['field'] == 'term_id') { $term_id = $tax_query[0]['terms'][0]; } else { if ($tax_query[0]['field'] == 'slug') { $term_id = get_term_by('slug', $tax_query[0]['terms'][0], $taxonomy->name)->term_id; } } return array('value' => $term_id, 'title' => get_term($term_id, $taxonomy->name)->name, 'type' => $taxonomy->name, 'label' => is_array($taxonomy->labels->name) ? $taxonomy->labels['name'] : $taxonomy->labels->name); } else { if ($querypost->is_search()) { return array('value' => $querypost->query_vars['s'], 'title' => '', 'type' => 'search', 'label' => __("Search")); } else { if ($querypost->is_home()) { return array('value' => '', 'title' => '', 'type' => 'home', 'label' => __("Blog Home Page")); } } } } }