फ्रंट पेज के रूप में कस्टम पोस्ट टाइप आर्काइव का उपयोग कैसे करें?


16

मैं साइट के फ्रंट पेज के रूप में एक कस्टम पोस्ट टाइप आर्काइव का उपयोग करना चाहता हूं, ताकि

 http://the_site.com/

मेरी archive-{post-type}.phpफ़ाइल के अनुसार प्रदर्शित एक कस्टम पोस्ट प्रकार संग्रह है ।

आदर्श रूप से मैं is_front_page()अपनी functions.phpफ़ाइल का उपयोग करके क्वेरी को बदलना चाहूंगा । मैंने निम्नलिखित की कोशिश की, "होम" नामक एक पृष्ठ को मेरे सामने वाले पृष्ठ के रूप में:

 add_filter('pre_get_posts', 'my_get_posts');
 function my_get_posts($query){
     global $wp_the_query;
     if(is_front_page()&&$wp_the_query===$query){
        $query->set('post_type','album');
        $query->set('posts_per_page',-1);
     }
     return $query;
 }

लेकिन सामने वाला पेज "होम" की सामग्री को लौटा रहा है और लगता है कि कस्टम क्वेरी को अनदेखा कर रहा है।

मैं क्या गलत कर रहा हूं? क्या इस बारे में जाने का कोई बेहतर तरीका है?


is_front_page () pre_get_posts के साथ काम नहीं करेगा
ब्रैड डाल्टन

जवाबों:


27

आपके द्वारा अपने होम पेज के रूप में एक स्थैतिक पृष्ठ निर्धारित करने के बाद आप इसे अपने साथ जोड़ सकते हैं functions.phpऔर आप जाने के लिए अच्छे हैं। यह archive-POSTTYPE.phpटेम्पलेट को सही ढंग से कॉल करेगा ।

add_action("pre_get_posts", "custom_front_page");
function custom_front_page($wp_query){
    //Ensure this filter isn't applied to the admin area
    if(is_admin()) {
        return;
    }

    if($wp_query->get('page_id') == get_option('page_on_front')):

        $wp_query->set('post_type', 'CUSTOM POST TYPE NAME HERE');
        $wp_query->set('page_id', ''); //Empty

        //Set properties that describe the page to reflect that
        //we aren't really displaying a static page
        $wp_query->is_page = 0;
        $wp_query->is_singular = 0;
        $wp_query->is_post_type_archive = 1;
        $wp_query->is_archive = 1;

    endif;

}

इस फ़ंक्शन if(is_admin()) return;को बहुत शुरुआत में चाहिए, अन्यथा यह व्यवस्थापक क्षेत्र के साथ खिलवाड़ करता है।
ब्रासोफिलो

1
जबकि यह मेरे लिए काम करता था, मेरे प्राथमिक और माध्यमिक मेनू परिणाम के रूप में गायब हो गए।
सुपर

यह लगभग सही है। यह कोड सभी wp_queries को बदल रहा है, इसलिए यह होना चाहिए अगर ($ wp_query-> मिल .....) के बजाय (is_home ()) हो
Leo Caseiro

मैं उसी का उपयोग कर रहा हूं लेकिन फ्रंट पेज के बजाय मेरे कस्टम पेज टेम्पलेट पर, और यह कोई परिणाम नहीं दिखाता है (जैसे कि कोई कस्टम पोस्ट नहीं जोड़ा गया था)। कोई विचार?
ट्रोनिओसिस

यह समाधान पेजिंग का समर्थन नहीं करता है। कोई भी / पृष्ठ / 2 URL अभी भी पहले 10 पोस्ट दिखाता है।
rg89

6

अपने CPT संग्रह को home.php पर पुनः नाम दें

फिर होम पेज क्वेरी को केवल CPT के डिस्प्ले में बदलने के लिए pre_get_posts का उपयोग करें

function wpsites_home_page_cpt_filter($query) {
if ( !is_admin() && $query->is_main_query() && is_home() ) {
$query->set('post_type', array( 'your-cpt' ) );
    }
  }

add_action('pre_get_posts','wpsites_home_page_cpt_filter');

अपने कस्टम पोस्ट प्रकार के नाम के साथ अपना cpt बदलें।


2
अंत में, एक स्पष्ट, व्यावहारिक व्याख्या!
जैक

1

उत्तर के लिए धन्यवाद ljaas- मैं इस सटीक समस्या को हल करने के लिए देख रहा था। कस्टम पोस्ट टाइप आर्काइव टेम्प्लेट प्राप्त करने के लिए मुझे निम्नलिखित शर्तों को जोड़ना होगा:

$wp_query->is_post_type_archive = 1;
$wp_query->is_archive = 1;

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

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

0

यह मेरे लिए ब्लॉग पोस्ट और सेटिंग्स> स्टेटिक> रीडिंग> फ्रंट पेज डिस्प्ले में स्थैतिक पेज को ओवरराइड करने के लिए बेहतर काम करता है:

<?php
/**
 * Set custom post type archive as front page.
 *
 * @since 1.0.0
 */
function ql_set_as_front_page( $query ) {
    if ( is_admin() || ! $query->is_main_query() ) {
        return;
    }
    if ( ql_is_front_page( $query ) ) {
        $query->set( 'page_id', '' );
        $query->is_page = false;
        $query->is_singular = false;
        $query->set( 'post_type', 'MYCPT' );
        $query->is_archive = true;
        $query->is_post_type_archive = true;
    }
}
add_action( 'pre_get_posts', 'ql_set_as_front_page' );

/**
 * Taken from WP_Query::is_front_page and adapted to compare page_on_front with current page ID.
 * 
 * @since 1.0.0
 * 
 * @param object $query The main WP Query.
 */
function ql_is_front_page( $query ) {
    if ( 'posts' == get_option( 'show_on_front') && $query->is_home() )
        return true;
    elseif ( 'page' == get_option( 'show_on_front') && get_option( 'page_on_front' ) && $query->get('page_id') == get_option( 'page_on_front' ) )
        return true;
    else
        return false;
}

मैं इसे फिल्टर का उपयोग कर एक टेम्पलेट ओवरराइड के साथ संयोजन में front_page_templateऔर home_templateएक कस्टम टेम्पलेट वापस करने के लिए उपयोग कर रहा हूं ।


0

मेरे लिए यह पेजेशन को तोड़ता है: या तो आप इंडेक्स या एक स्थैतिक पेज को होम पेज के रूप में चुनते हैं, पेजेशन लिंक दिखाता है लेकिन जब मैं पेज 2 पर क्लिक करता हूं तो मुझे यह मिलता है:

  • सूचकांक पृष्ठ (डिफ़ॉल्ट) के मामले में: 404 पृष्ठ
  • स्थैतिक पृष्ठ के मामले में: पृष्ठ 1: "पृष्ठांकित" तर्क के समान परिणाम तब पृष्ठ प्रकार पृष्ठांकन दिखाने के लिए व्याख्या की जाती है, न कि पोस्ट प्रकार सूची पृष्ठांकन।

मुझे लगता है कि इसे पृष्ठांकित तर्क को पकड़ने और इसे सही तरीके से पारित करने के लिए कुछ पुनर्लेखन नियमों की आवश्यकता है।

वैसे भी, एक कस्टम टेम्पलेट पेज कुछ अतिरिक्त पुनर्लेखन नियमों के साथ समाधान होना चाहिए।

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