Как вывести последние 3 записи (свежие записи) на статической странице?
Я хочу реализовать что-то вроде "свежих записей" на статической странице:
http://themes.codehunk.me/insignio/ (в подвале)
Как я могу сделать это без использования виджета?

Обычно я использую такой подход:
неправильный подход
<?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 __('Новостей нет'); ?></p>
<?php endif; ?>
С помощью @swissspidy правильный способ выглядит так:
<?php
// запрос
$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 __('Новостей нет'); ?></p>
<?php endif; ?>
Подробнее см. @codex.

Мне нравится ссылаться на http://wordpress.stackexchange.com/a/1755/12404, чтобы показать, почему использование query_posts()
почти всегда плохая идея.

Это зависит от того, чего вы хотите достичь. Если вам нужна "страница записей" — другими словами, создать новый файл шаблона страницы — вы можете создать вторичный цикл на этой странице.
Кодекс содержит пример этого, и вот еще один, очень упрощенный пример.
<?php
/*
Template Name: Страница записей
*/
get_header();
?>
<?php while( have_posts() ): the_post(); /* начало основного цикла */ ?>
<h1><?php the_title(); ?></h1>
<?php
/* Начало вторичного цикла */
$other_posts = new WP_Query( /* возможно, какие-то аргументы здесь? */ );
while( $others_posts->have_posts() ): $other_posts->the_post();
?>
Здесь вы можете делать все, что делаете в основном цикле, и это будет
применяться к записям вторичного цикла
<?php
endwhile; /* конец вторичного цикла */
wp_reset_postdata(); /* Восстановление оригинальной страницы в переменной $post */
?>
<?php endwhile; /* Конец основного цикла */ ?>
Если вам нужно что-то, что можно вставить на любую страницу, лучшим решением будет шорткод. Вам нужно будет создать шорткод, который получает несколько записей и возвращает их в виде списка (или в любом другом виде). Пример:
<?php
add_action( 'init', 'wpse36453_register_shortcode' );
/**
* Регистрирует шорткод с помощью add_shortcode, чтобы WordPress знал о нем.
*/
function wpse36453_register_shortcode()
{
add_shortcode( 'wpse36453_posts', 'wpse36453_shortcode_cb' );
}
/**
* Функция обратного вызова для шорткода. Возвращает наш список записей.
*/
function wpse36453_shortcode_cb( $args )
{
// получаем записи
$posts = get_posts(
array(
'numberposts' => 3
)
);
// Нет записей? Выходим!
if( empty( $posts ) ) return '';
/**
* Проходим по каждой записи, получаем нужные данные и добавляем их в
* переменную, которую вернем
*/
$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;
}

Могу ли я поместить это в header.php или нужно разместить где-то еще?

Первый пример можно разместить в любом месте вашей темы. Второй пример с шорткодом должен быть помещен в functions.php

В WordPress Codex есть руководство для данного конкретного случая. Ознакомьтесь с ним здесь: Я привожу код здесь, так как он довольно короткий, для получения дополнительной информации посетите сайт 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; ?>

WordPress предоставляет функцию для такого рода запросов: query_posts().
query_posts() — это самый простой способ изменить стандартный запрос, который WordPress использует для отображения записей. Используйте query_posts(), чтобы отображать другие записи, отличные от тех, которые обычно отображаются по определенному URL.
Например, на главной странице обычно отображаются последние 10 записей. Если вы хотите показать только 5 записей (и вас не волнует пагинация), вы можете использовать query_posts() следующим образом:
query_posts( 'posts_per_page=5' );
После выполнения запроса вы можете отображать записи так, как вам нужно.

<?php
// Создаем новый запрос для получения 3 последних записей
$the_query = new WP_Query( 'posts_per_page=3' );
// Начинаем цикл вывода записей
while ($the_query -> have_posts()) : $the_query -> the_post();?>
<?php /* здесь может быть HTML разметка */ the_title(); ?>
<?php
endwhile;
// Сбрасываем данные запроса
wp_reset_postdata();
?>
