Özel yazı türü için sorgulama? [kapalı]


16

Custom Post Type UI eklentisini yükledim . Bu eklentiyi etkinleştirdikten sonra adlı özel bir yazı türü oluşturdum portfolio. Şimdi bunu ön uçtaki portföy sayfasında kullanmak istiyorum. Özel yazı türündeki tümportfolio yayınları nasıl alırım ?

Yanıtlar:


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

hem normal yayınları hem de portfoliotür içindeki yayınları gösterir

veya

query_posts('post_type=portfolio');

sadece portfolio.

Normal WP Sorgusu olarak kullanın - Kodeksi okuyun: http://codex.wordpress.org/Function_Reference/query_posts#Usage ve 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;?>

6
Bu oldukça eski bir cevaptır - ancak açık olmak gerekirse, bunu yapmanın yolu yoktur. Neredeyse kaçınılmaz olarak 404'lere ve bir dizi başka soruna yol açacaktır. Lütfen @ kaiser'ın cevaplarını veya neden kullanmamanız gerektiğine dair buquery_posts()
Stephen Harris

16

Asıl yanıtın kullandığı geç cevap query_posts(), asla yapılmaması gerekir .

Filtre kullanma

pre_get_postsFiltreyi kullanın ve portfolioana sorgu için gönderi türünü ayarlayın . Bu filtreye sahip olmak istediğiniz yeri belirlemek için Koşullu Etiketler'i kullanın .

Hızlı Örnek

<?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;
}

feragat

Yukarıdaki kod bir eklenti olmakla basitçe dolması alabilirsiniz functions.php(edilmektedir temanızın dosyası değil önerilir).


neden işlevlere eklenmesi önerilmez? Şüphesiz, site yöneticisi temayı değiştirirse, yine de bu yeni temayla portföyün ana sayfada nasıl görüntüleneceğini ele almaları gerekir. Yani, bunu bir eklenti yerine işlevlere eklemenin geçerli olduğunu söyleyebilirim. Yoksa bir şey mi kaçırıyorum?
Phill Healey

@PhillHealey Dediğiniz gibi, veriler görünmez olacak ve kodu kopyalayıp yapıştırmanız gerekecektir. Sorgularda ağır, mantıksal değişiklikler en iyi eklentiler aracılığıyla sunulur, ancak görüntüleme ve stil temalarda tutulmalıdır.
kaiser

Bu kod temaya özelse değil.
Phill Healey

@PhillHealey Bir gönderi türü asla bir temaya özgü olmamalıdır .
kaiser

Tamam, mutlak üzerinde bazı baştankara-tat almak istiyorsanız o zaman iyi. Ancak, hiçbir tasarıma özel kodun bir eklentiye gönderilmemesi gerektiğini söylemek doğru değildir. Bunun uygun olmadığı birçok zaman vardır.
Phill Healey

4

Tek CPT sayfalarınızı ana döngünüze eklemek için bu kodu alt temalar işlevler dosyasına ekleyin (önerilir)

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;

}

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

Veya yalnızca CPT sayfalarınızı görüntüleyecek özel bir arşiv-portfolio.php sayfa şablonu oluşturun. Bu, yalnızca eklenti ayarlarını kullanarak bir arşiv sayfası eklemediyseniz yapılmalıdır.

Örnek: 'has_archive' => true,

Bu kodu kullanarak kaç sayfanın görüntüleneceğini ve arşiv sayfasında görüntülenme sırasını da kontrol edebilirsiniz:

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' );

    }

}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.