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.

Let's say I have a query stored in a array.

I want to parse this array, find the first posts inside this array that match a certain value from a certain key, and so extract the whole post.

Is there a elegant way to do it ? Or, is it possible to run a query_posts() inside this array ?

Thanks !


Edit:

Sorry, just learning to use this fantastic website, need to learn correct use.

The purpose is to make a get_posts(), and display the posts not in a row, but at different places in the homepage where there is a place for a Beauty category post, a Mode category Post, etc. As any post could be in several categories, I cannot just ask for the last post in the category: a post could be in two places at the same time.

My idea is to just make a get_posts query, store the result, and parse it so i could take record of what post are displayed and what are not.

So, I make a query with get_posts() are store result in a variable. As I don't want certain posts to stay in the query, I use 'post__not_in', which is array with posts ID I don't want.

function request_highlights($exclude_ids) { 
/* request that will populate my hightlight feed */
$args = array(
'numberposts'   => 16,
'category'  => null,
'orderby'   => 'post_date',
'order'     => 'DESC',
'post__not_in'  => $exclude_ids,
);

return get_posts( $args );
}

$highlights_posts = request_highlights($slides_id);

So at this point, I have a variable which is a objet, I guess, with all needed data.

What I want to do is to get, say, the first post in the objet that has the cat_ID=5 (for example).

What i'm doing right now is :

foreach ($highlights_posts as $highlights_post) {
        $fetched_post = get_the_category($highlights_post->ID);
            foreach ( $fetched_post as $fetch_cat) {
                if ($fetch_cat->cat_ID == $cat_sq) {
                    $sq_post_id = $fetch_cat->cat_ID;
                    break 2;
                }
            }

    }
// stuff to do like get_post($sq_post_id);

Now i realise that I would need to remove that post ID from my list $highlights_posts so I cannot pull it twice. I guess i need to learn more about arrays ?

share|improve this question
    
A query stored in an array? Code sample please. –  scribu Nov 17 '11 at 19:49
    
@scribu Sorry, maybe i'm using wrong terms. This should be an objet. First, the query : /* requete pour peupler highlights */ $highlights_posts = request_highlights($slides_id); function request_highlights($exclude_ids) { /* la requete qui va peupler le slider */ $args = array( 'numberposts' => 16, 'category' => null, 'orderby' => 'post_date', 'order' => 'DESC', 'post__not_in' => $exclude_ids, ); return get_posts( $args ); } –  Simon Nov 17 '11 at 19:50
    
Don't post the code in a comment. Update the question. –  scribu Nov 17 '11 at 19:52
    
This question makes no sense can you post code examples and say exactly what each thing is rather than what you refer to it as, e.g. someone said the FAQ page in another question but they actually meant the page showing the faq category –  Tom J Nowell Nov 17 '11 at 19:53
    
can you translate the french and put it in your original question so we can see the formatting? Its unreadable as a comment –  Tom J Nowell Nov 17 '11 at 19:53
add comment

1 Answer

up vote 1 down vote accepted
// store the IDs of the posts we've already displayed to prevent duplicates
$used_ids = array();

$highlights_posts = request_highlights($slides_id);
foreach( $highlights_posts as $post ) {
    setup_postdata($post);

    // check if we've already done this post
    if(in_array($post->ID,$used_ids)){
        // skip to the next one
        continue;
    }
    // we haven't done this post before, add it's ID to the list
    $used_ids[] = $post->ID;
    // do stuff e.g. the_title(); etc
}
wp_reset_postdata();

edit: Having seen your code would it not make more sense to put the category ID in the function or as a parameter instead of doing 'category' => null ? It would save you from doing the if statements and the category loop

share|improve this answer
    
Thanks, this enlights me about the use of setup_postdata() But I would to like to do so only to specific posts, not all of them. –  Simon Nov 17 '11 at 20:20
    
in that case you need an if statement just after setup_postdata that checks for some condition, such as if post is newer than 2 days do this, or if post is 500 characters long or more do this etc –  Tom J Nowell Nov 17 '11 at 20:22
    
Ok, I think that would work. But if I want to not display twice the same post, I need a way to store that i already have pulled it from the object. Is there any way to modify this object without having to send another query? –  Simon Nov 17 '11 at 20:37
    
reply to your edit : i have to think about it, this could be another good idea. –  Simon Nov 17 '11 at 20:38
1  
Sorry, I didn't find the accepted answer button ! Clicked now. Thank you for your help. –  Simon Nov 18 '11 at 13:54
show 12 more comments

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.