Saya cukup baru dalam pengembangan tema WordPress dan saya tidak begitu ke PHP (saya berasal dari Jawa dan C #) dan memiliki situasi berikut dalam tema khusus ini
Seperti yang dapat Anda lihat di beranda, saya pertama kali menunjukkan bagian (bernama Articoli in proofenza ) yang berisi posting unggulan (saya sudah menerapkannya menggunakan tag tertentu) dan di bawahnya ada area lain (bernama Ultimi Articoli ) yang berisi posting terbaru itu bukan posting unggulan.
Untuk melakukannya saya menggunakan kode ini:
<section id="blog-posts">
<header class="header-sezione">
<h2>Articoli in evidenza</h2>
</header>
<!--<?php query_posts('tag=featured');?>-->
<?php
$featured = new WP_Query('tag=featured');
if ($featured->have_posts()) :
while ($featured->have_posts()) : $featured->the_post();
/*
* Include the post format-specific template for the content. If you want to
* use this in a child theme, then include a file called called content-___.php
* (where ___ is the post format) and that will be used instead.
*/
get_template_part('content', get_post_format());
endwhile;
wp_reset_postdata();
else :
// If no content, include the "No posts found" template.
get_template_part('content', 'none');
endif;
?>
<header class="header-sezione">
<h2>Ultimi Articoli</h2>
</header>
<?php
// get the term using the slug and the tag taxonomy
$term = get_term_by( 'slug', 'featured', 'post_tag' );
// pass the term_id to tag__not_in
query_posts( array( 'tag__not_in' => array ( $term->term_id )));
?>
<?php
if (have_posts()) :
// Start the Loop.
while (have_posts()) : the_post();
/*
* Include the post format-specific template for the content. If you want to
* use this in a child theme, then include a file called called content-___.php
* (where ___ is the post format) and that will be used instead.
*/
get_template_part('content', get_post_format());
endwhile;
else :
// If no content, include the "No posts found" template.
get_template_part('content', 'none');
endif;
?>
</section>
Ini berfungsi dengan baik, tapi saya ragu tentang kualitas solusi ini dan bagaimana cara kerjanya.
Untuk memilih semua posting unggulan , saya menggunakan baris ini yang membuat WP_Query
objek baru yang mendefinisikan kueri yang memiliki tag spesifik featured
:
$featured = new WP_Query('tag=featured');
Kemudian saya mengulangi hasil permintaan ini menggunakan have_posts()
metode.
Jadi, dari apa yang saya mengerti, ini bukan permintaan utama WordPress, tetapi ini adalah permintaan baru yang saya buat. Dari apa yang saya mengerti, lebih baik membuat kueri baru (seperti yang dilakukan) dan tidak menggunakan kueri utama ketika saya ingin melakukan operasi semacam ini.
Apakah itu benar, atau saya kehilangan sesuatu? Jika itu benar, dapatkah Anda menjelaskan kepada saya, mengapa lebih baik membuat kueri khusus baru dan tidak mengubah kueri utama Wordpress?
Ok, lanjutkan. Saya menunjukkan semua posting yang tidak memiliki tag 'fitur'. Untuk melakukan ini, saya menggunakan cuplikan kode ini, yang sebaliknya, memodifikasi kueri utama:
<?php
// get the term using the slug and the tag taxonomy
$term = get_term_by( 'slug', 'featured', 'post_tag' );
// pass the term_id to tag__not_in
query_posts( array( 'tag__not_in' => array ( $term->term_id )));
?>
<?php
if (have_posts()) :
// Start the Loop.
while (have_posts()) : the_post();
get_template_part('content', get_post_format());
endwhile;
else :
// If no content, include the "No posts found" template.
get_template_part('content', 'none');
endif;
?>
Jadi saya pikir, ini sangat mengerikan. Apakah itu benar
MEMPERBARUI:
Untuk melakukan operasi yang sama saya menemukan fungsi ini (dalam jawaban yang bagus di bawah) yang telah saya tambahkan ke functions.php
function exclude_featured_tag( $query ) {
if ( $query->is_home() && $query->is_main_query() ) {
$query->set( 'tag__not_in', 'array(ID OF THE FEATURED TAG)' );
}
}
add_action( 'pre_get_posts', 'exclude_featured_tag' );
Fungsi ini memiliki pengait yang dipanggil setelah objek variabel kueri dibuat, tetapi sebelum kueri yang sebenarnya dijalankan.
Jadi, dari apa yang saya mengerti, dibutuhkan objek permintaan sebagai parameter input dan memodifikasi (sebenarnya memfilter) dengan memilih semua posting tidak termasuk tag tertentu (dalam kasus saya featured
posting tag)
Jadi, bagaimana saya bisa menggunakan kueri sebelumnya (yang digunakan untuk menampilkan posting unggulan) dengan fungsi ini untuk hanya menampilkan posting tidak ditampilkan dalam tema saya? Atau apakah saya harus membuat permintaan baru?
sumber