Picking the most recent post in WordPress with php - php

I am trying to do an if/else-statement on my WP-template. But i can't seem to pick the right element.
I wan't it to look for the latest post on the blog. I already added a script that add a class of .first to the latest post.
What im trying to do in dummy-php-language:
<?php
if ( class is .first) { do something to .first}
else () { do something to everything else }
?>
i've looked in the wp-documentation. But i can't seem to find anything that will select "latest post"...
Thanks
Jonas

A very simple solution would be to keep a count of the post you're at, and do something if it's the first. In the index.php, in the have_posts() loop:
<?php if (have_posts()) : $count = 0; ?>
<?php while (have_posts()) : the_post(); $count++; ?>
<?php if($count ==1) ?>
// do something to first
<?php else ?>
// do something to everything else
<?php endif; ?>
<?php endwhile; else: ?>
<?php endif; ?>

Related

Unlimited posts in custom layout PHP

Currently I am working on a Wordpress website with the posts showing in two columns running with a PHP code. The problem I am facing is that the posts showing on the website are limited to 10. Does anyone know where in the code I can make a change to show unlimited posts? Or do I need a whole new PHP code for this?
Would like to hear from you!
This is the code I am using
<?php $i = 0; ?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<?php
if($i == 0) {echo '<div class="ng-row">';}?>
<div class="half">
<h1><?php the_title(); ?></h1>
<?php the_content(); ?>
</div>
<?php $i++; if($i == 2) {$i = 0;echo '</div>';}?>
<?php endwhile; else: ?>
<?php if($i > 0) {echo '</div>';}?>
<?php endif; ?>
I've tried to change the numbers but it didn't work out well..
For an unlimited return set the posts_per_page to -1
add_action( 'pre_get_posts', 'set_posts_per_page' );
function set_posts_per_page( $query ) {
// This will set the query to return all results
$query->set( 'posts_per_page', -1 );
return $query;
}
Although be aware that this can be very bad for performance depending on the amount of posts. It should really only be done if you have a limited result set and know what that is.

WordPress : Simple php IF statement not processing

can someone explain why the else statement is not working in WordPress for the sidebar.php?
<?php if(is_front_page() ) : ?>
**content shows on main page sidebar**
<?php elseif(!is_front_page() ) : ?>
<?php // else: ?> // tried **else:** also
**some content**
**nothing is shown on any other page...**
<?php endif;?>
The is_front_page() conditional will always return false if it is used inside the loop or after the loop has ran (like in a sidebar). You can call wp_reset_query(); after your loop to reset the page query_vars.
See this answer on WPSE for more info.
Im not sure if is_front_page() exists, but just use {} around each condition result:
<?php if(is_front_page() ) { ?>
**content shows on main page sidebar**
<?php } else { ?>
// tried **else:** also
**some content**
**nothing is shown on any other page...**
<?php } ?>

How do you stop echo of multiple values with 'foreach' in PHP?

How do you when using custom fields in Wordpress echo just the first value using foreach?
Currently the code is:
<?php for(get_field('venue_event') as $post_object): ?>
<?php echo get_the_title($post_object) ?>
<?php endforeach; ?>
This takes the field from the wordpress page (the field is a link to another page), creates a link to that page using get_permalink but when I want to echo the page title it does it, but then it also echos all other values that are not needed.
If you just want the execute the first iteration of the loop, try this:
<?php foreach(get_field('venue_event') as $post_object): ?>
<?php echo get_the_title($post_object) ?>
<?php break; ?>
<?php endforeach; ?>
Wouldn't it then be easier just to use the first element of the returned array? Maybe Wordpress offers other filters that return the the page's title only.
you can just add
$counter = 0;
<?php for(get_field('venue_event') as $post_object): ?>
$counter++;
if($counter == 1)
{
<?php echo get_the_title($post_object) ?>
}
<?php endforeach; ?>

Is the syntax problematic with this PHP code for Wordpress?

Seems like the problem with this is the PHP syntax, but no luck in Wordpress forums. This first code block generates a link to the newest post in category "posts."
<?php $my_query = new WP_Query('category_name=posts&showposts=1'); ?>
<?php while ($my_query->have_posts()) : $my_query->the_post(); ?>
<?php the_title(); ?>
<?php endwhile; ?>
This next code block should display the custom field data for the latest post in "posts," with the key of the custom field being "qanda." But it doesn't and it displays nothing.
<?php $my_query = new WP_Query('category_name=posts&showposts=1'); ?>
<?php while ($my_query->have_posts()) : $my_query->the_post(); ?>
<?php echo get_post_meta($post->ID, "qanda", $single = true); ?>
<?php endwhile; ?>
Thanks, Mark
try renaming your second query, otherwise Wordpress will think it is already done
<?php
$my_other_query = new WP_Query('category_name=posts&showposts=1');
while ($my_other_query->have_posts()) : $my_other_query->the_post();
echo get_post_meta($post->ID, "qanda", true);
endwhile;
?>
Apart fromthat $single = true should just be true it looks OK... try var_dump instead of echo and see what you get.
You might need to name it something different. Wordpress might think that you have already done that set of posts, so it is starting at the end, which means it doesn't have anymore posts to process.

Filtering Search Results with Wordpress

I'm trying to setup a Search Results page with two columns. First column will present results from all categories except one ( Galleries ), and the second column will present only the Galleries category.
query_posts() simply resets my results. This is what I got so far. Broken:
<?php
$s = get_query_var('s');
query_posts('s=' . $s . '&cat=164');
?>
<?php
// First Loop
?>
<div class="contentLeft">
<ul class="postListSmall related">
<?php while (have_posts()) : the_post(); ?>
[do stuff]
<?php endwhile; ?>
<?php
// Second Loop
?>
<?php query_posts('cat=-164'); ?>
<?php rewind_posts(); ?>
<?php while (have_posts()) : the_post(); ?>
[do stuff]
<?php endwhile; ?>
<?php else : ?>
[do stuff]
<?php endif; ?>
What to do?
I know this is an old post but I am having a similar problem and thought I would share:
You are creating a query, then calling a second query, but then trying to rewind the query. That's not how the rewind function works. Take a look at the Rewind Documentation. You also say:
query_posts() simply resets my results.
Then why are you calling the rewind function immediately after the new query? Also, if you're resetting the results then why is it a different query completely? This:
$s = get_query_var('s');
query_posts('s=' . $s . '&cat=164');
Is not the same as this:
<?php query_posts('cat=-164'); ?>
<?php rewind_posts(); ?>
To get 2 column results for different categories I did the following: use only one loop, don't use rewind, use get_the_category in an if statement in your loop, for example:
<?php
$s = get_query_var('s');
query_posts('s=' . $s . '&cat=164');
while (have_posts()) : the_post();
foreach(get_the_category() as $category){
if($category->name == "category name"){
//Concatenate to the left div
} else {
//concatenate to the right div
} ?>
Hope this helps.

Categories