कस्टम पोस्ट प्रकार अभिलेखागार वर्ष और महीने से?


17

आप वर्ष और महीने द्वारा कस्टम पोस्ट प्रकार के अभिलेखागार कैसे प्रदर्शित करते हैं?


अगर आप <WP 4.4 का उपयोग कर रहे हैं, तो नीचे मेरा समाधान काम करता है, लेकिन WP 4.4 की रिलीज़ के बाद से, wp_get_archives () अंतिम रूप से कस्टम पोस्ट प्रकारों का समर्थन करता है: developer.wordpress.org/reference/functions/wp_get_archives
ट्रेवर

जवाबों:


17

हाँ तुम कर सकते हो। इसके लिए आपको एक फ़िल्टर बनाने की ज़रूरत है 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>';

3
क्या आपने इस समाधान की कोशिश की? यह आपके CPT के पोस्ट और पोस्ट की संख्या के साथ महीनों की सूची को सही ढंग से प्राप्त करता है, लेकिन लिंक बेकार हैं। उन्हें क्लिक करना आपको पूरी साइट के लिए महीने में ले जाता है, सीपीटी के लिए नहीं।
jerclarke

कुछ खुदाई के बाद (टॉम नोवेल का जवाब नीचे देखें), मैंने कस्टम पोस्ट प्रकारों के लिए मासिक अभिलेखागार पर छोड़ दिया। इसके बजाय, मैंने एक पोस्ट श्रेणी का उपयोग किया, और अपनी पर्मलिंक संरचना को बदल दिया /%category%/%year%/%monthnum%/%postname%/। फिर, उपरोक्त /%category%/तिथि के समान हुक का उपयोग करना संभव हो सकता है, लिंक को केवल तारीख के बजाय शुरू करने के लिए संशोधित करना ।
केविन सी।

इस पर सवाल। यह इस तरह से url बनाता है: mysite.com/2013/04लेकिन इससे 404 हो जाता है। कस्टम पोस्ट प्रकार उपलब्ध है: mysite.com/catsजो मुझे लगता mysite.com/cats/2013/04है कि लिंक क्या होना चाहिए, लेकिन यह भी एक 404 का समाधान करता है। आपको काम करने के लिए आर्काइव लिंक कैसे मिलते हैं?
गौशन 88

2
इससे भी बेहतर, वर्डप्रेस में इस लापता कार्यक्षमता से निपटने के लिए अंत में प्लगइन है। यह एक कोर योगदानकर्ता द्वारा कोर में इस मुद्दे को ठीक करने की कोशिश करके बनाया गया था। प्लगइन हमें प्रदान किया जाता है जब तक कि कोर में समस्या को ठीक से संबोधित नहीं किया जाता है। wordpress.org/plugins/archives-for-custom-post-types
Trevor

6

आप नहीं करते हैं, वर्डप्रेस डेवलपर्स से आधिकारिक लाइन यह थी कि कस्टम पोस्ट प्रकार सामान्य सामान्य पदों का काम करने के लिए नहीं थे, और अगर आपको तारीखों आदि के पोस्ट अभिलेखागार की आवश्यकता है, तो आप चीजों को सही तरीके से नहीं कर रहे हैं, और आप पोस्ट प्रारूपों आदि का उपयोग करके बेहतर हैं।

कस्टम पोस्ट प्रकार वेब अनुप्रयोगों आदि के लिए अभिप्रेत हैं, जबकि कुछ ऐसा करना जैसे कस्टम पोस्ट प्रकार सेट करना जो एक अलग नाम के साथ द्वितीयक या समानांतर ब्लॉग के रूप में कार्य करता है, जैसे ब्लॉग बनाम समाचार, एक ही क्षमताओं के साथ, वह नहीं है जो सुविधा थी इसके कार्यान्वयन से उत्पन्न होने वाले अन्य तकनीकी मुद्दों का मतलब होगा, और इसका मतलब है।

यदि आप अभी भी इस पर जोर दे रहे हैं, और केवल कस्टम टैक्सोनॉमीज़ और पोस्ट फॉर्मेट्स का उपयोग करना पर्याप्त नहीं है, तो आप पोस्ट संग्रह पृष्ठ के कुछ URL में फ़ंक्शन .php और रीडायरेक्ट वर्ष / माह अभिलेखागार में पुनर्लेखन नियम जोड़ सकते हैं, और फिर कस्टम पर जांच कर सकते हैं। यदि आप अपने पुन: लिखने के नियमों में चर निर्दिष्ट करते हैं तो संग्रह पृष्ठ पोस्ट करें और उचित मान सेट करने के लिए अपने पुनर्लेखन नियमों में सुनिश्चित करते हुए एक अलग टेम्पलेट लोड करें।


यह थोड़ा अजीब लगता है कि वे केवल इस कार्यक्षमता के साथ इतनी दूर जाएंगे। क्या आप मुझे एक उदाहरण दे सकते हैं कि कस्टम पोस्ट का उपयोग कैसे किया जाना चाहिए?
डैन ली

कस्टम पोस्ट्स का उपयोग उन चीज़ों के लिए किया जाना चाहिए जो पृष्ठों और ब्लॉग पोस्टों के दायरे में नहीं आते हैं (या एक अलग नाम के साथ ब्लॉग पोस्ट लेकिन समान काम करते हैं, जैसे लेख / समाचार / डायरी / आदि) कस्टम पोस्ट के सही उपयोग के उदाहरणों में शामिल हैं : घटनाओं, मेनू, स्थानों, रूपों, लॉग, आदि
टॉम जम्मू नॉवेल

कस्टम पोस्ट मूल रूप से वेब ऐप्स के उत्पादन के साधन हैं, वे आसान संपादन के लिए बैकएंड में पोस्ट मेनू को डुप्लिकेट करने का साधन नहीं हैं (और इस तरह के उपयोग से वर्डप्रेस बहुत धीमा हो जाएगा और आपके द्वारा महसूस किए जाने वाले कार्य से अधिक हो जाएगा)
टॉम जम्मू नॉवेल

1
UUUUUgh। यह दुखद रूप से प्रश्न का सही उत्तर है। मुझे विश्वास नहीं हो रहा है कि ऊपर दिया गया स्पष्टीकरण "हम CPT के लिए डेट URL नहीं होना चाहिए" पर आधारित है, हालांकि, यह लगभग निश्चित रूप से है "CPT के लिए दिनांक URL बहुत जटिल हैं" जो कि लागू नहीं करने के लिए वास्तविक निर्णय को चला रहा है। स्पष्ट रूप से ऐसे मामले हैं जहां लोग कस्टम पोस्ट प्रकार के लिए तारीख अभिलेखागार चाहते हैं, आप पोस्ट फॉर्मेट्स को इंगित करके उस स्पष्ट इच्छा को गायब नहीं कर सकते।
जर्कलर्क

1
मुझे दृढ़ता से असहमत होना पड़ेगा। कस्टम पोस्ट प्रकार का उपयोग उन चीज़ों के लिए किया जाता है, जो आप चाहते हैं कि उनका उपयोग किया जाए, कोडेक्स में ऐसा नहीं है कि यह कहे कि वे "वेब ऐप्स" के लिए हैं। इसके अलावा, आपको बहुत अच्छी तरह से "समाचार" अनुभाग की आवश्यकता हो सकती है, जिसका अपना कस्टम वर्गीकरण है और आप उन लोगों के लिए अभिलेखागार चाहते हैं। या यहां तक ​​कि सुझाए गए "ईवेंट" प्रकार, जो मैं सहमत हूं कि सीपीटी के लिए एक सही उपयोग है, लेकिन फिर से उन लोगों को आसानी से तारीख आधारित अभिलेखागार की आवश्यकता हो सकती है।
ट्रेवर

5

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ताकि आप इसे स्वीकार करने वाले किसी भी नियमित तर्क का उपयोग कर सकें। हालाँकि, यह आपके लिए एक कस्टम पोस्ट प्रकार नाम तर्क जोड़ने में सक्षम होने की क्षमता को जोड़ता है।


2

पर्याप्त प्रतिष्ठा के लिए यह जोड़ने के लिए खेद 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);

1

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'));

देखें उसका पहला जवाब है आपका। सवालों का जवाब देते समय सिर्फ एक टिप, कोड या उस बात के लिंक के लिए न जोड़ें। हालाँकि आपका कोड काम कर सकता है, लेकिन यह जानना हमेशा अच्छा होता है कि आपका कोड क्या करता है और उसे क्यों काम करना चाहिए। अन्यथा आपका जवाब अच्छी तरह से स्वरूपित है। इसके लिए +1
पीटर गोयन ने
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.