कस्टम पोस्ट प्रकार के लिए क्वेरी? [बन्द है]


16

मैंने कस्टम पोस्ट टाइप UI प्लगइन स्थापित किया है । इस प्लगइन की सक्रियता के बाद मैंने एक कस्टम पोस्ट टाइप बनाया है जिसे कहा जाता है portfolio। अब मैं फ्रंट-एंड में पोर्टफोलियो पेज पर इसका उपयोग करना चाहता हूं। मैं कस्टम पोस्ट प्रकार के सभी पोस्टportfolio कैसे लाऊं ?

जवाबों:


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

जो सामान्य portfolioप्रकार और पोस्ट दोनों प्रकार के अंदर दिखाता है

या

query_posts('post_type=portfolio');

केवल के लिए portfolio

सामान्य WP क्वेरी के रूप में उपयोग करें - कोडेक्स पढ़ें: http://codex.wordpress.org/Function_Reference/query_posts#Usage और http://codex.wordpress.org/Function_Reference/query_osts#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
यह एक काफी पुराना उत्तर है - लेकिन स्पष्ट होने के लिए, ऐसा नहीं है जिस तरह से आपको ऐसा करना चाहिए। यह लगभग अनिवार्य रूप से 404s और अन्य समस्याओं का मेजबान होगा। कृपया @ kaiser के उत्तर या इस पोस्ट को देखें कि आपको इसका उपयोग क्यों नहीं करना चाहिएquery_posts()
स्टीफन हैरिस

16

देर से जवाब मुख्य उत्तर का उपयोग करता है query_posts(), जिसे कभी नहीं किया जाना चाहिए ।

एक फिल्टर का उपयोग करें

pre_get_postsफ़िल्टर का उपयोग करें और portfolioमुख्य क्वेरी के लिए पोस्ट प्रकार सेट करें । यह निर्धारित करने के लिए कि आप यह फ़िल्टर कहाँ चाहते हैं, सशर्त टैग का उपयोग करें ।

त्वरित उदाहरण

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

अस्वीकरण

उपरोक्त कोड एक प्लगइन है, लेकिन बस functions.phpअपने विषय की फ़ाइल में भरवा सकते हैं (जो अनुशंसित नहीं है )।


इसे कार्यों में जोड़ने की अनुशंसा क्यों नहीं की गई है? निश्चित रूप से, यदि साइट व्यवस्थापक विषय बदलता है, तो उन्हें इस नए विषय के साथ होम पेज पर पोर्टफोलियो को प्रदर्शित करने के तरीके को संबोधित करने की आवश्यकता होगी। तो, मैं कहूंगा कि यह एक प्लगइन के बजाय कार्यों में इसे जोड़ने के लिए वैध है। या क्या मैं कुछ न कुछ भूल रहा हूं?
फिलिप हेले

@PHHHley जैसा कि आपने कहा, डेटा अदृश्य होगा और आपको कोड को कॉपी और पेस्ट करना होगा। प्रश्नों के लिए भारी, तर्क संशोधनों को प्लगइन्स के माध्यम से सबसे अच्छी तरह से परोसा जाता है, जबकि प्रदर्शन और स्टाइल को थीम में रखा जाना चाहिए।
केसर

ऐसा नहीं है कि कोड विषय के लिए विशिष्ट है।
फिल हिले

@PHHHley एक पद प्रकार कभी भी एक विषय के लिए विशिष्ट नहीं होना चाहिए ।
कैसर

ठीक है, अगर आप संपूर्णता पर कुछ टाइट-टू-टेट में प्राप्त करना चाहते हैं तो ठीक है। हालाँकि, यह कहना सही नहीं है कि किसी भी डिज़ाइन विशिष्ट कोड को प्लग-इन से बाहर नहीं रखा जाना चाहिए। बहुत बार ऐसा होता है जब यह उचित नहीं है।
फिल हिले

4

अपने मुख्य लूप में अपने एकल सीपीटी पृष्ठों को जोड़ने के लिए इस कोड को अपने बच्चे के थीम फ़ंक्शन फ़ाइल (अनुशंसित) में जोड़ें

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;

}

स्रोत http://codex.wordpress.org/Post_Types

या एक कस्टम आर्काइव-पोर्टफोलियो.फैप पेज टेम्प्लेट बनाएं जो केवल आपके सीपीटी पृष्ठों को प्रदर्शित करेगा। यह केवल करने की आवश्यकता है यदि आपने प्लगइन सेटिंग्स का उपयोग करके एक संग्रह पृष्ठ नहीं जोड़ा है।

उदाहरण: 'has_archive' => सत्य,

आप यह भी नियंत्रित कर सकते हैं कि इस कोड का उपयोग करके संग्रह पृष्ठ पर कितने पृष्ठ प्रदर्शित किए गए हैं और वे किस क्रम में प्रदर्शित हैं:

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

    }

}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.