Ticket #12704: 12704.diff
File 12704.diff, 3.9 KB (added by , 14 years ago) |
---|
-
wp-includes/query.php
1712 1712 if ( $q['day'] ) 1713 1713 $where .= " AND DAYOFMONTH($wpdb->posts.post_date)='" . $q['day'] . "'"; 1714 1714 1715 // If a name is not requested, AND we've got a post_type AND its not any post_type. 1715 1716 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 ]) ) 1719 1721 continue; 1722 $pt_qv = $post_type_object->query_var; 1720 1723 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 ]; 1726 1726 } 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'] = ''; 1744 1729 } 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. 1745 1732 } //end foreach 1733 } 1746 1734 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'] ) { 1759 1736 $q['name'] = sanitize_title($q['name']); 1760 1737 $where .= " AND $wpdb->posts.post_name = '" . $q['name'] . "'"; 1761 1738 } elseif ( '' != $q['pagename'] ) { 1762 if ( isset($this->queried_object_id) ) 1739 if ( isset($this->queried_object_id) ) { 1763 1740 $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 } 1766 1755 if ( !empty($reqpage) ) 1767 1756 $reqpage = $reqpage->ID; 1768 1757 else … … 1779 1768 $reqpage_obj = get_page($reqpage); 1780 1769 if ( is_object($reqpage_obj) && 'attachment' == $reqpage_obj->post_type ) { 1781 1770 $this->is_attachment = true; 1771 $post_type = $q['post_type'] = 'attachment'; 1782 1772 $this->is_page = true; 1783 1773 $q['attachment_id'] = $reqpage; 1784 1774 }