Come visualizzare gli ultimi 3 post (post recenti) in una pagina statica?
Vorrei implementare qualcosa come "post recenti" in una pagina statica:
http://themes.codehunk.me/insignio/ (nel footer)
Come potrei fare questo senza usare un widget?

Di solito utilizzo questo approccio:
approccio sbagliato
<?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 __('Nessuna Notizia'); ?></p>
<?php endif; ?>
Con l'aiuto di @swissspidy il modo corretto è questo:
<?php
// la 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 __('Nessuna Notizia'); ?></p>
<?php endif; ?>
Vedi @codex per maggiori informazioni.

Mi piace fare riferimento a http://wordpress.stackexchange.com/a/1755/12404 per mostrare perché usare query_posts()
è quasi sempre una cattiva idea.

Dipende un po' da cosa stai cercando di ottenere. Se vuoi creare una "pagina di articoli" - in altre parole, creare un nuovo file di template per la pagina - puoi creare un loop secondario su quella pagina.
Il codex contiene un esempio di questo e qui c'è un altro esempio molto semplificato.
<?php
/*
Template Name: Pagina di Articoli
*/
get_header();
?>
<?php while( have_posts() ): the_post(); /* inizia il loop principale */ ?>
<h1><?php the_title(); ?></h1>
<?php
/* Inizia il Loop Secondario */
$other_posts = new WP_Query( /*potresti inserire degli argomenti qui? */ );
while( $others_posts->have_posts() ): $other_posts->the_post();
?>
Puoi fare qualsiasi cosa che faresti nel loop principale qui e verrà
applicato agli articoli del loop secondario
<?php
endwhile; /* fine del loop secondario */
wp_reset_postdata(); /* Ripristina la pagina originale interrogata nella variabile $post */
?>
<?php endwhile; /* Fine del loop principale */ ?>
Se stai cercando qualcosa che puoi inserire in qualsiasi pagina, la soluzione migliore sarebbe un shortcode. Dovresti creare uno shortcode che recupera diversi articoli e li restituisce in una lista (o in qualsiasi altro formato desideri). Ecco un esempio:
<?php
add_action( 'init', 'wpse36453_register_shortcode' );
/**
* Registra lo shortcode con add_shortcode così che WordPress ne sia a conoscenza.
*/
function wpse36453_register_shortcode()
{
add_shortcode( 'wpse36453_posts', 'wpse36453_shortcode_cb' );
}
/**
* La funzione di callback per lo shortcode. Restituisce la nostra lista di articoli.
*/
function wpse36453_shortcode_cb( $args )
{
// ottieni gli articoli
$posts = get_posts(
array(
'numberposts' => 3
)
);
// Nessun articolo? scappa!
if( empty( $posts ) ) return '';
/**
* Scorri ogni articolo, prendi ciò di cui hai bisogno e aggiungilo alla
* variabile che restituiremo
*/
$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;
}

Posso inserirlo in header.php o dovrei metterlo da qualche altra parte?

Il primo esempio può essere inserito ovunque nel tuo tema. Il secondo esempio, quello con lo shortcode, dovrebbe essere inserito in functions.php

C'è una guida per questo caso preciso nel codex di WordPress. Vedi qui: Incollo il codice qui perché è abbastanza breve, per maggiori informazioni vai sul sito wordpress.org.
<?php
// Recupera 10 post ordinati per titolo in ordine crescente
$args = array( 'numberposts' => 10, 'order'=> 'ASC', 'orderby' => 'title' );
$postslist = get_posts( $args );
// Loop attraverso ogni post
foreach ($postslist as $post) : setup_postdata($post); ?>
<div>
<?php the_date(); ?> // Mostra la data del post
<br />
<?php the_title(); ?> // Mostra il titolo del post
<?php the_excerpt(); ?> // Mostra l'estratto del post
</div>
<?php endforeach; ?>

WordPress fornisce una funzione per questo tipo di richiesta: query_posts().
query_posts() è il modo più semplice per modificare la query predefinita che WordPress utilizza per visualizzare gli articoli. Usa query_posts() per mostrare articoli diversi da quelli che normalmente apparirebbero a un URL specifico.
Ad esempio, nella homepage, normalmente vedresti gli ultimi 10 articoli. Se vuoi mostrarne solo 5 (e non ti interessa la paginazione), puoi usare query_posts() in questo modo:
query_posts( 'posts_per_page=5' );
Una volta eseguita la query, puoi visualizzare gli articoli nel modo che preferisci.

<?php $the_query = new WP_Query( 'posts_per_page=3' );
// Esegue una query per ottenere gli ultimi 3 post
while ($the_query -> have_posts()) : $the_query -> the_post();?>
<?php /* codice html qui etc */ the_title(); // Mostra il titolo del post ?>
<?php endwhile; // Fine del ciclo
wp_reset_postdata(); // Reimposta i dati del post ?>
