Gostaria de implementar algo como "postagens recentes" em uma página estática:
http://themes.codehunk.me/insignio/ (no rodapé)
Como eu seria capaz de fazer isso sem um widget?
Gostaria de implementar algo como "postagens recentes" em uma página estática:
http://themes.codehunk.me/insignio/ (no rodapé)
Como eu seria capaz de fazer isso sem um widget?
Respostas:
Eu costumo usar esta abordagem:
abordagem errada
<?php query_posts( array(
'category_name' => 'news',
'posts_per_page' => 3,
)); ?>
<?php if( have_posts() ): while ( have_posts() ) : the_post(); ?>
<?php the_excerpt(); ?>
<?php endwhile; ?>
<?php else : ?>
<p><?php __('No News'); ?></p>
<?php endif; ?>
Com a ajuda de @swissspidy, a maneira correta é esta:
<?php
// the query
$the_query = new WP_Query( array(
'category_name' => 'news',
'posts_per_page' => 3,
));
?>
<?php if ( $the_query->have_posts() ) : ?>
<?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
<?php the_title(); ?>
<?php the_excerpt(); ?>
<?php endwhile; ?>
<?php wp_reset_postdata(); ?>
<?php else : ?>
<p><?php __('No News'); ?></p>
<?php endif; ?>
Veja @codex para mais informações.
Depende do que você está procurando. Se você deseja criar uma "página de postagens" - em outras palavras, crie um novo arquivo de modelo de página - você pode criar um loop secundário nessa página.
O codex tem um exemplo disso e aqui está outro exemplo muito simples.
<?php
/*
Template Name: Page of Posts
*/
get_header();
?>
<?php while( have_posts() ): the_post(); /* start main loop */ ?>
<h1><?php the_title(); ?></h1>
<?php
/* Start Secondary Loop */
$other_posts = new WP_Query( /*maybe some args here? */ );
while( $others_posts->have_posts() ): $other_posts->the_post();
?>
You can do anything you would in the main loop here and it will
apply to the secondary loop's posts
<?php
endwhile; /* end secondary loop */
wp_reset_postdata(); /* Restore the original queried page to the $post variable */
?>
<?php endwhile; /* End the main loop */ ?>
Se você está procurando algo que possa ser inserido em qualquer página, a melhor solução seria um código de acesso . Você precisaria criar um código de acesso que busque várias postagens e as retorne em uma lista (ou o que você quiser). Um exemplo:
<?php
add_action( 'init', 'wpse36453_register_shortcode' );
/**
* Registers the shortcode with add_shortcode so WP knows about it.
*/
function wpse36453_register_shortcode()
{
add_shortcode( 'wpse36453_posts', 'wpse36453_shortcode_cb' );
}
/**
* The call back function for the shortcode. Returns our list of posts.
*/
function wpse36453_shortcode_cb( $args )
{
// get the posts
$posts = get_posts(
array(
'numberposts' => 3
)
);
// No posts? run away!
if( empty( $posts ) ) return '';
/**
* Loop through each post, getting what we need and appending it to
* the variable we'll send out
*/
$out = '<ul>';
foreach( $posts as $post )
{
$out .= sprintf(
'<li><a href="%s" title="%s">%s</a></li>',
get_permalink( $post ),
esc_attr( $post->post_title ),
esc_html( $post->post_title )
);
}
$out .= '</ul>';
return $out;
}
functions.php
Há um guia para este caso preciso no codex wordpress. Veja aqui : eu colo o código aqui porque é bastante curto, para obter mais informações, acesse o site wordpress.org.
<?php
$args = array( 'numberposts' => 10, 'order'=> 'ASC', 'orderby' => 'title' );
$postslist = get_posts( $args );
foreach ($postslist as $post) : setup_postdata($post); ?>
<div>
<?php the_date(); ?>
<br />
<?php the_title(); ?>
<?php the_excerpt(); ?>
</div>
<?php endforeach; ?>
O Wordpress fornece uma função para esse tipo de solicitação: query_posts () .
query_posts () é a maneira mais fácil de alterar a consulta padrão que o WordPress usa para exibir postagens. Use query_posts () para exibir postagens diferentes daquelas que normalmente apareceriam em um URL específico.
Por exemplo, na página inicial, você normalmente veria as 10 últimas postagens. Se você deseja mostrar apenas 5 postagens (e não se importa com paginação), pode usar query_posts () assim:
query_posts ('posts_per_page = 5');
Depois de executar a consulta, você pode exibir as postagens da maneira que desejar.
<?php $the_query = new WP_Query( 'posts_per_page=3' );
while ($the_query -> have_posts()) : $the_query -> the_post();?>
<?php /*html in here etc*/ the_title(); ?>
<?php endwhile;wp_reset_postdata();?>
query_posts()
é quase sempre uma má idéia.