आप वर्ष और महीने द्वारा कस्टम पोस्ट प्रकार के अभिलेखागार कैसे प्रदर्शित करते हैं?
आप वर्ष और महीने द्वारा कस्टम पोस्ट प्रकार के अभिलेखागार कैसे प्रदर्शित करते हैं?
जवाबों:
हाँ तुम कर सकते हो। इसके लिए आपको एक फ़िल्टर बनाने की ज़रूरत है wp_get_archives();
ताकि यह post_type
पैरामीटर को स्वीकार करे :
function my_custom_post_type_archive_where($where,$args){
$post_type = isset($args['post_type']) ? $args['post_type'] : 'post';
$where = "WHERE post_type = '$post_type' AND post_status = 'publish'";
return $where;
}
फिर इसे कॉल करें:
add_filter( 'getarchives_where','my_custom_post_type_archive_where',10,2);
जब भी आप कस्टम पोस्ट प्रकार द्वारा संग्रह प्रदर्शित करना चाहते हैं, बस पोस्ट_टाइप आर्ग्स पास करें:
$args = array(
'post_type' => 'your_custom_post_type',
'type' => 'monthly',
'echo' => 0
);
echo '<ul>'.wp_get_archives($args).'</ul>';
/%category%/%year%/%monthnum%/%postname%/
। फिर, उपरोक्त /%category%/
तिथि के समान हुक का उपयोग करना संभव हो सकता है, लिंक को केवल तारीख के बजाय शुरू करने के लिए संशोधित करना ।
mysite.com/2013/04
लेकिन इससे 404 हो जाता है। कस्टम पोस्ट प्रकार उपलब्ध है: mysite.com/cats
जो मुझे लगता mysite.com/cats/2013/04
है कि लिंक क्या होना चाहिए, लेकिन यह भी एक 404 का समाधान करता है। आपको काम करने के लिए आर्काइव लिंक कैसे मिलते हैं?
आप नहीं करते हैं, वर्डप्रेस डेवलपर्स से आधिकारिक लाइन यह थी कि कस्टम पोस्ट प्रकार सामान्य सामान्य पदों का काम करने के लिए नहीं थे, और अगर आपको तारीखों आदि के पोस्ट अभिलेखागार की आवश्यकता है, तो आप चीजों को सही तरीके से नहीं कर रहे हैं, और आप पोस्ट प्रारूपों आदि का उपयोग करके बेहतर हैं।
कस्टम पोस्ट प्रकार वेब अनुप्रयोगों आदि के लिए अभिप्रेत हैं, जबकि कुछ ऐसा करना जैसे कस्टम पोस्ट प्रकार सेट करना जो एक अलग नाम के साथ द्वितीयक या समानांतर ब्लॉग के रूप में कार्य करता है, जैसे ब्लॉग बनाम समाचार, एक ही क्षमताओं के साथ, वह नहीं है जो सुविधा थी इसके कार्यान्वयन से उत्पन्न होने वाले अन्य तकनीकी मुद्दों का मतलब होगा, और इसका मतलब है।
यदि आप अभी भी इस पर जोर दे रहे हैं, और केवल कस्टम टैक्सोनॉमीज़ और पोस्ट फॉर्मेट्स का उपयोग करना पर्याप्त नहीं है, तो आप पोस्ट संग्रह पृष्ठ के कुछ URL में फ़ंक्शन .php और रीडायरेक्ट वर्ष / माह अभिलेखागार में पुनर्लेखन नियम जोड़ सकते हैं, और फिर कस्टम पर जांच कर सकते हैं। यदि आप अपने पुन: लिखने के नियमों में चर निर्दिष्ट करते हैं तो संग्रह पृष्ठ पोस्ट करें और उचित मान सेट करने के लिए अपने पुनर्लेखन नियमों में सुनिश्चित करते हुए एक अलग टेम्पलेट लोड करें।
EDIT -> जबकि यह उत्तर अभी भी <WP4.4 के लिए काम करता है, क्योंकि कस्टम पोस्ट प्रकारों के लिए 4.4 समर्थन अब इसमें शामिल हैwp_get_archives()
वर्डप्रेस में कस्टम पोस्ट प्रकारों के तिथि आधारित अभिलेखागार के लिए एक सरल, त्वरित और आसान समाधान है! यह एक लंबे समय से चली आ रही समस्या है जिसे यहाँ WP Core Trac में दर्ज किया गया है।
यह अभी तक हल नहीं किया गया है, लेकिन Trac में योगदानकर्ताओं में से एक ने GitHub में एक सरल प्लगइन पोस्ट किया है जो आपको CPT के लिए दिनांक आधारित अभिलेखागार बनाने में सक्षम करेगा।
इस प्लगइन को स्थापित करने, या अपने कार्यों के लिए कोड को मैन्युअल रूप से जोड़ने के बाद आप इस तरह से CPT के लिए अभिलेखागार का उपयोग करते हैं:
<?php wp_get_archives_cpt( 'post_type=custom_post_type' ); ?>
ध्यान दें कि यह नया फ़ंक्शन wp_get_archives_cpt
मानक के समान काम करता है wp_get_archives
ताकि आप इसे स्वीकार करने वाले किसी भी नियमित तर्क का उपयोग कर सकें। हालाँकि, यह आपके लिए एक कस्टम पोस्ट प्रकार नाम तर्क जोड़ने में सक्षम होने की क्षमता को जोड़ता है।
पर्याप्त प्रतिष्ठा के लिए यह जोड़ने के लिए खेद taiken के जवाब नहीं है।
हालांकि, यह जोड़ना चाहता था कि उसका जवाब मेरे लिए काम करता था, हालांकि लिंक 'लोकलहोस्ट / डेट / 2010' फॉर्मेट में थे। जबकि मुझे 'लोकलहोस्ट / पोस्टस्लेग / 2010' फॉर्मेट की जरूरत थी। मैं wp_get_archives के आउटपुट पर एक स्ट्रिंग की जगह का उपयोग करके इसे ठीक करने में सक्षम था।
तो इस बात पर निर्भर करता है कि आपके कोड को कैसे सेट किया जाता है, यह कोड 404 समस्या को ठीक करेगा और कस्टम पोस्ट प्रकार के लिंक को पुनर्निर्देशित करेगा:
$yearly_archive = wp_get_archives(array( 'type' => 'yearly', 'post_type' => '<your post type name>', 'echo' => '0') );
$blog_url = get_bloginfo('url');
echo str_replace(($blog_url . '/date'), ($blog_url . '<your post type slug>'),$yearly_archive);
Takien की पोस्ट में नहीं जोड़ा जा सकता है तो यहाँ है कि मैं क्या करने के लिए समाप्त हो गया:
functions.php
add_action('init', 'my_year_archive_rewrites');
function my_year_archive_rewrites() {
add_rewrite_rule('resource/news/([0-9]{4})/page/?([0-9]{1,})/?', 'index.php?post_type=news&year=$matches[1]&paged=$matches[2]', 'top');
add_rewrite_rule('resource/news/([0-9]{4})/?', 'index.php?post_type=news&year=$matches[1]', 'top');
}
add_filter('getarchives_where', 'my_custom_post_type_archive_where', 10, 2);
function my_custom_post_type_archive_where($where,$args){
$post_type = isset($args['post_type']) ? $args['post_type'] : 'post';
return "WHERE post_type = '$post_type' AND post_status = 'publish'";
}
add_filter('year_link', 'my_year_link');
function my_year_link($link) {
global $wp_rewrite;
if(true) { // however you determine what archive you want
$link = str_replace($wp_rewrite->front, '/resource/news/', $link);
}
return $link;
}
कॉलिंग wp_get_archives ()
wp_get_archives(array('post_type'=>'news', 'type'=>'yearly'));