আমি যখন কোনও সংরক্ষণাগার পৃষ্ঠায় আছি তখন আমি কীভাবে কাস্টম পোস্ট ধরণের স্লাগ আবিষ্কার করব?
উদাহরণস্বরূপ, যদি টেম্পলেটটি /products/
আগুন দেয় তবে archive-products.php
আমি কীভাবে (প্র্যাকটিক্যালি) পোস্ট টাইপ স্লাগ পাব?
ধন্যবাদ
আমি যখন কোনও সংরক্ষণাগার পৃষ্ঠায় আছি তখন আমি কীভাবে কাস্টম পোস্ট ধরণের স্লাগ আবিষ্কার করব?
উদাহরণস্বরূপ, যদি টেম্পলেটটি /products/
আগুন দেয় তবে archive-products.php
আমি কীভাবে (প্র্যাকটিক্যালি) পোস্ট টাইপ স্লাগ পাব?
ধন্যবাদ
উত্তর:
বর্তমান পোস্ট টাইপ ব্যবহার করতে 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;
}
$posttype = get_query_var('post_type');
... আমি একটি বিস্তৃত বিকল্প যুক্ত করেছি।
আমি কোন কাস্টম পোস্ট সংরক্ষণাগারটি করছি তা পেতে সংরক্ষণাগার। 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
উত্তর গুলো বিভ্রান্ত হয়। এবং সম্ভবত আমি পাশাপাশি কিন্তু শিরোনাম প্রশ্নটি হ'ল:
একটি সংরক্ষণাগার পৃষ্ঠার জন্য কাস্টম পোস্ট ধরণের স্লাগ পান
আপনি যদি বোঝাতে চান পোষ্ট প্রকারের সংরক্ষণাগার ল্যান্ডিং-পৃষ্ঠা, এবং 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।
টি লক্ষনীয় যে 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
আপনার পোস্টের থাম্বনেইল চিত্রগুলিতে একটি শ্রেণি বৈশিষ্ট্য যুক্ত করুন ...
আপনি এই কোডটি ব্যবহার করতে পারেন:
$queried_object = get_queried_object();
$posttype_slug = $queried_object->query_var;
echo $posttype_slug;
আপনার যা প্রয়োজন $ posttype_slug var ব্যবহার করুন
$queried_object->query_var['post_type'];
কাজ করার জন্য এটি প্রয়োজন ...
?post_type=post
আমি খালি পেতে। তুলনা করুনget_query_var('post_type');
আপনি এই কোডটি ব্যবহার করতে পারেন এবং এই কোডটি আমার পক্ষে কাজ করছে,
; t_slug = get_query_var ('টার্ম');
get_queried_object()
কম পদক্ষেপে একই তথ্য পেতে হবে।