Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

I am trying to make a function and exclude in the post query that way im able to define the id's in my function but it is only excluding 1 post instead of the 4 it is returning.

any suggestions on how I can go about successfully executing this?

function in the functions.php file

function slider_exclude(){
    $exclude_query = query_posts(array('showposts' => 4, 'cat' => 'news',));
    foreach($exclude_query as $post_ids){
        return $post_ids->ID.',';
    }
}

my loop

$args = array(
    'post__not_in' => array(slider_exclude()),
    'post_type' => 'post',
    'posts_per_page' => 15,
    'paged' => ( get_query_var('paged') ? get_query_var('paged') : 1)
);
query_posts($args);
share|improve this question

1 Answer 1

up vote 2 down vote accepted

Your PHP is wrong.

function slider_exclude(){
    $exclude_query = query_posts(array('showposts' => 4, 'cat' => 'news',));
    foreach($exclude_query as $post_ids){
        return $post_ids->ID.',';
    }   
}

Looks like you are trying to build a comma delimited string but that isn't how return works. When that foreach hits the return the function returns-- it ends. Nothing else gets processed.

You need to be building and returning an array, from the look of it.

function slider_exclude(){
    $ret = array();
    $exclude_query = query_posts(array('showposts' => 4, 'cat' => 'news',));
    foreach($exclude_query as $post_ids){
        $ret[] = $post_ids->ID;
    } 
    return $ret;  
}

Then you will have trouble with this line:

'post__not_in' => array(slider_exclude()),

Because now you will have a nested array. Do this:

'post__not_in' => slider_exclude(),

Or better:

$args = array(
    'post_type' => 'post',
    'posts_per_page' => 15,
    'paged' => ( get_query_var('paged') ? get_query_var('paged') : 1)
);
$exclude = slider_exclude();
if (!empty($exclude)) {
    $args['post__not_in'] = $exclude;
}
query_posts($args);

That will only add the post_not_in condition if there is something to exclude.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.