ฉันต้องการใช้งานบางอย่างเช่น "โพสต์ล่าสุด" ในหน้าคงที่:
http://themes.codehunk.me/insignio/ (ที่ส่วนท้าย)
ฉันจะทำสิ่งนี้โดยไม่มีวิดเจ็ตได้อย่างไร?
ฉันต้องการใช้งานบางอย่างเช่น "โพสต์ล่าสุด" ในหน้าคงที่:
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 __('No News'); ?></p>
<?php endif; ?>
ด้วยความช่วยเหลือของ @swissspidy วิธีที่ถูกต้องคือวิธีนี้:
<?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; ?>
ดู@codexสำหรับข้อมูลเพิ่มเติม
มันขึ้นอยู่กับว่าคุณจะทำอะไร หากคุณต้องการทำ "หน้าโพสต์" - คำอื่น ๆ ให้สร้างไฟล์เทมเพลตหน้าใหม่ - คุณสามารถสร้างลูปรองในหน้านั้นได้
Codexมีตัวอย่างของสิ่งนี้และนี่เป็นอีกตัวอย่างที่ถูกถอดออกมามาก
<?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 */ ?>
หากคุณกำลังมองหาบางสิ่งบางอย่างที่คุณสามารถวางลงในหน้าเว็บใด ๆ ทางออกที่ดีที่สุดจะเป็นรหัส คุณจะต้องสร้างรหัสย่อที่ดึงข้อความจากหลาย ๆ โพสต์และส่งกลับไปยังรายการ (หรืออะไรก็ตามที่คุณต้องการ) ตัวอย่าง:
<?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
มีคำแนะนำสำหรับกรณีที่แม่นยำนี้ที่ 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 $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()
จึงเป็นแนวคิดที่ไม่ดี