WordPress.org

Make WordPress Core

Ticket #12704: 12704.diff

File 12704.diff, 3.9 KB (added by dd32, 9 years ago)

largely untested

  • wp-includes/query.php

     
    17121712                if ( $q['day'] )
    17131713                        $where .= " AND DAYOFMONTH($wpdb->posts.post_date)='" . $q['day'] . "'";
    17141714
     1715                // If a name is not requested, AND we've got a post_type AND its not any post_type.
    17151716                if ( !empty($q['post_type']) && 'any' != $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 ]) )
     1717                        foreach ( (array)$q['post_type'] as $_post_type ) {
     1718                                $post_type_object = get_post_type_object($_post_type);
     1719
     1720                                if ( !$post_type_object || !$post_type_object->query_var || empty($q[ $post_type_object->query_var ]) )
    17191721                                        continue;
     1722                                $pt_qv = $post_type_object->query_var;
    17201723
    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 ];
     1724                                if ( ! $post_type_object->hierarchical || strpos($q[ $pt_qv ], '/') === false) {
     1725                                        $q['name'] = $q[ $pt_qv ];
    17261726                                } else {
    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                                         }
     1727                                        $q['pagename'] = $q[ $pt_qv ];
     1728                                        $q['name'] = '';
    17441729                                }
     1730
     1731                                break; // Right now, name + pagename can only support 1 query for a name, so lets break at this point since we've filled it with something.
    17451732                        } //end foreach
     1733                }
    17461734
    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) . ")";
    1754                                 }
    1755                                 $where .= ')';
    1756                         }
    1757                         unset($_ids, $_names, $_pt, $_post_type);
    1758                 } elseif ( '' != $q['name'] ) {
     1735                if ( '' != $q['name'] ) {
    17591736                        $q['name'] = sanitize_title($q['name']);
    17601737                        $where .= " AND $wpdb->posts.post_name = '" . $q['name'] . "'";
    17611738                } elseif ( '' != $q['pagename'] ) {
    1762                         if ( isset($this->queried_object_id) )
     1739                        if ( isset($this->queried_object_id) ) {
    17631740                                $reqpage = $this->queried_object_id;
    1764                         else {
    1765                                 $reqpage = get_page_by_path($q['pagename']);
     1741                        } else {
     1742                                if ( 'page' != $post_type ) {
     1743                                        foreach ( (array)$post_type as $ptype ) {
     1744                                                $ptype_object = get_post_type_object($ptype);
     1745                                                if ( !$ptype_object || !$post_type_object->hierarchical )
     1746                                                        continue;
     1747
     1748                                                $reqpage = get_page_by_path($q['pagename'], OBJECT, $ptype);
     1749                                                if ( $reqpage )
     1750                                                        break;
     1751                                        }
     1752                                } else {
     1753                                        $reqpage = get_page_by_path($q['pagename']);
     1754                                }
    17661755                                if ( !empty($reqpage) )
    17671756                                        $reqpage = $reqpage->ID;
    17681757                                else
     
    17791768                                $reqpage_obj = get_page($reqpage);
    17801769                                if ( is_object($reqpage_obj) && 'attachment' == $reqpage_obj->post_type ) {
    17811770                                        $this->is_attachment = true;
     1771                                        $post_type = $q['post_type'] = 'attachment';
    17821772                                        $this->is_page = true;
    17831773                                        $q['attachment_id'] = $reqpage;
    17841774                                }