Make WordPress Core

Changeset 13838


Ignore:
Timestamp:
03/27/2010 05:56:27 AM (16 years ago)
Author:
dd32
Message:

Support multiple post_type query params/post_type's to be specified in a query. See #12704

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-includes/query.php

    r13830 r13838  
    17131713                        $where .= " AND DAYOFMONTH($wpdb->posts.post_date)='" . $q['day'] . "'";
    17141714
    1715                 if ( !empty($q['post_type']) && !empty($q[ $q['post_type'] ]) ) {
    1716                         $q[ $q['post_type'] ] = str_replace('%2F', '/', urlencode(urldecode($q[ $q['post_type'] ])));
    1717                         $post_type_object = get_post_type_object($q['post_type']);
    1718                         if ( ! $post_type_object->hierarchical || strpos($q[ $q['post_type'] ], '/') === false) {
    1719                                 $q['name'] = $q[ $q['post_type'] ] = sanitize_title($q[ $q['post_type'] ]);
    1720                                 $where .= " AND $wpdb->posts.post_name = '" . $q[ $q['post_type'] ] . "'";
    1721                         } else {
    1722                                 // Hierarchical post type, need to look deeper to see if its an attachment or this post_type
    1723                                 if ( isset($this->queried_object_id) ) {
    1724                                         $reqpage = $this->queried_object_id;
     1715                if ( !empty($q['post_type']) ) {
     1716                        $_pt = is_array($q['post_type']) ? $q['post_type'] : array($q['post_type']);
     1717                        foreach ( $_pt as $_post_type ) {
     1718                                if ( empty($q[ $_post_type ]) )
     1719                                        continue;
     1720
     1721                                $q[ $_post_type ] = str_replace('%2F', '/', urlencode(urldecode($q[ $_post_type ])));
     1722                                $post_type_object = get_post_type_object($_post_type);
     1723                                if ( ! $post_type_object->hierarchical || strpos($q[ $_post_type ], '/') === false) {
     1724                                        $q['name'] = $q[ $_post_type ] = sanitize_title($q[ $_post_type ]);
     1725                                        $_names[] = $q[ $_post_type ];
    17251726                                } else {
    1726                                         $reqpage = get_page_by_path($q[ $q['post_type'] ], OBJECT, $q['post_type']);
    1727                                         if ( !empty($reqpage) )
    1728                                                 $reqpage = $reqpage->ID;
    1729                                         else
    1730                                                 $reqpage = 0;
     1727                                        // Hierarchical post type, need to look deeper to see if its an attachment or this post_type
     1728                                        if ( isset($this->queried_object_id) ) {
     1729                                                $reqpage = $this->queried_object_id;
     1730                                        } else {
     1731                                                $reqpage = get_page_by_path($q[ $_post_type ], OBJECT, $_post_type);
     1732                                                if ( !empty($reqpage) )
     1733                                                        $reqpage = $reqpage->ID;
     1734                                                else
     1735                                                        $reqpage = 0;
     1736                                        }
     1737                                        $_ids[] = $reqpage;
     1738                                        $reqpage_obj = get_page($reqpage);
     1739                                        if ( is_object($reqpage_obj) && 'attachment' == $reqpage_obj->post_type ) {
     1740                                                $this->is_attachment = true;
     1741                                                $q['attachment_id'] = $reqpage;
     1742                                                $post_type = $q['post_type'] = 'attachment';
     1743                                        }
    17311744                                }
    1732                                 $where .= " AND ($wpdb->posts.ID = '$reqpage')";
    1733                                 $reqpage_obj = get_page($reqpage);
    1734                                 if ( is_object($reqpage_obj) && 'attachment' == $reqpage_obj->post_type ) {
    1735                                         $this->is_attachment = true;
    1736                                         $q['attachment_id'] = $reqpage;
    1737                                         $post_type = $q['post_type'] = 'attachment';
     1745                        } //end foreach
     1746
     1747                        if ( !empty($_names) || !empty($_ids) ) {
     1748                                $where .= ' AND (1=0';
     1749                                if ( !empty($_names) )
     1750                                        $where .= " OR $wpdb->posts.post_name IN('" . implode("', '", $_names) . "')";
     1751                                if ( !empty($_ids) ) {
     1752                                        $_ids = array_map('absint', $_ids);
     1753                                        $where .= " OR $wpdb->posts.ID IN(" . implode(',', $_ids) . ")";
    17381754                                }
    1739                         }
     1755                                $where .= ')';
     1756                        }
     1757                        unset($_ids, $_names, $_pt, $_post_type);
    17401758                } elseif ( '' != $q['name'] ) {
    17411759                        $q['name'] = sanitize_title($q['name']);
     
    23742392                if ( !$q['suppress_filters'] )
    23752393                        $this->request = apply_filters_ref_array('posts_request', array( $this->request, &$this ) );
    2376 
     2394var_Dump($this->request);
    23772395                $this->posts = $wpdb->get_results($this->request);
    23782396                // Raw results filter.  Prior to status checks.
Note: See TracChangeset for help on using the changeset viewer.