প্রথম পৃষ্ঠা হিসাবে কাস্টম পোস্ট ধরণের সংরক্ষণাগারটি কীভাবে ব্যবহার করবেন?


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এবং আপনি যেতে ভাল to এটি 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;একেবারে শুরুতে প্রয়োজন, অন্যথায় এটি অ্যাডমিন অঞ্চলে মেসেজ করে।
brasofilo

1
এটি আমার পক্ষে কাজ করার সময়, আমার প্রাথমিক এবং মাধ্যমিক মেনুগুলি ফলস্বরূপ অদৃশ্য হয়ে গেল।
9

এটি প্রায় সঠিকভাবে। এই কোডটি সমস্ত ডাব্লুপিউইউ ক্যোয়ারী পরিবর্তন করছে, সুতরাং (_ ডাব্লিউপি_কোয়ারি-> পেতে .....) এর পরিবর্তে যদি (is_home ()) হওয়া উচিত
লিও ক্যাসিরিও

আমি একই ব্যবহার করছি তবে প্রথম পৃষ্ঠার পরিবর্তে আমার কাস্টম পৃষ্ঠা টেম্পলেটটিতে এবং এটির কোনও ফলাফল দেখায় না (যেন কোনও কাস্টম পোস্ট যুক্ত করা হয়নি)। কোন চিন্তা?
ট্রিনিসিস

এই সমাধানটি পেজিং সমর্থন করে না। যে কোনও / পৃষ্ঠা / 2 ইউআরএল এখনও প্রথম 10 টি পোস্ট দেখায়।
rg89

6

আপনার সিপিটি সংরক্ষণাগারটিকে home.php এ পুনরায় নাম দিন

তারপরে হোম পেজ ক্যোয়ারী পরিবর্তন করতে কেবল_ সিপিটির প্রদর্শনের জন্য 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');

আপনার কাস্টম পোস্টের নামের সাথে আপনার সিপিটি প্রতিস্থাপন করুন।


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 এর মতো একই ফলাফল: "পেজড" যুক্তিটি তখন পৃষ্ঠা ধরণের পৃষ্ঠাগুলি দেখানোর জন্য ব্যাখ্যা করা হয়, পোস্টের ধরণের তালিকা পৃষ্ঠা পৃষ্ঠা প্রকাশনা নয়।

আমি মনে করি পেজযুক্ত যুক্তিটি ধরতে এবং এটি সঠিকভাবে পাস করার জন্য কিছু পুনর্লিখনের নিয়ম দরকার।

যাইহোক, কাস্টম টেম্পলেট পৃষ্ঠাটি কিছু অতিরিক্ত পুনর্লিখনের বিধিগুলির সমাধান হওয়া উচিত।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.