Tôi muốn triển khai một cái gì đó như "bài viết gần đây" trong một trang tĩnh:
http://theme.codehunk.me/insignio/ (ở chân trang)
Làm thế nào tôi có thể làm điều này mà không cần một widget?
Tôi muốn triển khai một cái gì đó như "bài viết gần đây" trong một trang tĩnh:
http://theme.codehunk.me/insignio/ (ở chân trang)
Làm thế nào tôi có thể làm điều này mà không cần một widget?
Câu trả lời:
Tôi thường sử dụng phương pháp này:
tiếp cận sai
<?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; ?>
Với sự giúp đỡ của @swissspidy , cách chính xác là cách này:
<?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; ?>
Xem @codex để biết thêm.
Nó phụ thuộc vào những gì bạn sẽ làm. Nếu bạn muốn thực hiện "trang bài viết" - nói cách khác, hãy tạo tệp mẫu trang mới - bạn có thể tạo một vòng lặp phụ trên trang đó.
Codex có một ví dụ về điều này và đây là một ví dụ khác, rất đơn giản.
<?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 */ ?>
Nếu bạn đang tìm kiếm thứ gì đó mà bạn có thể thả vào bất kỳ trang nào, giải pháp tốt nhất sẽ là một shortcode . Bạn sẽ cần phải tạo một shortcode tìm nạp một số bài đăng và trả lại chúng trong một danh sách (hoặc bất cứ điều gì bạn muốn). Một ví dụ:
<?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
Có một hướng dẫn cho trường hợp chính xác này tại codex wordpress. Xem nó ở đây : Tôi dán mã ở đây vì nó khá ngắn, để biết thêm thông tin hãy truy cập trang web 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 cung cấp một hàm cho loại yêu cầu đó: query_posts () .
query_posts () là cách dễ nhất để thay đổi truy vấn mặc định mà WordPress sử dụng để hiển thị các bài đăng. Sử dụng query_posts () để hiển thị các bài đăng khác với những bài viết thường hiển thị tại một URL cụ thể.
Ví dụ: trên trang chủ, thông thường bạn sẽ thấy 10 bài đăng mới nhất. Nếu bạn muốn chỉ hiển thị 5 bài đăng (và không quan tâm đến phân trang), bạn có thể sử dụng query_posts () như vậy:
query_posts ('Post_per_page = 5');
Khi bạn đã thực hiện truy vấn, bạn có thể hiển thị các bài đăng theo cách bạn muốn.
<?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()
hầu như luôn luôn là một ý tưởng tồi.