कस्टम पोस्ट प्रकार, टैक्सोनॉमी और पर्मलिंक


62

यह मुझे पागल कर रहा है और मुझे यकीन है कि यह सरल है लेकिन मैं जो कुछ भी खोजता हूं वह एक सरल संरचना के साथ आता है (सब कुछ बहुत जटिल है)।

मेरे पास एक कस्टम पोस्ट प्रकार product_listingऔर एक कस्टम टैक्सोनॉमी है product_cat(जो श्रेणीबद्ध है और इसमें श्रेणियों की तरह होना चाहिए)।

मैं बस चाहता हूं कि मेरे URL इस तरह दिखें:

mysite.com/products/category1/product-name1 
mysite.com/products/category2/product-name2

लेकिन मेरे जीवन के लिए, कोई फर्क नहीं पड़ता कि मैं क्या कर रहा हूं, मुझे खतरनाक 404 मुद्दा मिल रहा है। पेज ठीक काम करते हैं और पोस्ट ठीक काम करती हैं लेकिन मेरे कस्टम पोस्ट सही तरीके से काम नहीं करते हैं। वे इस प्रकार दिखा रहे हैं:

mysite.com/products/product-name1
mysite.com/products/product-name2

जो वास्तव में काम करता है ! यह सिर्फ इतना है कि मैं अपने कस्टम टैक्सोनॉमी को वहां देखना चाहता हूं, साथ ही मैं उस taxonomy.phpटेम्पलेट तक पहुंचना चाहता हूं जो मैंने जाकर सेटअप किया है:

mysite.com/products/category1/
mysite.com/products/category2/

मेरी कोई भी झुग्गी एक जैसी नहीं है, न ही मैं उन्हें चाहता हूं। यहाँ पोस्ट प्रकार और मेरी functions.phpफ़ाइल का वर्गीकरण भाग है :

///// CUSTOM POST TYPES /////

// register the new post type
register_post_type( 'product_listing', array( 
    'labels'                 => array(
        'name'               => __( 'Products' ),
        'singular_name'      => __( 'Product' ),
        'add_new'            => __( 'Add New' ),
        'add_new_item'       => __( 'Create New Product' ),
        'edit'               => __( 'Edit' ),
        'edit_item'          => __( 'Edit Product' ),
        'new_item'           => __( 'New Product' ),
        'view'               => __( 'View Products' ),
        'view_item'          => __( 'View Product' ),
        'search_items'       => __( 'Search Products' ),
        'not_found'          => __( 'No products found' ),
        'not_found_in_trash' => __( 'No products found in trash' ),
        'parent'             => __( 'Parent Product' ),
    ),
    'description'           => __( 'This is where you can create new products on your site.' ),
    'public'                => true,
    'show_ui'               => true,
    'capability_type'       => 'post',
    'publicly_queryable'    => true,
    'exclude_from_search'   => false,
    'menu_position'         => 2,
    'menu_icon'             => get_stylesheet_directory_uri() . '/images/tag_orange.png',
    'hierarchical'          => true,
    '_builtin'              => false, // It's a custom post type, not built in!
    'rewrite'               => array( 'slug' => 'products', 'with_front' => true ),
    'query_var'             => true,
    'supports'              => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'trackbacks', 'custom-fields', 'comments', 'revisions' ),
) );


//hook into the init action and call create_book_taxonomies when it fires
add_action( 'init', 'create_product_taxonomies', 0 );
//add_action('admin_init', 'flush_rewrite_rules');

//create two taxonomies, genres and writers for the post type "book"
function create_product_taxonomies() {
    // Add new taxonomy, make it hierarchical (like categories)
    $labels = array(
        'name'              => _x( 'Categories', 'taxonomy general name' ),
        'singular_name'     => _x( 'Category', 'taxonomy singular name' ),
        'search_items'      =>  __( 'Search Categories' ),
        'all_items'         => __( 'All Categories' ),
        'parent_item'       => __( 'Parent Categories' ),
        'parent_item_colon' => __( 'Parent Categories:' ),
        'edit_item'         => __( 'Edit Category' ), 
        'update_item'       => __( 'Update Category' ),
        'add_new_item'      => __( 'Add New Category' ),
        'new_item_name'     => __( 'New Category Name' ),
        'menu_name'         => __( 'Category' ),
    );  

    register_taxonomy( 'product_cat', array( 'product_listing' ), array(
        'hierarchical'  => true,
        'labels'        => $labels,
        'show_ui'       => true,
        'query_var'     => true,
        //'rewrite'     => true,
        'rewrite'       => array( 'slug' => '%category%', 'with_front' => true ),
    ) );

    // Add new taxonomy, NOT hierarchical (like tags)
    $labels = array(
        'name'                       => _x( 'Scents', 'taxonomy general name' ),
        'singular_name'              => _x( 'Scent', 'taxonomy singular name' ),
        'search_items'               =>  __( 'Search Scents' ),
        'popular_items'              => __( 'Popular Scents' ),
        'all_items'                  => __( 'All Scents' ),
        'parent_item'                => null,
        'parent_item_colon'          => null,
        'edit_item'                  => __( 'Edit Scent' ), 
        'update_item'                => __( 'Update Scent' ),
        'add_new_item'               => __( 'Add New Scent' ),
        'new_item_name'              => __( 'New Scent Name' ),
        'separate_items_with_commas' => __( 'Separate scents with commas' ),
        'add_or_remove_items'        => __( 'Add or remove scents' ),
        'choose_from_most_used'      => __( 'Choose from the most used scents' ),
        'menu_name'                  => __( 'Scents' ),
    ); 

    register_taxonomy( 'scent', 'product_listing', array(
        'hierarchical'  => false,
        'labels'        => $labels,
        'show_ui'       => true,
        'query_var'     => true,
        //'rewrite'     => array( 'slug' => 'scents' ),
    ) );
}

मेरे पास एक और कस्टम टैक्सोनॉमी है scentsकि मैं आदर्श रूप से फ्रेंडली url लेना चाहता हूं, लेकिन मैं इस पर अधिक खुला हूं। मैं शायद जा कर सभी scents की एक सूची का उपयोग करना चाहता हूं, mysite.com/products/scentsलेकिन उन्हें श्रेणी विशिष्ट होने की आवश्यकता नहीं है।

कोई भी मेरी मदद कर सकता हैं?

जवाबों:


63

slugअपनी पोस्ट प्रकार की दलीलों में products/%product_cat%, और slugअपने करबद्ध तर्कों में बस में बदलाव करें products, फिर अपने पुनर्लेखन नियमों को प्रवाहित करें। वर्डप्रेस अब संभालना चाहिए /products/my-product-cat/post-name/!

अब अंत में, हमें वर्डप्रेस को पर्मलिंक्स (बॉक्स से बाहर) उत्पन्न करने में मदद करने की आवश्यकता है, यह पर्मस्ट्रक्ट टैग को नहीं पहचानेगा %product_cat%):

/**
 * Inject term slug into custom post type permastruct.
 * 
 * @link   http://wordpress.stackexchange.com/a/5313/1685
 * 
 * @param  string  $link
 * @param  WP_Post $post 
 * @return array
 */
function wpse_5308_post_type_link( $link, $post ) {
    if ( $post->post_type === 'product_listing' ) {
        if ( $terms = get_the_terms( $post->ID, 'product_cat' ) )
            $link = str_replace( '%product_cat%', current( $terms )->slug, $link );
    }

    return $link;
}

add_filter( 'post_type_link', 'wpse_5308_post_type_link', 10, 2 );

एक बात ध्यान दें, यह सिर्फ नाम के आदेश वाली पोस्ट के लिए पहली उत्पाद श्रेणी लेगा । यदि आप किसी एकल उत्पाद को कई श्रेणियां प्रदान कर रहे हैं, तो मैं आसानी से बदल सकता हूं कि यह कैसे निर्धारित करता है कि किसी को पर्मलिंक में किसका उपयोग करना है।

Lemme पता है कि आप इस पर कैसे प्राप्त करते हैं, और हम अन्य मुद्दों से निपट सकते हैं!


ओह वाह मैं विस्मय में हूँ! यह काम किया! आखिरकार! मैंने कभी नहीं सोचा था कि कुछ भी होगा !!! शुक्रिया SOOOOOO ज्यादा !!! ............ अब, मैं कैसे अपने आप पर टैक्सोनोमी यूआरएल को हथियाने के लिए एक लिंक (the_permalink जैसा कुछ) उत्पन्न करूंगा? / उत्पादों / मेरे उत्पाद-बिल्ली /
RodeoRamsey

मुझे लगता है कि मुझे लगता है कि ^ ^ ^ ^ ............ से काम किया गया था, लेकिन अब मैं पेजिनेशन पर अटक गया हूं। किसी भी पेजेशन (कस्टम फंक्शन या बिलिन) का उपयोग करते समय टूटने लगता है / उत्पादों / माय-प्रोडक्ट-कैट / के रूप में ठीक लगता है, लेकिन / उत्पादों / माय-प्रोडक्ट-कैट / पेज / 2 / ४०४ पर रिटर्न देता है और टैक्सोनॉमी.फैप फ़ाइल को छोड़ देता है index.php फ़ाइल का पक्ष। मैंने वह सब कुछ आजमाया है जो मुझे मिल सकता है और अभी भी कुछ नहीं।
रोडोडेमी

1
क्या आप एकल उत्पाद को फिर से लिखना बदलने पर विचार करेंगे product/cat-name/product-name? (एकवचन पर ध्यान दें) परेशानी टैक्सोनॉमी पेजिनेशन के लिए फिर से लिखना नियम है, क्योंकि यह एकल उत्पादों के लिए पहले के नियम से पकड़ा जा रहा है!
TheDeadMedic

मैं इसके लिए खुला हूं। लेकिन इसके चारों ओर मेरे सिर को लपेटने के लिए, क्या इसका मतलब होगा कि यदि आप किसी एकल उत्पाद पृष्ठ बनाम 'श्रेणी' पृष्ठ को देख रहे हैं, तो उत्पादों का एक अलग URL पथ होगा? तो एकल उत्पाद / बिल्ली-नाम / ठेस-नाम होगा, लेकिन बिल्लियों उत्पाद / बिल्ली-नाम / होगा ? हार का वह प्रकार "मानव हितैषी" का उद्देश्य नहीं होगा? मैं अपने ग्राहकों को wp डैशबोर्ड को सीखने में मदद करने के लिए एक कठिन समय है कि अकेले उस अंतर को जाने दो ... अगर मैं गलत समझ रहा हूँ pls मुझे बताएं! मैं भी इस तरह के रूप में कोई भी सामने निर्देशिका के साथ खुश हो सकता है उत्पाद-बिल्ली / उत्पाद-nam और सिर्फ उत्पाद-बिल्ली / । क्या वह काम कर सकता है?
अस्तोदरामासी

2
आप इसे मिला - हालांकि मैं कहेंगे यह है "मानव दोस्ताना ', के रूप में वहाँ (अभिलेखागार के बीच स्पष्ट अंतर है products/) और विलक्षण आइटम ( product/)। और नहीं, मैं 'फ्रंट डाइरेक्टरी' रखूंगा - यह पोस्ट और पेज से स्पष्ट अंतर रखने में मदद करता है, अन्यथा आप प्रदर्शन के मुद्दों (यानी रीबोज़ राइट नियमों) के साथ समाप्त हो सकते हैं।
TheDeadMedic

6

धन्यवाद @ TheDeadMechanic, आपके उत्तर ने मुझे मदद की, लेकिन केवल आंशिक रूप से। मैं एक ही बात करना चाहता था @RodeoRamsey के लिए कहा, लेकिन नेस्टेड श्रेणियों (यानी:) के साथ mysite.com/products/category1/child-category-1/grandchild-category-1/product-nameऔर आपका समाधान उस पर काम नहीं किया।

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


4

मुझे यकीन नहीं है कि wp बॉक्स से उस संरचना का समर्थन करता है - लेकिन आप बहुत आसानी से ऐसा करने के लिए अपने स्वयं के पुनर्लेखन नियम बना सकते हैं।

पिछले उत्तर की जाँच करें यहाँ लेखक यूआरएल फिर से लिखना

आप लाइन बदल सकते हैं

$newrules['author/([^/]+)/songs/?$'] = 'index.php?post_type=songs&author=$matches[1]';

जैसा कुछ है

$newrules['products/([^/]+)/([^/]+)/?$'] = 'index.php?post_type=product_listing&product_cat=$matches[1]&name=$matches[2]';

यहाँ product_cat हिस्सा अति-उपयोगी हो सकता है - मुझे यकीन नहीं है कि यह आवश्यक है।

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


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

2

हाँ, यह कस्टम पोस्ट प्रकार के लिए पर्मलिंक सेट करने से पहले मुझे पागल कर रहा था। मुझे कस्टम पोस्ट प्रकार को संभालने के लिए एक प्लगइन मिला। इसका उपयोग करना बहुत आसान है। http://wordpress.org/extend/plugins/custom-post-permalinks/ WP इसे एक मुख्य विशेषता के रूप में जोड़ना चाहिए! सिंह


मैंने इसे पहले देखा था और इसका इस्तेमाल करने से परहेज किया क्योंकि इसने "गैर-श्रेणीबद्ध" कर के लिए कहा था। मेरे पास एक था जो पदानुक्रमित करने के लिए सेट किया गया था, इसलिए मुझे नहीं लगा कि यह काम करेगा, लेकिन अब तक, ऐसा लगता है कि यह चाल चली गई है! इसके अलावा, यह / उत्पादों / बिल्ली-नाम / ठेस-नाम / संरचना को पूरा करने के लिए काम कर रहा है जो मैं प्राप्त करने की कोशिश कर रहा था (अन्य उत्तर के लिए टिप्पणी देखें)। @ TheDeadMedic, क्या यह एक व्यवहार्य विकल्प है? या मुझे फ़ंक्शन.php फ़ाइल में फिर से लिखना चाहिए?
रोडियोमैसी

0

वास्तव में, यह बहुत आसान है। आपको बस एक लाइन की जरूरत है। यहाँ मेरा कोड है

फ़ंक्शन create_product_taxonomies ()
{
// नया वर्गीकरण जोड़ें, इसे श्रेणीबद्ध बनाएं (श्रेणियों के अनुसार)
    $ लेबल = सरणी (
        'नाम' => _x ('श्रेणियाँ', 'वर्गीकरण का सामान्य नाम'),
        'singular_name' => _x ('श्रेणी', 'वर्गीकरण स्वायत्त नाम'),
        'search_items' => __ ('खोजें श्रेणियाँ'),
        'all_items' => __ ('सभी श्रेणियाँ'),
        'parent_item' => __ ('पैरेंट श्रेणियाँ'),
        'parent_item_colon' => __ ('पैरेंट श्रेणियाँ:'),
        'edit_item' => __ ('श्रेणी संपादित करें'),
        'update_item' => __ ('अपडेट श्रेणी'),
        'add_new_item' => __ ('नई श्रेणी जोड़ें'),
        'new_item_name' => __ ('नई श्रेणी का नाम'),
        'menu_name' => __ ('श्रेणी'),
    );

    register_taxonomy ('product_cat', array ('product_listing'), array ()
        'श्रेणीबद्ध' => सत्य,
        'लेबल' => $ लेबल,
        'show_ui' => सच है,
        'query_var' => सत्य,
        'फिर से लिखना' => सरणी ('श्रेणीबद्ध' => सत्य),
    ));

और GenerateWP.com से मेरी समीक्षा सीपीटी के लिए उत्पन्न कर के लिए लागू। मैं इसका उपयोग अपनी खुद की वर्डप्रेस साइट, https://www.wpstarter.com पर कर रहा हूं

समारोह समीक्षाएँ_श्रेणी_टैक्सोनॉमी () {

    $ लेबल = सरणी (
        'नाम' => _x ('समीक्षा श्रेणियाँ', 'वर्गीकरण नाम', 'समीक्षाएँ_श्रेणी'),
        'singular_name' => _x ('समीक्षाएं श्रेणी', 'वर्गीकरण स्वायत्त नाम', 'समीक्षाएं_श्रेणी'),
        'menu_name' => __ ('समीक्षाएं श्रेणी', 'समीक्षाएँ_श्रेणी'),
        'all_items' => __ ('सभी समीक्षा श्रेणियाँ', 'समीक्षाएँ_श्रेणी'),
        'parent_item' => __ ('पैरेंट रिव्यू कैटेगरी', 'समीक्षाएँ_श्रेणी'),
        'parent_item_colon' => __ ('पैरेंट रिव्यू श्रेणी:', 'समीक्षाएँ_श्रेणी'),
        'new_item_name' => __ ('नई समीक्षा श्रेणी नाम', 'समीक्षाएँ_श्रेणी'),
        'add_new_item' => __ ('नई समीक्षा श्रेणी जोड़ें', 'समीक्षाएँ_श्रेणी'),
        'edit_item' => __ ('समीक्षा श्रेणी संपादित करें', 'समीक्षाएँ_श्रेणी'),
        'update_item' => __ ('अपडेट समीक्षा श्रेणी', 'समीक्षाएँ_श्रेणी'),
        'view_item' => __ ('देखें समीक्षा श्रेणी', 'समीक्षाएँ_श्रेणी'),
        'अलग_इटीम्स_विथ_कमस' => __ ('अल्पविराम से अलग आइटम', 'समीक्षाएँ_श्रेणी'),
        'add_or_remove_items' => __ ('आइटम जोड़ें या निकालें', 'समीक्षाएं_श्रेणी'),
        'select_from_most_used' => __ ('सबसे अधिक इस्तेमाल किया गया विकल्प चुनें', 'समीक्षाएँ_श्रेणी'),
        'popular_items' => __ ('लोकप्रिय समीक्षा श्रेणियां', 'समीक्षाएँ_श्रेणी'),
        'search_items' => __ ('खोज आइटम', 'समीक्षाएँ_श्रेणी'),
        'not_found' => __ ('नहीं मिला', 'समीक्षाएँ_श्रेणी'),
        'no_terms' => __ ('No Review श्रेणियाँ', 'समीक्षाएँ_श्रेणी'),
        'आइटम_सूची' => __ ('समीक्षा श्रेणियाँ सूची', 'समीक्षाएँ_श्रेणी'),
        'items_list_navigation' => __ ('समीक्षा श्रेणियाँ सूची नेविगेशन', 'समीक्षाएं_श्रेणी'),
    );
    $ args = सरणी (
        'लेबल' => $ लेबल,
        'श्रेणीबद्ध' => सत्य,
        'जनता' => सच है,
        'show_ui' => सच है,
        'show_admin_column' => सत्य,
        'show_in_nav_menus' => सत्य,
        'show_tagcloud' => गलत,
        'show_in_rest' => सत्य,
        'फिर से लिखना' => सरणी ('श्रेणीबद्ध' => सत्य),
    );
    register_taxonomy ('समीक्षाएँ_श्रेणी', सरणी ('wps_reviews'), $ args);

}
add_action ('init', 'reviews_category_taxonomy', 0);

आप सभी की जरूरत है तो 'फिर से लिखना' => सरणी ('पदानुक्रमित' => सच),

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.