यह बेवकूफी भरा सवाल लगता है। लेकिन, मैं इसका पता नहीं लगा सकता :(
मुझे घर पर बटन प्रदर्शित करने की आवश्यकता है जो कस्टम पोस्ट_टाइप के आर्काइव URL (आर्काइव- {पोस्ट_टाइप .php) पर जाता है। मैं उसको कैसे करू?
यह बेवकूफी भरा सवाल लगता है। लेकिन, मैं इसका पता नहीं लगा सकता :(
मुझे घर पर बटन प्रदर्शित करने की आवश्यकता है जो कस्टम पोस्ट_टाइप के आर्काइव URL (आर्काइव- {पोस्ट_टाइप .php) पर जाता है। मैं उसको कैसे करू?
जवाबों:
हाय @Silent:
पता चलता है कि वर्डप्रेस 3.1 में एक फ़ंक्शन है जो वास्तव में आप चाहते हैं और इसका नाम है get_post_type_archive_link()
; यहां बताया गया है कि आप इसे कैसे कहेंगे (कस्टम पोस्ट प्रकार नाम दिया गया है 'product'
):
<a href="<?php echo get_post_type_archive_link('product'); ?>">Products</a>
नीचे मेरा पूर्व उत्तर है इससे पहले कि मुझे पता चला कि वर्डप्रेस वास्तव में इस उपयोग के मामले के लिए एक फ़ंक्शन अंतर्निहित है।
जब तक मैंने वर्डप्रेस 3.1 के लिए मुख्य स्रोत कोड में कुछ की अनदेखी नहीं की, मुझे लगता है कि आप एक फ़ंक्शन की तलाश कर रहे हैं, get_archive_link()
जिस पर आप इस तरह कॉल कर सकते हैं (एक कस्टम पोस्ट नाम नामित 'product'
):
<a href="<?php echo get_archive_link('product'); ?>">Products</a>
और यहाँ स्रोत कोड है जिसे आप अपनी थीम की function.php
फ़ाइल में या .php
एक प्लगइन के लिए एक फ़ाइल में रख सकते हैं जिसे आप लिख रहे हैं:
if (!function_exists('get_archive_link')) {
function get_archive_link( $post_type ) {
global $wp_post_types;
$archive_link = false;
if (isset($wp_post_types[$post_type])) {
$wp_post_type = $wp_post_types[$post_type];
if ($wp_post_type->publicly_queryable)
if ($wp_post_type->has_archive && $wp_post_type->has_archive!==true)
$slug = $wp_post_type->has_archive;
else if (isset($wp_post_type->rewrite['slug']))
$slug = $wp_post_type->rewrite['slug'];
else
$slug = $post_type;
$archive_link = get_option( 'siteurl' ) . "/{$slug}/";
}
return apply_filters( 'archive_link', $archive_link, $post_type );
}
}
मैं वास्तव में सप्ताहांत में इस सटीक तर्क पर काम कर रहा था, हालांकि मुझे अभी तक 100% यकीन नहीं है कि तर्क का क्रम सभी उपयोग-मामलों में सामान्य रूप से सही है जो कि वर्डप्रेस देख सकता है, हालांकि यह शायद किसी भी विशिष्ट साइट के लिए काम करेगा।
यह भी एक बड़ी बात है कि वर्डप्रेस को टीआरसी के माध्यम से जोड़ा जाना चाहिए जो मुझे लगता है कि मैं आज शाम को करूंगा।
जब आप पोस्ट प्रकार दर्ज करते हैं, तो आप "has_archive" पैरामीटर के साथ एक स्ट्रिंग को स्लग के रूप में पास कर सकते हैं और सुनिश्चित कर सकते हैं कि आप या तो सही या किसी सरणी में फिर से लिखना चाहते हैं, लेकिन गलत नहीं है और फिर आपका CPT संग्रह URL http://www.YOURDOMAIN.com होगा / has_archive_slug उदाहरण के लिए
यदि आप उदाहरण के लिए अपने register_post_type में सेट करते हैं:
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => 'product',
'capability_type' => 'post',
'has_archive' => 'products',
'hierarchical' => false,
'menu_position' => null,
'supports' => array('title','editor','author','thumbnail','excerpt','comments')
);
register_post_type('product',$args);
तब आपका एकल url है: http://www.YOURDOMAIN.com/product/postName और आपका संग्रह url है: http://www.YOURDOMAIN.com/products/
has_archive
था कि यह एक बूलियन था, लेकिन अब मुझे पता है कि इसे एक तार दिया जा सकता है, इसलिए मेरे विलक्षण कस्टम पोस्ट प्रकार recipe
में एक बहुवचन स्लग हो सकता है/recipes/
'rewrite'
केवल एक बूलियन या सरणी मान स्वीकार करता है। के बजाय 'rewrite' => 'product',
आप सूचीबद्ध किया है, यह बजाय होना चाहिए 'rewrite' => array( 'slug' => 'product' ),
।
yoursite.com/type-slug
तब तक होता है जब तक आप स्पष्ट रूप से इसे किसी और चीज़ पर सेट नहीं करते हैं, जैसे।yoursite.com/some-other-url
..