একটি সংরক্ষণাগার পৃষ্ঠার জন্য কাস্টম পোস্ট ধরণের স্লাগ পান


15

আমি যখন কোনও সংরক্ষণাগার পৃষ্ঠায় আছি তখন আমি কীভাবে কাস্টম পোস্ট ধরণের স্লাগ আবিষ্কার করব?

উদাহরণস্বরূপ, যদি টেম্পলেটটি /products/আগুন দেয় তবে archive-products.phpআমি কীভাবে (প্র্যাকটিক্যালি) পোস্ট টাইপ স্লাগ পাব?

ধন্যবাদ

উত্তর:


19

বর্তমান পোস্ট টাইপ ব্যবহার করতে get_post_type()। তারপরে get_post_type_object()আপনার প্রয়োজনীয় সমস্ত ডেটা জিজ্ঞাসা করুন , উদাহরণস্বরূপ স্লাগ:

$post_type = get_post_type();
if ( $post_type )
{
    $post_type_data = get_post_type_object( $post_type );
    $post_type_slug = $post_type_data->rewrite['slug'];
    echo $post_type_slug;
}

1
আমি মনে করি (পরীক্ষা করা হয়নি) get_queried_object()কম পদক্ষেপে একই তথ্য পেতে হবে।
রাস্টটি

@ রর্স্ট হয়তো, তবে আমি মনে করি যে আমি প্রস্তাবিত কোডটি বোঝা সহজ।
ফুসিয়া

1
টসচোর সমাধানগুলি ভুল, কারণ get_post_type বর্তমান পৃষ্ঠার পোস্ট প্রকারটি প্রদান করে এবং আপনি যখন সংরক্ষণাগার পৃষ্ঠায় থাকবেন তখন এই ফাংশনটি অলভ্যাসি "পৃষ্ঠা" ফিরে আসে। আমি এটি সমাধান করতে চাইছি: যখন আমি 'বই' (4 উদাহরণ) এর সংরক্ষণাগার পৃষ্ঠায় যাব, তখন আমি এটি চাই: 'বই'। আমি যখন এটি পেতে আমি এটি পোস্ট করব।
ইমারাইন

1
দুর্ভাগ্যক্রমে এটি এত সহজ নয়, যদিও আপনি কেবলমাত্র দিয়েই ভাল থাকতেন $posttype = get_query_var('post_type');... আমি একটি বিস্তৃত বিকল্প যুক্ত করেছি।
মজিক

আমি মনে করি না এটি উত্তরটি পুরো গল্পটি কভার করে। আপনার ইনস্টল পুনর্লিখনের নিয়মগুলি পরীক্ষা করা উচিত যতগুলি ফিল্টার (ওউকমার্স শপের পৃষ্ঠার মতো) পরিবর্তন করছে। পরিবর্তে ওয়ার্পড্রেস নিজস্ব মেকানিজম ব্যবহার করুন , আমার উত্তর নীচের কোথাও দেখুন।
জোনাস লন্ডম্যান

6

আমি কোন কাস্টম পোস্ট সংরক্ষণাগারটি করছি তা পেতে সংরক্ষণাগার। Php টেমপ্লেটের লুপের বাইরে এটি ব্যবহার করছি।

এটি @ টসচো এবং @ রাস্ট্র উভয়ই প্রস্তাবিত পদ্ধতির একটি কম্বো:

$post_type = get_queried_object();
echo $post_type->rewrite['slug'];

আপডেট: @ মজিক উল্লেখ করেছেন যে আপনি কেবল নিজের সিপিটি-র জন্য পুনরায় লেখার স্লাগ সেট করলেই এটি কাজ করে। সিপিটি রেজিস্ট্রেশন করার সময় পুনর্লিখন স্লাগ alচ্ছিক এবং সেট না করা হলে পোস্ট_ টাইপে ডিফল্ট হয়।


যখন আমি এটি চেষ্টা করেছি আমি পেয়েছিNotice: Undefined property: stdClass::$rewrite in ***\wp-content\themes\marks-remarks\archive.php on line 4
patrickzdb

এটি কেবল তখনই কাজ করবে যদি পুনর্লিখনের
স্লাগটি

এই ম্যাজিকটি ধরার জন্য ধন্যবাদ! আপনার তথ্য প্রতিবিম্বিত করতে আমি পোস্টটি আপডেট করেছি।
জেরি


3

উত্তর গুলো বিভ্রান্ত হয়। এবং সম্ভবত আমি পাশাপাশি কিন্তু শিরোনাম প্রশ্নটি হ'ল:

একটি সংরক্ষণাগার পৃষ্ঠার জন্য কাস্টম পোস্ট ধরণের স্লাগ পান

আপনি যদি বোঝাতে চান পোষ্ট প্রকারের সংরক্ষণাগার ল্যান্ডিং-পৃষ্ঠা, এবং is_post_type_archive()ফিরে আসে true, আপনি স্লগ চান যে বর্তমান দেখার সংরক্ষণাগারটির প্রতিক্রিয়া :

/* returns /products/ */

$responding_name = str_replace(get_home_url(), '', get_post_type_archive_link(get_query_var('post_type')));

/* continue to get 'products' without slug slashes */
$responding_name = str_replace('/', '', $responding_name);

- প্রশ্নের উত্তর শেষ -

ব্যাখ্যা:

আপনি নিবন্ধিত স্লাগের উপর নির্ভর করতে পারবেন না । ওয়ার্ডপ্রেস হয় না। উদাহরণস্বরূপ, যখন get_post_type_archive_link()ওয়ার্ডপ্রেস কল করার সময় আপনার ইনস্টলের জন্য বর্তমান পুনর্লিখনের নিয়মগুলি পরীক্ষা করে দেখছে

আপনি যেখানেই থাকুন না কেন ভিতরে বা বাইরে লুপ, বর্তমান সংরক্ষণাগার বা একক পোস্ট, প্রক্রিয়াটি বিপরীত করুন get_post_type_archive_link()। (পারমালিঙ্কস সক্ষম করা হয়েছে))

বিবেচ্য বিষয়:

এখানে উল্লিখিত হিসাবে, বর্তমান ক্যোয়ারিতে পোস্টের ধরণ (গুলি) হতে পারে একটি array। আপনি যে পোস্ট পোস্টটি সন্ধান করেন তা ফিল্টার করে আপনার নিবিড়তাগুলির সাথে আরও এগিয়ে যেতে পারেন , উদাহরণস্বরূপ:

$post_type = get_query_var('post_type'); 
if(is_array($post_type)) $post_type = reset($post_type);

অথবা

if(isset($post_types[0])) $post_type = $post_types[0];

অন্য দৃষ্টিভঙ্গি:

ওউকমার্স উদাহরণস্বরূপ, 'পণ্যগুলি' পোস্টের ধরণের অবজেক্টের সাথে নিবন্ধিত কিন্তু বাস্তবে পুনরায় লিখিত নিয়মের নাম (দোকান) ব্যবহার করে:

/* returns shop */
$responding_name = str_replace('/', '', str_replace(get_home_url(), '', get_post_type_archive_link('product')));

চিহ্নিত করুন, আমি ব্যবহার করছি $responding_name, কারণ উদ্দেশ্যগুলি ভিন্ন হতে পারে। কোনও পোস্ট সংরক্ষণাগার বিদ্যমান নেই, এটি কেবল একটি url।


এটি এটি খুব স্পষ্টভাবে ধন্যবাদ জানিয়েছে আপনাকে ধন্যবাদ। এই সমাধান খুঁজছিলেন। যদি প্রশ্নটি "কেবলমাত্র পোস্টের নামের নাম" সন্ধান না করে, তবে এটি একটি জাগ্রত উত্তর হওয়া উচিত।
জোনাস লন্ডম্যান

1

টি লক্ষনীয় যে has_archiveকাস্টম পোস্ট প্রকারটি নিবন্ধ করার সময় যদি সত্যে সেট করা থাকে তবে পোস্ট ধরণের সংরক্ষণাগারটি /cptslug/অভ্যন্তরীণভাবে আবার লিখিত হবে ?post_type=cptslug। সুতরাং এর অর্থ is_post_type_archive()সত্যটি ফিরে আসবে।

দুর্ভাগ্যক্রমে, যেখানে নিবন্ধিত পুনরায় লেখার স্লাগ পোস্টের ধরণের চেয়ে আলাদা , আপনি আসলে নির্ভরযোগ্যভাবে পাচ্ছেন না post_type। যেমন। যদি আপনার পোস্টের টাইপটি ছিল myplugin_carsএবং আপনার পুনর্লিখনের স্লাগটি ছিল carsএবং আপনার myplugin_carsতখনও এটি হওয়া দরকার (বর্তমান কোয়েড অবজেক্টটি যদি কাস্টম পোস্টের ধরণ না হয় তবে ত্রুটিগুলি রোধ করতে ) এখনও ব্যর্থ হবে:

$queryobject = get_queried_object();
if (has_property('rewrite',$queryobject)) {
    if (isset($queryobject->rewrite['slug'])) {
         $posttype = $queryobject->rewrite['slug'];
     }
 }

তবে is_post_type_archiveসত্য যে এটি আরও নির্ভরযোগ্য:

if (is_post_type_archive()) {
    $posttype = get_query_var('post_type');
    // which is basically the same as:
    // global $wp_query;
    // $posttype = $wp_query->query_vars['post_type'];
} 
else ($posttype = 'post';}

তবে স্তব্ধ থাকুন, আরও কিছুটা পরীক্ষা করে দেখা যাচ্ছে যে এটি সত্যিই এতটা সহজ নয় ... আপনি যদি একধরনের একাধিক পোস্ট প্রকারের সহিত আর্কাইভ পৃষ্ঠায় থাকেন তবে ..? অথবা পোস্ট ব্যতীত কাস্টম পোস্ট টাইপের পোস্ট ট্যাগ বরাদ্দ করবেন? বা কোনও লেখক সংরক্ষণাগার পৃষ্ঠায় আছেন? তারিখ সংরক্ষণাগার পৃষ্ঠা? ... বা এমনকি একটি জটিল tax_queryবা meta_queryজন্য আছে WP_Query?

একমাত্র নির্ভরযোগ্য উত্তর (প্রতিটি সম্ভাব্য সংরক্ষণাগার ক্ষেত্রে পরীক্ষা না করেই) ক্যোয়ারিতে আসল পোস্টগুলি লুপ করা ... এখানে আমি সম্পূর্ণ ফাংশনটি নিয়ে এসেছি একক এবং সংরক্ষণাগার উভয় পৃষ্ঠায় কাজ করার জন্য, এবং আপনাকে বিকল্পভাবে পাস করার অনুমতি দিয়েছি কাস্টম ক্যোয়ারী অবজেক্ট (বা একক পোস্টের জন্য পোস্ট অবজেক্ট / পোস্ট আইডি):

function get_current_post_types($object=null) {

    // if a numeric value passed, assume it is a post ID
    if ( ($object) && (is_numeric($object)) ) {$object = get_post($object);}
    // if an object is passed, assume to be a post object
    if ( ($object) && (is_object($object)) ) {return get_post_type($object);}

    // standard single post type checks
    if (is_404()) {return '';}
    // update: removed this check, handled by is_singular
    // if (is_single()) {return 'post';}
    if (is_page()) {return 'page';}
    if (is_attachment()) {return 'attachment';}
    if (is_singular()) {return get_post_type();}

    // if a custom query object was not passed, use $wp_query global
    if ( (!$object) || (!is_object($object)) ) {
        global $wp_query; $object = $wp_query;
    }
    if (!is_object($object)) {return '';} // should not fail

    // if the post_type query var has been explicitly set
    // (or implicitly set on the cpt via a has_archive redirect)
    // ie. this is true for is_post_type_archive at least
    // $vqueriedposttype = get_query_var('post_type'); // $wp_query only
    if (property_exists($object,'query_vars')) {
        $posttype = $object->query_vars['post_type'];
        if ($posttype) {return $posttype;}
    }

    // handle all other cases by looping posts in query object
    $posttypes = array();
    if (method_exists($object,'found_posts')) {
        if ($object->found_posts > 0) {
            $queriedposts = $object->posts;
            foreach ($queriedposts as $queriedpost) {
                $posttype = $queriedpost->post_type;
                if (!in_array($posttype,$posttypes)) {$posttypes[] = $posttype;}
            }
            if (count($posttypes == 1)) {return $posttypes[0];}
            else {return $posttypes;}
         }
     }
     return ''; // nothin to see here
}

এটি নির্ভরযোগ্যভাবে (আমি কি বলেছিলাম?) একাধিক উপস্থিত থাকলে পোস্ট টাইপের একটি অ্যারে বা কেবলমাত্র এক প্রকারের ক্ষেত্রে একক পোস্ট টাইপের স্ট্রিং প্রদান করবে return আপনাকে যা করতে হবে তা হ'ল:

$posttypes = get_current_post_types();
// or pass a post ID 
$posttypes = get_current_post_types($postid);
// or pass a post object
$posttypes = get_current_post_types($post);
// or pass a custom query - that has been run
$posttypes = get_current_post_types($query);

ব্যবহারের উদাহরণ (কেবল মজাদার জন্য):

add_filter('the_posts','myplugin_fading_thumbnails',10,2);
function myplugin_fading_thumbnails($posts,$query) {
    if (!is_archive()) {return $posts;}
    $cptslug = 'myplugin_slug'; $dosomethingcool = false;
    $posttypes = get_current_post_types($query);
    if ( (is_array($posttypes)) && (in_array($cptslug,$posttypes)) ) {$dosomethingcool = true;}
    elseif ($cptslug == $posttypes) {$dosomethingcool = true;}

    if ($dosomethingcool) {
        global $fadingthumbnails; $fadingthumbnails = $cptslug;
        if (!has_action('wp_footer','myplugin_cpt_script')) {
            add_action('wp_footer','myplugin_cpt_script');
        }
    }

    function myplugin_cpt_script() {
        global $fadingthumbnails;
        echo "<script>var thumbnailclass = 'img.thumbtype-".$fadingthumbnails."';
        function fadeoutthumbnails() {jQuery(thumbnailclass).fadeOut(3000,fadeinthumbnails);}
        function fadeinthumbnails() {jQuery(thumbnailclass).fadeIn(3000,fadeoutthumbnails);}
        jQuery(document).ready(function() {fadeoutthumbnails();});
        </script>";
    }

    return $posts;
 }

প্রভাবটি দেখতে কোডটিতে কাস্টম পোস্টের ধরনটি এতে পরিবর্তন করুন postএবং thumbtype-postআপনার পোস্টের থাম্বনেইল চিত্রগুলিতে একটি শ্রেণি বৈশিষ্ট্য যুক্ত করুন ...


0

আপনি এই কোডটি ব্যবহার করতে পারেন:

$queried_object = get_queried_object();
$posttype_slug = $queried_object->query_var;
echo $posttype_slug;

আপনার যা প্রয়োজন $ posttype_slug var ব্যবহার করুন


এটি $queried_object->query_var['post_type'];কাজ করার জন্য এটি প্রয়োজন ...
মজিক

নং er ক্যারিড_বজেক্ট-> ক্যোয়ারী_ভার কনটেন কেবল পোস্ট টাইপের স্ট্রিং। এটি বস্তু বা অ্যারে নয়। এই চিত্রটি দেখুন: prntscr.com/bd58e1
গাই ইত্তঝাক

ঠিক আছে তবে কেবল যদি অনুসন্ধান করা অবজেক্টটি অবশ্যই একটি কাস্টম পোস্ট ধরণের অবজেক্ট হয় তবে আপনি একটি আলাদা সম্পর্কিত অবজেক্ট পাবেন এবং এইভাবে বিভাগ / কর / ট্যাগ / লেখক সংরক্ষণাগার পৃষ্ঠাগুলির জন্য খালি মান পাবেন। এমনকি ?post_type=postআমি খালি পেতে। তুলনা করুনget_query_var('post_type');
মজিক

0

আপনি এই কোডটি ব্যবহার করতে পারেন এবং এই কোডটি আমার পক্ষে কাজ করছে,

 ; t_slug = get_query_var ('টার্ম');

-3
if( get_post_type( get_the_ID() ) == 'projects' )
{
  //enter code for this post type
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.