Make WordPress Core

Ticket #3189: 3189.diff

File 3189.diff, 4.3 KB (added by mdawaffe, 19 years ago)
  • wp-includes/post.php

     
    88        return get_post_meta($attachment_id, '_wp_attached_file', true);
    99}
    1010
    11 function &get_children($post = 0, $output = OBJECT) {
     11function &get_children($args = '', $output = OBJECT) {
    1212        global $post_cache, $wpdb;
    1313
    14         if ( empty($post) ) {
     14        if ( empty($args) ) {
    1515                if ( isset($GLOBALS['post']) )
    16                         $post_parent = & $GLOBALS['post']->post_parent;
     16                        $r = array('post_parent' => & $GLOBALS['post']->post_parent);
    1717                else
    1818                        return false;
    19         } elseif ( is_object($post) ) {
    20                 $post_parent = $post->post_parent;
    21         } else {
    22                 $post_parent = $post;
    23         }
     19        } elseif ( is_object($args) )
     20                $r = array('post_parent' => $post->post_parent);
     21        elseif ( is_numeric($args) )
     22                $r = array('post_parent' => $args);
     23        elseif ( is_array($args) )
     24                $r = &$args;
     25        else
     26                parse_str($args, $r);
    2427
    25         $post_parent = (int) $post_parent;
     28        $defaults = array('post_parent' => 0);
     29        $r = array_merge($defaults, $r);
    2630
    27         $query = "SELECT * FROM $wpdb->posts WHERE post_parent = $post_parent";
     31        $children = get_posts( $r );
    2832
    29         $children = $wpdb->get_results($query);
    30 
    3133        if ( $children ) {
    3234                foreach ( $children as $key => $child ) {
    3335                        $post_cache[$child->ID] =& $children[$key];
     
    158160        else
    159161                parse_str($args, $r);
    160162
    161         $defaults = array('numberposts' => 5, 'offset' => 0, 'category' => '',
    162                 'orderby' => 'post_date', 'order' => 'DESC', 'include' => '', 'exclude' => '', 'meta_key' => '', 'meta_value' =>'');
     163        $defaults = array('numberposts' => 5, 'offset' => 0, 'category' => 0,
     164                'orderby' => 'post_date', 'order' => 'DESC', 'include' => '', 'exclude' => '',
     165                'meta_key' => '', 'meta_value' =>'',
     166                'post_type' => 'post', 'post_status' => 'publish', 'post_parent' => 0);
    163167        $r = array_merge($defaults, $r);
    164168        extract($r);
     169        $numberposts = (int) $numberposts;
     170        $offset = (int) $offset;
     171        $category = (int) $category;
     172        $post_parent = (int) $post_parent;
    165173
    166174        $inclusions = '';
    167175        if ( !empty($include) ) {
    168                 $offset = 0;    //ignore offset, category, exclude, meta_key, and meta_value params if using include
    169                 $category = '';
     176                $offset = 0;    //ignore offset, category, exclude, meta_key, and meta_value, post_parent if using include
     177                $category = 0;
    170178                $exclude = ''; 
    171179                $meta_key = '';
    172180                $meta_value = '';
     181                $post_parent = 0;
    173182                $incposts = preg_split('/[\s,]+/',$include);
    174183                $numberposts = count($incposts);  // only the number of posts included
    175184                if ( count($incposts) ) {
     
    199208        if (!empty($exclusions))
    200209                $exclusions .= ')';
    201210
    202         $query ="SELECT DISTINCT * FROM $wpdb->posts " ;
    203         $query .= ( empty( $category ) ? "" : ", $wpdb->post2cat " ) ;
    204         $query .= ( empty( $meta_key ) ? "" : ", $wpdb->postmeta " ) ;
    205         $query .= " WHERE (post_type = 'post' AND post_status = 'publish') $exclusions $inclusions " ;
    206         $query .= ( empty( $category ) ? "" : "AND ($wpdb->posts.ID = $wpdb->post2cat.post_id AND $wpdb->post2cat.category_id = " . $category. ") " ) ;
    207         $query .= ( empty( $meta_key ) | empty($meta_value)  ? "" : " AND ($wpdb->posts.ID = $wpdb->postmeta.post_id AND $wpdb->postmeta.meta_key = '$meta_key' AND $wpdb->postmeta.meta_value = '$meta_value' )" ) ;
    208         $query .= " GROUP BY $wpdb->posts.ID ORDER BY " . $orderby . " " . $order . " LIMIT " . $offset . ',' . $numberposts ;
     211        $query  = "SELECT DISTINCT * FROM $wpdb->posts " ;
     212        $query .= empty( $category ) ? '' : ", $wpdb->post2cat ";
     213        $query .= empty( $meta_key ) ? '' : ", $wpdb->postmeta ";
     214        $query .= " WHERE 1=1 ";
     215        $query .= empty( $post_type ) ? '' : "AND post_type = '$post_type' ";
     216        $query .= empty( $post_status ) ? '' : "AND post_status = '$post_status' ";
     217        $query .= "$exclusions $inclusions " ;
     218        $query .= empty( $category ) ? '' : "AND ($wpdb->posts.ID = $wpdb->post2cat.post_id AND $wpdb->post2cat.category_id = " . $category. ") ";
     219        $query .= empty( $post_parent ) ? '' : "AND $wpdb->posts.post_parent = '$post_parent' ";
     220        $query .= empty( $meta_key ) | empty($meta_value)  ? '' : " AND ($wpdb->posts.ID = $wpdb->postmeta.post_id AND $wpdb->postmeta.meta_key = '$meta_key' AND $wpdb->postmeta.meta_value = '$meta_value' )";
     221        $query .= " GROUP BY $wpdb->posts.ID ORDER BY " . $orderby . ' ' . $order . " LIMIT " . $offset . ',' . $numberposts ;
    209222
    210223        $posts = $wpdb->get_results($query);
    211224