Make WordPress Core

Changeset 3655


Ignore:
Timestamp:
03/21/2006 04:26:50 AM (20 years ago)
Author:
ryan
Message:

Add include param to get_posts(), get_categories(), get_pages(), and get_bookmarks(). Props MichaelH. fixes #2562

Location:
trunk/wp-includes
Files:
4 edited

Legend:

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

    r3654 r3655  
    14471447function get_posts($args) {
    14481448    global $wpdb;
     1449
     1450    if ( is_array($args) )
     1451        $r = &$args;
     1452    else
     1453        parse_str($args, $r);
    14491454    parse_str($args, $r);
    1450     if ( !isset($r['numberposts']) )
    1451         $r['numberposts'] = 5;
    1452     if ( !isset($r['offset']) )
    1453         $r['offset'] = 0;
    1454     if ( !isset($r['category']) )
    1455         $r['category'] = '';
    1456     if ( !isset($r['orderby']) )
    1457         $r['orderby'] = 'post_date';
    1458     if ( !isset($r['order']) )
    1459         $r['order'] = 'DESC';
     1455
     1456    $defaults = array('numberposts' => 5, 'offset' => 0, 'category' => '',
     1457        'orderby' => 'post_date', 'order' => 'DESC', 'include' => '', 'exclude' => '');
     1458    $r = array_merge($defaults, $r);
     1459    extract($r);
     1460
     1461    $inclusions = '';
     1462    if ( !empty($include) ) {
     1463        $offset = 0;    //ignore offset, category, and exclude params if using include
     1464        $category = '';
     1465        $exclude = ''; 
     1466        $incposts = preg_split('/[\s,]+/',$include);
     1467        $numberposts = count($incposts);  // only the number of posts included
     1468        if ( count($incposts) ) {
     1469            foreach ( $incposts as $incpost ) {
     1470                if (empty($inclusions))
     1471                    $inclusions = ' AND ( ID = ' . intval($incpost) . ' ';
     1472                else
     1473                    $inclusions .= ' OR ID = ' . intval($incpost) . ' ';
     1474            }
     1475        }
     1476    }
     1477    if (!empty($inclusions))
     1478        $inclusions .= ')';
     1479
     1480    $exclusions = '';
     1481    if ( !empty($exclude) ) {
     1482        $exposts = preg_split('/[\s,]+/',$exclude);
     1483        if ( count($exposts) ) {
     1484            foreach ( $exposts as $expost ) {
     1485                if (empty($exclusions))
     1486                    $exclusions = ' AND ( ID <> ' . intval($expost) . ' ';
     1487                else
     1488                    $exclusions .= ' AND ID <> ' . intval($expost) . ' ';
     1489            }
     1490        }
     1491    }
     1492    if (!empty($exclusions))
     1493        $exclusions .= ')';
    14601494
    14611495    $posts = $wpdb->get_results(
    14621496        "SELECT DISTINCT * FROM $wpdb->posts " .
    1463         ( empty( $r['category'] ) ? "" : ", $wpdb->post2cat " ) .
    1464         " WHERE (post_type = 'post' AND post_status = 'publish') ".
    1465         ( empty( $r['category'] ) ? "" : "AND $wpdb->posts.ID = $wpdb->post2cat.post_id AND $wpdb->post2cat.category_id = " . $r['category']. " " ) .
    1466         " GROUP BY $wpdb->posts.ID ORDER BY " . $r['orderby'] . " " . $r['order'] . " LIMIT " . $r['offset'] . ',' . $r['numberposts'] );
     1497        ( empty( $category ) ? "" : ", $wpdb->post2cat " ) .
     1498        " WHERE (post_type = 'post' AND post_status = 'publish') $exclusions $inclusions " .
     1499        ( empty( $category ) ? "" : "AND $wpdb->posts.ID = $wpdb->post2cat.post_id AND $wpdb->post2cat.category_id = " . $category. " " ) .
     1500        " GROUP BY $wpdb->posts.ID ORDER BY " . $orderby . " " . $order . " LIMIT " . $offset . ',' . $numberposts );
    14671501
    14681502    update_post_caches($posts);
  • trunk/wp-includes/template-functions-bookmarks.php

    r3606 r3655  
    284284
    285285    $defaults = array('orderby' => 'name', 'order' => 'ASC', 'limit' => -1, 'category' => -1,
    286         'category_name' => '', 'hide_invisible' => 1, 'show_updated' => 0);
     286        'category_name' => '', 'hide_invisible' => 1, 'show_updated' => 0, 'include' => '', 'exclude' => '');
    287287    $r = array_merge($defaults, $r);
    288288    extract($r);
    289289
     290    $inclusions = '';
     291    if ( !empty($include) ) {
     292    $exclude = '';  //ignore exclude, category, and category_name params if using include
     293    $category = -1;
     294    $category_name = '';
     295        $inclinks = preg_split('/[\s,]+/',$include);
     296        if ( count($inclinks) ) {
     297            foreach ( $inclinks as $inclink ) {
     298                if (empty($inclusions))
     299                    $inclusions = ' AND ( link_id = ' . intval($inclink) . ' ';
     300                else
     301                    $inclusions .= ' OR link_id = ' . intval($inclink) . ' ';
     302            }
     303        }
     304    }
     305    if (!empty($inclusions))
     306        $inclusions .= ')';
     307
    290308    $exclusions = '';
    291309    if ( !empty($exclude) ) {
    292         $exlinks = preg_split('/[\s,]+/',$r['exclude']);
     310        $exlinks = preg_split('/[\s,]+/',$exclude);
    293311        if ( count($exlinks) ) {
    294312            foreach ( $exlinks as $exlink ) {
    295                 $exclusions .= ' AND link_id <> ' . intval($exlink) . ' ';
     313                if (empty($exclusions))
     314                    $exclusions = ' AND ( link_id <> ' . intval($exlink) . ' ';
     315                else
     316                    $exclusions .= ' AND link_id <> ' . intval($exlink) . ' ';
    296317            }
    297318        }
    298319    }
    299 
     320    if (!empty($exclusions))
     321        $exclusions .= ')';
     322       
    300323    if ( ! empty($category_name) ) {
    301324        if ( $cat_id = $wpdb->get_var("SELECT cat_ID FROM $wpdb->categories WHERE cat_name='$category_name' LIMIT 1") )
     
    321344    }
    322345
    323     $orderby = strtolower($r['orderby']);
     346    $orderby = strtolower($orderby);
    324347    $length = '';
    325348    switch ($orderby) {
     
    342365
    343366    $query = "SELECT * $length $recently_updated_test $get_updated FROM $wpdb->links $join WHERE 1=1 $visible $category_query";
     367    $query .= " $exclusions $inclusions";
    344368    $query .= " ORDER BY $orderby $order";
    345369    if ($limit != -1)
  • trunk/wp-includes/template-functions-category.php

    r3605 r3655  
    377377
    378378    $defaults = array('type' => 'post', 'child_of' => 0, 'orderby' => 'name', 'order' => 'ASC',
    379         'hide_empty' => true, 'include_last_update_time' => false, 'hierarchical' => 1);
     379        'hide_empty' => true, 'include_last_update_time' => false, 'hierarchical' => 1, $exclude => '', $include => '');
    380380    $r = array_merge($defaults, $r);
    381     $r['orderby'] = "cat_" . $r['orderby'];
     381    $r['orderby'] = "cat_" . $r['orderby'];  // restricts order by to cat_ID and cat_name fields
    382382    extract($r);
    383383
    384     $exclusions = '';
    385     $having = '';
    386384    $where = 'cat_ID > 0';
     385    $inclusions = '';
     386    if ( !empty($include) ) {
     387        $child_of = 0; //ignore child_of and exclude params if using include
     388        $exclude = ''; 
     389        $incategories = preg_split('/[\s,]+/',$include);
     390        if ( count($incategories) ) {
     391            foreach ( $incategories as $incat ) {
     392                if (empty($inclusions))
     393                    $inclusions = ' AND ( cat_ID = ' . intval($incat) . ' ';
     394                else
     395                    $inclusions .= ' OR cat_ID = ' . intval($incat) . ' ';
     396            }
     397        }
     398    }
     399    if (!empty($inclusions))
     400        $inclusions .= ')';
     401    $where .= $inclusions;
    387402
    388403    $exclusions = '';
     
    391406        if ( count($excategories) ) {
    392407            foreach ( $excategories as $excat ) {
    393                 $exclusions .= ' AND cat_ID <> ' . intval($excat) . ' ';
    394                 // TODO: Exclude children of excluded cats?
     408                if (empty($exclusions))
     409                    $exclusions = ' AND ( cat_ID <> ' . intval($excat) . ' ';
     410                else
     411                    $exclusions .= ' AND cat_ID <> ' . intval($excat) . ' ';
     412                // TODO: Exclude children of excluded cats?   Note: children are getting excluded
    395413            }
    396414        }
    397415    }
     416    if (!empty($exclusions))
     417        $exclusions .= ')';
    398418    $exclusions = apply_filters('list_cats_exclusions', $exclusions );
    399419    $where .= $exclusions;
    400420
     421    $having = '';
    401422    if ( $hide_empty ) {
    402423        if ( 'link' == $type )
  • trunk/wp-includes/template-functions-post.php

    r3644 r3655  
    307307
    308308    $defaults = array('child_of' => 0, 'sort_order' => 'ASC', 'sort_column' => 'post_title',
    309         'hierarchical' => 1);
     309        'hierarchical' => 1, $exclude => '', $include => '');
    310310    $r = array_merge($defaults, $r);
     311    extract($r);
     312
     313    $inclusions = '';
     314    if ( !empty($include) ) {
     315        $child_of = 0; //ignore child_of and exclude params if using include
     316        $exclude = ''; 
     317        $incpages = preg_split('/[\s,]+/',$include);
     318        if ( count($incpages) ) {
     319            foreach ( $incpages as $incpage ) {
     320                if (empty($inclusions))
     321                    $inclusions = ' AND ( ID = ' . intval($incpage) . ' ';
     322                else
     323                    $inclusions .= ' OR ID = ' . intval($incpage) . ' ';
     324            }
     325        }
     326    }
     327    if (!empty($inclusions))
     328        $inclusions .= ')';
    311329
    312330    $exclusions = '';
    313     if ( !empty($r['exclude']) ) {
    314         $expages = preg_split('/[\s,]+/',$r['exclude']);
     331    if ( !empty($exclude) ) {
     332        $expages = preg_split('/[\s,]+/',$exclude);
    315333        if ( count($expages) ) {
    316334            foreach ( $expages as $expage ) {
    317                 $exclusions .= ' AND ID <> ' . intval($expage) . ' ';
     335                if (empty($exclusions))
     336                    $exclusions = ' AND ( ID <> ' . intval($expage) . ' ';
     337                else
     338                    $exclusions .= ' AND ID <> ' . intval($expage) . ' ';
    318339            }
    319340        }
    320341    }
     342    if (!empty($exclusions))
     343        $exclusions .= ')';
    321344
    322345    $pages = $wpdb->get_results("SELECT * " .
    323346        "FROM $wpdb->posts " .
    324347        "WHERE post_type = 'page' AND post_status = 'publish' " .
    325         "$exclusions " .
    326         "ORDER BY " . $r['sort_column'] . " " . $r['sort_order']);
     348        "$exclusions $inclusions" .
     349        "ORDER BY " . $sort_column . " " . $sort_order);
    327350
    328351    if ( empty($pages) )
     
    332355    update_page_cache($pages);
    333356
    334     if ( $r['child_of'] || $r['hierarchical'] )
    335         $pages = & get_page_children($r['child_of'], $pages);
     357    if ( $child_of || $hierarchical )
     358        $pages = & get_page_children($child_of, $pages);
    336359
    337360    return $pages;
Note: See TracChangeset for help on using the changeset viewer.