কাস্টম পোস্ট ধরণের জন্য একক ভিউ কীভাবে অক্ষম করবেন?


47

আমি একটি কাস্টম পোস্ট প্রকার তৈরি করেছি:

register_post_type('sample_post_type',array(
    'labels' => array(
        'name' => _x('Sample Posts', 'post type general name'),
        'singular_name' => _x('Sample Post', 'post type singular name')
    ),
    'public' => true,
    'show_in_nav_menus' => false,
    'exclude_from_search' => true
));

এই নির্দিষ্ট পোস্টের জন্য আমি কীভাবে একক পোস্ট ভিউ অক্ষম করতে পারি? একটি সাধারণ 404 প্রদর্শন করা ভাল, বা হোমপেজে পুনর্নির্দেশ। এটি একটি প্লাগইনের ভিতরে রয়েছে, তাই খালি পৃষ্ঠা সেটআপ করার জন্য আমি একটি একক-নমুনা_পোস্ট_টাইপ.এফপি ফাইল তৈরি করতে পারি না।

উত্তর:


42

আপনি template_redirectএকটি কাস্টম পোস্ট ধরণের পুনর্নির্দেশের জন্য হুক ব্যবহার করতে পারেন , আপনি অন্য যে কোনও ইউআরএল চাইবেন home_url()এবং অন্য যুক্তিতে ত্রুটি কোডটি ব্যবহার করতে পারেন ।

<?php
add_action( 'template_redirect', 'wpse_128636_redirect_post' );

function wpse_128636_redirect_post() {
  $queried_post_type = get_query_var('post_type');
  if ( is_single() && 'sample_post_type' ==  $queried_post_type ) {
    wp_redirect( home_url(), 301 );
    exit;
  }
}
?>

আপডেট করা হয়েছে:

একটি বিকল্প পদ্ধতির সেট করতে হবে:

'publicly_queryable'  => false`

কাস্টম পোস্ট নিবন্ধভুক্ত করার সময় @ গুস্তাভো দ্বারা উল্লিখিত হিসাবে। তবে এটি কেবল পৃষ্ঠাটি পুরোপুরি সরিয়ে দেয় এবং আপনাকে 404 পৃষ্ঠাতে পুনঃনির্দেশ করে। এছাড়াও এটি একক পাশাপাশি আর্কাইভ পৃষ্ঠাটি গোপন রাখে, মূলত সম্পূর্ণরূপে সম্মুখ-প্রান্ত থেকে গোপন এবং কেবলমাত্র কাস্টম পোস্টের জন্য সেট করা যায়।

You আপনি যদি কেবল অ্যাডমিন / ব্যাক-এন্ড ব্যবহারের জন্য কোনও কাস্টম পোস্ট নিবন্ধন করতে চান তবে এই পদ্ধতির কাজ করে


একটি ভাল সমাধান। আমি দেখতে পেয়েছি যে কেবল অ- get_current_user_id()
অনুমোদনপ্রাপ্ত

2
দয়া করে উত্তর ফর্মটি @ গুস্তাভো
রিচার্ড

2
কেন শুধুমাত্র ব্যবহার করবেন is_singular('post-type-slug')মধ্যে if()2 অবস্থার পরিবর্তে শর্ত?
আকাশ কে।

@AkashK। হ্যাঁ যে পাশাপাশি কাজ করতে পারে, ফাংশন সম্পর্কে সচেতন ছিল না।
কুমার 6

74

শুধু যুক্তি নির্ধারণ

'publicly_queryable'  => false

আপনি যখন কল করুন_পোস্ট_প্রকার ()


1
এটি এখনও সমস্ত ডাটাবেস রেফারেন্স তৈরি করার সময় আপনার সিপিটিটিকে আসল ওয়েব পৃষ্ঠাগুলি তৈরি করা থেকে বিরত করার উত্তরের মতো মনে হচ্ছে।
বেন র্যাকিকোট

27
এটি সংরক্ষণাগারটিও লুকিয়ে রাখে
স্পেসম্যান

1
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত।
সিনিস্টারবার্ড

আমার জন্য এটি 404 এর পরিবর্তে হোমপেজে পুনর্নির্দেশের কারণ হয়ে দাঁড়ায় Any কোনও ধারণা কেন? প্রাসঙ্গিক ক্ষেত্রে আমি পিকলিস্টের সাথে পোস্ট টাইপটি নিবন্ধভুক্ত করছি।
এমারসন্থিস

8

এটি করার একটি সহজ উপায় কাস্টম পোস্টের ধরণটি নিবন্ধ করার সময় নিম্নলিখিত আরোগুলি পেরিয়ে যাওয়া যায়

register_post_type('sample_post_type',array(
'labels' => array(
    'name' => _x('Sample Posts', 'post type general name'),
    'singular_name' => _x('Sample Post', 'post type singular name')
),
'public' => true,
'exclude_from_search' => true,
'show_in_admin_bar'   => false,
'show_in_nav_menus'   => false,
'publicly_queryable'  => false,
'query_var'           => false
));

1
publically_querableপোস্ট টাইপ আর্কাইভগুলি কাজ করার জন্য আপনার সত্য হওয়া দরকার ।
হাওডি_এমসিজি

এটি আমার পক্ষে কাজ করে না। সংরক্ষণাগারটিতে যাওয়ার চেষ্টা করার সময় এটি হোমপৃষ্ঠায় পুনঃনির্দেশগুলি সমর্থন করে
ইয়াহিয়া উদ্দিন

7

এক. আপনার ফাংশন ফাইল থেকে।

add_action( 'template_redirect', 'redirect_cpt_singular_posts' );
    function redirect_cpt_singular_posts() {
      if ( is_singular('your-cpt-slug') ) {
        wp_redirect( home_url(), 302 );
        exit;
      }
    }

দুই। আপনার একক। Cpt.php ফাইল থেকে:

<?php wp_redirect( home_url() ); exit; ?>

আমি দ্বিতীয় বিকল্প পছন্দ। তবে আমার জানা দরকার যে এই দ্বিতীয় বিকল্পের সাথে কোনও ত্রুটি আছে।
ব্যবহারকারী 2584538

@ ব্যবহারকারী 2584538 আপনার কাছে যদি কাস্টম single-cpt_name.phpফাইল না থাকে তবে আপনি এটি করতে পারবেন না। আপনি যদি একটি সাধারণ প্লাগইন ফাইলে ফাংশনটি রাখেন তবে আপনি কোনও ফাইল সম্পাদনা না করে সক্রিয় / নিষ্ক্রিয় করতে পারেন।
এলিয়াসএনএস

2

সোভেনের সত্যিকারের উত্তরের থেকে কাজ করে, আমি in_array()যদি বিবৃতিতে একাধিক পোস্ট প্রকার যুক্ত করতে এবং তারপরে হোম পৃষ্ঠার পরিবর্তে সংরক্ষণাগার পৃষ্ঠায় পুনর্নির্দেশ করা সহজ করতে তার ফাংশনটি পুনরায় লিখেছিলাম r

( যাইহোক , আমি মনে করি সেটিং query_varএবং / অথবা ভুয়াতে publically_queryableকেবল একক দর্শনগুলিই নয়, স্থানীয় আর্কাইভ ভিউকে ওভাররাইড 'has_archive' => trueকরেই অক্ষম করে that সেক্ষেত্রে আপনি এখনও একটি কাস্টম ডাব্লু পি-ক্যুরি সেট আপ করতে পারেন এবং আপনার নিজের সংরক্ষণাগার পৃষ্ঠা তৈরি করতে পারেন, একটি টেমপ্লেট, তবে মূল ক্যোয়ারী এটি আর করবে না, তাই?)

function fq_disable_single_cpt_views() {
  $queried_post_type = get_query_var('post_type');
  $cpts_without_single_views = array( 'my-post-type', 'my-other-post-type' );
  if ( is_single() && in_array( $queried_post_type, $cpts_without_single_views )  ) {
    wp_redirect( home_url( '/' . $queried_post_type . '/' ), 301 );
    exit;
  }
}

add_action( 'template_redirect', 'fq_disable_single_cpt_views' );

2

উপরে উল্লিখিত সমস্তগুলি পরীক্ষিত এবং প্রকৃত সমাধান প্রস্তাবিত কোনও পুনঃনির্দেশের চেয়ে সহজ।

সংরক্ষণাগারটি অ্যাক্সেসযোগ্য এবং আইটেমগুলির তালিকা তৈরি করার জন্য এবং একক পোস্ট অ্যাক্সেসযোগ্য হবে না এবং স্বয়ংক্রিয়ভাবে 404 টিতে পুনঃনির্দেশ করুন

'query_var' => false

আপনার সিপিটি নিবন্ধনের সময়। যদি আপনি মিথ্যাতে সেট publicly_queryableকরেন তবে আপনার সংরক্ষণাগারগুলি ঘরে ফেরত পাঠানো হবে , অন্য কোনও কম্বো কাজ করবে না। query_varমিথ্যা সেট করুন এবং এটি হয়।

এখানে পূর্ণ সিপিটি https://gist.github.com/danyj/bfd038d3c8d578548c4d700bd0a7942a

লাইন 50 দেখুন https://gist.github.com/danyj/bfd038d3c8d578548c4d700bd0a7942a#file-thz_cpt_items_single_view_redirect-php-L50

যেমন এখানে বলা হয়েছে

https://codex.wordpress.org/Function_Reference/register_post_type

দ্রষ্টব্য: যদি ক্যোয়ারী_ভর খালি, নাল, বা একটি বুলিয়ান মিথ্যা, ওয়ার্ডপ্রেস এখনও এটি ব্যাখ্যা করার চেষ্টা করবে (৪.২.২) এবং আপনার কাস্টম পোস্টের পূর্বরূপ / দর্শনগুলি ৪০৪ ফিরে আসবে।


এটি কিছুটা হ্যাকের মতো মনে হলেও এটি কাজ করে বলে মনে হচ্ছে। তারা চাইলে পরিবর্তে বিদ্যমান has_archive সম্পত্তি পাশাপাশি একটি উত্সর্গীকৃত has_single সম্পত্তি যুক্ত করুক W
পাওয়ারবয়

0

আপনি যদি ফ্রন্টএন্ডে কাস্টম পোস্ট ধরণের একক ভিউ সম্পূর্ণরূপে অক্ষম করতে চান তবে সংরক্ষণাগার পৃষ্ঠার জিনিসগুলি প্রদর্শন করতে সক্ষম হন তবে কিছুটা জটিল হচ্ছে।

সেট publicly_queryableথেকে falseবা rewriteকরতে falseউভয় একক এবং সংরক্ষণাগার দৃশ্য প্রদর্শনের জন্য প্রতিরোধ করবে। register_post_typeকেবলমাত্র একক দর্শন পুনর্লিখনের নিয়মগুলি রোধ করতে ফাংশন আর্গুমেন্টে কোনও পতাকা নেই ।

https://github.com/WordPress/WordPress/blob/5.2.3/wp-includes/class-wp-post-type.php#L540

তবে আপনি আপনার পোস্টের প্রবন্ধটি নিবন্ধকরণের পরে পুনর্লিখন ট্যাগটি সরিয়ে ফেলতে পারেন এবং এটি সংরক্ষণাগার ভিউ পুনর্লিখনের নিয়মগুলি ছোঁয়াচে ফেলে রাখবে তবে কেবল একক দর্শন পুনর্লিখনের নিয়ম সরিয়ে ফেলবে।

/**
 * Register event post type
 */
function wpse_128636_register_event_post_type() {

    $labels = array(
        'name' => __( 'Events' ),
        'singular_name' => __( 'Event' ),
        'add_new' => __( 'Add new' ),
        'add_new_item' => __( 'Add new' ),
        'edit_item' => __( 'Edit' ),
        'new_item' => __( 'New' ),
        'view_item' => __( 'View' ),
        'search_items' => __( 'Search' ),
        'not_found' => __( 'Not found' ),
        'not_found_in_trash' => __( 'Not found Events in trash' ),
        'parent_item_colon' => __( 'Parent' ),
        'menu_name' => __( 'Events' ),

    );

    $args = array(
        'labels' => $labels,
        'hierarchical' => false,
        'supports' => array( 'title', 'page-attributes' ),
        'public' => true,
        'show_ui' => true,
        'show_in_menu' => true,
        'show_in_nav_menus' => true,
        'publicly_queryable' => true,
        'exclude_from_search' => true,
        'has_archive' => true,
        'rewrite' => array('slug' => 'event'),
        'capability_type' => 'post',
    );

    register_post_type( 'event', $args );
    remove_rewrite_tag( '%event%' ); // This line will remove event rewrite rules for single view
}

add_action( 'init', 'wpse_128636_register_event_post_type' );

আরেকটি বোনাস হ'ল এখন থেকে আপনি ইভেন্ট পোস্ট টাইপ পারমালিঙ্ক স্ট্রাকচার ( event/simple-page) ব্যবহার করে সাধারণ ওয়ার্ডপ্রেস পৃষ্ঠা তৈরি করতে পারেন যা জটিল ওয়েবসাইটগুলিতে সহায়ক হতে পারে।

কোড পরিবর্তনের পরে পুনর্লিখনের নিয়মগুলি ফ্লাশ করতে ভুলবেন না।

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