Pertanyaan untuk jenis posting khusus? [Tutup]

16

Saya telah menginstal plugin UI Custom Post Type . Setelah aktivasi plugin ini saya telah membuat jenis posting kustom yang disebut portfolio. Sekarang saya ingin menggunakan ini pada halaman portofolio di front-end. Bagaimana cara mengambil semua kiriman yang bertipe kiriman khususportfolio ?

shalu
sumber

Jawaban:

22
query_posts( array( 'post_type' => array('post', 'portfolio') ) );

yang menampilkan tulisan normal dan tulisan dalam portfoliojenis

atau

query_posts('post_type=portfolio');

hanya untuk portfolio.

Gunakan sebagai Query WP normal - baca Codex: http://codex.wordpress.org/Function_Reference/query_posts#Usage dan http://codex.wordpress.org/Function_Reference/query_posts#Post_.26_Page_Parameters

<?php 
    query_posts(array( 
        'post_type' => 'portfolio',
        'showposts' => 10 
    ) );  
?>
<?php while (have_posts()) : the_post(); ?>
        <h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2>
        <p><?php echo get_the_excerpt(); ?></p>
<?php endwhile;?>
Martin-Al
sumber
6
Ini adalah jawaban yang cukup lama - tetapi untuk menjadi jelas, tidak mungkin Anda melakukan ini. Ini hampir pasti akan mengarah ke 404 dan sejumlah masalah lainnya. Silakan lihat jawaban @ kaiser atau posting ini tentang mengapa Anda tidak boleh menggunakanquery_posts()
Stephen Harris
16

Jawaban terlambat sebagai jawaban utama yang digunakan query_posts(), yang seharusnya tidak pernah dilakukan.

Gunakan filter

Gunakan pre_get_postsfilter dan cukup atur portfoliojenis posting untuk permintaan utama. Gunakan Tag Bersyarat untuk menentukan di mana Anda ingin memiliki filter ini.

Contoh cepat

<?php
defined( 'ABSPATH' ) OR exit;
/* Plugin Name: (#6417) "Portfolio" post type in query */

add_filter( 'pre_get_posts', 'wpse_6417_portfolio_posts' );
function wpse_6417_portfolio_posts( $query )
{
    if (
        ! $query->is_main_query()
        // Here we can check for all Conditional Tags
        OR ! $query->is_archive() // For e.g.: Every archive will feature both post types
    )
        return $query;

    $query->set( 'post_type', array( 'post', 'portfolio' ) );

    return $query;
}

Penolakan

Kode di atas adalah plugin, tetapi bisa dengan mudah dimasukkan ke dalam functions.phpfile tema Anda (yang tidak disarankan).

kaisar
sumber
mengapa tidak disarankan untuk menambahkannya ke fungsi? Tentunya, jika admin situs mengubah tema, mereka perlu membahas cara menampilkan portofolio di halaman beranda dengan tema baru ini. Jadi, saya akan mengatakan itu sama validnya untuk menambahkan ini dalam fungsi daripada sebuah plugin. Atau apakah saya melewatkan sesuatu?
Phill Healey
@ PhillHealey Seperti yang Anda katakan, data tidak akan terlihat dan Anda harus menyalin dan menempelkan kode di sekitar. Modifikasi logika yang berat untuk kueri paling baik dilayani melalui plugin, sementara tampilan dan gaya harus disimpan dalam tema.
kaiser
Tidak jika kode itu khusus untuk tema.
Phill Healey
@PhillHealey Jenis tulisan tidak boleh khusus untuk tema.
kaiser
Ok, jika Anda ingin mendapatkan beberapa tit-for-tat absolut maka baik-baik saja. Namun, tidak benar untuk mengatakan bahwa tidak ada desain kode khusus yang harus didorong ke plugin. Ada banyak waktu ketika itu tidak sesuai.
Phill Healey
4

Tambahkan kode ini ke file fungsi tema anak Anda (disarankan) untuk menambahkan halaman CPT tunggal Anda ke loop utama Anda

add_action( 'pre_get_posts', 'add_custom_post_types_to_loop' );

function add_custom_post_types_to_loop( $query ) {

if ( is_home() && $query->is_main_query() )

$query->set( 'post_type', array( 'post', 'portfolio' ) );

return $query;

}

Sumber http://codex.wordpress.org/Post_Types

Atau buat template halaman custom archive-portfolio.php yang hanya akan menampilkan halaman CPT Anda. Ini hanya perlu dilakukan jika Anda belum menambahkan halaman arsip menggunakan pengaturan plugin.

Contoh: 'has_archive' => true,

Anda juga dapat mengontrol berapa banyak halaman yang ditampilkan dan urutan yang ditampilkan pada halaman arsip menggunakan kode ini:

add_action( 'pre_get_posts', 'cpt_items' );

function cpt_items( $query ) {

if( $query->is_main_query() && !is_admin() && is_post_type_archive( 'portfolio' ) ) {

$query->set( 'posts_per_page', '8' );

$query->set( 'order', 'ASC' );

    }

}
Brad Dalton
sumber