Make WordPress Core

Changeset 4503


Ignore:
Timestamp:
11/20/2006 04:23:12 AM (18 years ago)
Author:
ryan
Message:

get_children() uses get_posts(). Props mdawaffe. fixes #3189

File:
1 edited

Legend:

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

    r4495 r4503  
    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     }
    24 
    25     $post_parent = (int) $post_parent;
    26 
    27     $query = "SELECT * FROM $wpdb->posts WHERE post_parent = $post_parent";
    28 
    29     $children = $wpdb->get_results($query);
     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);
     27
     28    $defaults = array('numberposts' => -1, 'post_type' => '', 'post_status' => '', 'post_parent' => 0);
     29    $r = array_merge($defaults, $r);
     30
     31    $children = get_posts( $r );
    3032
    3133    if ( $children ) {
     
    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' =>'', 'post_type' => 'post', 'post_status' => 'publish', 'post_parent' => 0);
    163166    $r = array_merge($defaults, $r);
    164167    extract($r);
     168    $numberposts = (int) $numberposts;
     169    $offset = (int) $offset;
     170    $category = (int) $category;
     171    $post_parent = (int) $post_parent;
    165172
    166173    $inclusions = '';
    167174    if ( !empty($include) ) {
    168         $offset = 0;    //ignore offset, category, exclude, meta_key, and meta_value params if using include
    169         $category = '';
     175        $offset = 0;    //ignore offset, category, exclude, meta_key, and meta_value, post_parent if using include
     176        $category = 0;
    170177        $exclude = '';
    171178        $meta_key = '';
    172179        $meta_value = '';
     180        $post_parent = 0;
    173181        $incposts = preg_split('/[\s,]+/',$include);
    174182        $numberposts = count($incposts);  // only the number of posts included
     
    201209
    202210    $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 .= ( empty( $category ) ? "" : ", $wpdb->post2cat " );
     212    $query .= ( empty( $meta_key ) ? "" : ", $wpdb->postmeta " );
     213    $query .= " WHERE (post_type = 'post' AND post_status = 'publish') $exclusions $inclusions ";
     214    $query .= ( empty( $category ) ? "" : "AND ($wpdb->posts.ID = $wpdb->post2cat.post_id AND $wpdb->post2cat.category_id = " . $category. ") " );
     215    $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' )" );
     216    $query .= " GROUP BY $wpdb->posts.ID ORDER BY " . $orderby . " " . $order . " LIMIT " . $offset . ',' . $numberposts;
     217
     218    $query  = "SELECT DISTINCT * FROM $wpdb->posts ";
     219    $query .= empty( $category ) ? '' : ", $wpdb->post2cat ";
     220    $query .= empty( $meta_key ) ? '' : ", $wpdb->postmeta ";
     221    $query .= " WHERE 1=1 ";
     222    $query .= empty( $post_type ) ? '' : "AND post_type = '$post_type' ";
     223    $query .= empty( $post_status ) ? '' : "AND post_status = '$post_status' ";
     224    $query .= "$exclusions $inclusions " ;
     225    $query .= empty( $category ) ? '' : "AND ($wpdb->posts.ID = $wpdb->post2cat.post_id AND $wpdb->post2cat.category_id = " . $category. ") ";
     226    $query .= empty( $post_parent ) ? '' : "AND $wpdb->posts.post_parent = '$post_parent' ";
     227    $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' )";
     228    $query .= " GROUP BY $wpdb->posts.ID ORDER BY " . $orderby . ' ' . $order;
     229    if ( 0 < $numberposts )
     230        $query .= " LIMIT " . $offset . ',' . $numberposts;
    209231
    210232    $posts = $wpdb->get_results($query);
Note: See TracChangeset for help on using the changeset viewer.