कस्टम पोस्ट प्रकार और वर्गीकरण के लिए वर्डप्रेस रीराइट नियम


9

मैंने इस जगह को अतीत में जानकारी के एक अच्छे स्रोत के रूप में पाया है कि मैं अपनी समस्याओं के लिए बहुत से Googling के माध्यम से आया हूं। मेरा प्रश्न वर्डप्रेस उपयोगों के वर्बोज़ रीराइट नियमों से संबंधित है।

मैंने एक कस्टम पोस्ट टाइप नामक परियोजना की स्थापना की है , और मैंने एक कस्टम टैक्सोनॉमी नामक प्रोजेक्ट पंजीकृत किया है । सब कुछ फिर से लिखने के स्लग विकल्पों के अलावा बहुत अच्छा काम करता है क्योंकि वे परस्पर विरोधी होते हैं - फिर से लिखना नियमों के कारण सबसे अधिक संभावना है।

मूल रूप से यह वह संरचना है जिसे मैं प्राप्त करना चाहता हूं:

  • example.com/work/%taxonomy%/%post_name%/ (पदों के लिए)
  • example.com/work/%taxonomy%/ (एक विशेष वर्गीकरण अवधि से संबंधित सूची पोस्ट)
  • example.com/work/ (पृष्ठ- work.php पर जाता है, जिसमें taxonomy.php शामिल है, जो उस वर्गीकरण से जुड़े सभी पदों को सूचीबद्ध करता है)

यहां मेरे पास अब तक का कोड है, लेकिन मुझे WP_Rrrite नियमों को लिखने में सहायता की आवश्यकता है क्योंकि यह वह बिट है जिस पर मैं थोड़ा स्टम्प्ड हूं।

$labels = array(
    'name' => _x('Projects', 'post type general name'),
    'singular_name' => _x('Project', 'post type singular name'),
    'add_new' => _x('Add New', 'project item'),
    'add_new_item' => __('Add New Project'),
    'edit_item' => __('Edit Project'),
    'new_item' => __('New Project'),
    'view_item' => __('View Project'),
    'search_items' => __('Search Projects'),
    'not_found' =>  __('Nothing found'),
    'not_found_in_trash' => __('Nothing found in Trash'),
    'parent_item_colon' => ''
);

$args = array(
    'labels' => $labels,
    'public' => true,
    'publicly_queryable' => true,
    'hierarchical' => true,
    'rewrite' => array('slug'=>'work', 'with_front'=>false),
    'show_ui' => true,
    '_builtin' => false, // It's a custom post type, not built in!
    'capability_type' => 'post',
    'query_var' => "project", // This goes to the WP_Query schema
    'menu_position' => null,
    'supports' => array('title','editor','thumbnail', 'comments', 'author', 'excerpt')
);

register_post_type('project' , $args);

// Showcase Taxonomy
register_taxonomy('projects', array('project'), array(
    'public' => true,
    'hierarchical' => true,
    'label' => 'Project Categories', 
    'singular_label' => 'Project Category',
    'query_var' => true,
    'rewrite' => array('slug'=>'work', 'with_front'=>false, 'hierarchical'=>true)
    )
);

आपकी मदद के लिए बहुत धन्यवाद! :-)


1
: मैं कुछ चीजें आप शुरुआत देने के लिए codex.wordpress.org/Class_Reference/WP_Rewrite और codex.wordpress.org/Rewrite_API/add_rewrite_rule और codex.wordpress.org/Rewrite_API/add_rewrite_tag
chrisguitarguy

@ChristopherDavis धन्यवाद, मैं उन पर थोड़ा और गौर करूँगा और देखूँगा कि मुझे कैसा लगा।
मट_ड_राट

1
मुझे लगता है कि इस प्रश्न का उत्तर मिक्सिंग कस्टम पोस्ट टाइप और टैक्सोनॉमी रीराइट संरचनाओं को देखकर दिया जा सकता है ? यदि वह प्रश्न आपकी मदद नहीं करता है, तो कृपया इस प्रश्न को संपादित करें कि यह कैसे अलग है।
Jan Fabry

जवाबों:


1

आशा है कि यह आपकी समस्या को हल कर सकता है

function my_custom_post_type() {
$labels = array(
    'name' => _x('Projects', 'post type general name'),
    'singular_name' => _x('Project', 'post type singular name'),
    'add_new' => _x('Add New', 'project item'),
    'add_new_item' => __('Add New Project'),
    'edit_item' => __('Edit Project'),
    'new_item' => __('New Project'),
    'view_item' => __('View Project'),
    'search_items' => __('Search Projects'),
    'not_found' =>  __('Nothing found'),
    'not_found_in_trash' => __('Nothing found in Trash'),
    'parent_item_colon' => '',
    'menu_name' => 'Projects' 
);

$args = array(
    'labels' => $labels,
    'public' => true,
    'publicly_queryable' => true,
        'hierarchical' => false,
        'has_archive' => true,
    'rewrite' => array('slug'=>'work', 'with_front'=>false),
    'show_ui' => true,
    '_builtin' => false, // It's a custom post type, not built in!
    'capability_type' => 'post',
        'query_var' => true, // This goes to the WP_Query schema
    'menu_position' => null,
    'supports' => array('title','editor','thumbnail', 'comments', 'author', 'excerpt')
);

register_post_type( 'work' , $args );

}
function my_custom_taxonomies() {

    $labels = array(
        'name' => __( 'Taxonomy', 'taxonomy general name' ),
        'singular_name' => __( 'Taxonomy', 'taxonomy singular name' ),
        'search_items' =>  __( 'Search Taxonomy' ),
        'all_items' => __( 'All Taxonomy' ),
        'parent_item' => __( 'Parent Taxonomy' ),
        'parent_item_colon' => __( 'Parent Taxonomy:' ),
        'edit_item' => __( 'Edit Taxonomy' ), 
        'update_item' => __( 'Update Taxonomy' ),
        'add_new_item' => __( 'Add New Taxonomy' ),
        'new_item_name' => __( 'New Taxonomy Name' ),
        'menu_name' => __( 'Taxonomy' ),
    );  

    register_taxonomy( 'taxonomy', array('work'), array (
                    'labels' => $labels,
                    'hierarchical' =>false,
                    'show_ui' => true,
                    'rewrite' => array( 'slug' => 'work/taxonomy'),
                    'query_var' => true,
                    'show_in_nav_menus' => true,
                    'public' => true,
            ));
}

add_action('init', 'my_custom_post_type', 0);
add_action('init', 'my_custom_taxonomies', 10);

आपको क्या संग्रह बनाने की आवश्यकता है- work.php (आपकी पोस्ट प्रकार संग्रह) और taxonomy.php जो आपके कस्टम टैक्सोनॉमी संग्रह को दिखाने के लिए उपयोग करेगा।


अपने खुद के टैक्सोनॉमी नाम के लिए "टैक्सोनॉमी" को बदलना न भूलें। अपने post_type के समान मान का उपयोग न करें। पहली कोशिश के लिए श्रेणी का उपयोग करने का प्रयास करें। काम / श्रेणी, register_taxonomy ('श्रेणी, सरणी (' काम '), सरणी (......
nonsensecreativity

1

मुझे भी यही समस्या थी और काफी संघर्ष के बाद मैं इस समाधान के साथ समाप्त हुआ।
बस इसे अपने कोड में जोड़ें

global $wp_rewrite;
$wp_rewrite->flush_rules(); 

function my_custom_post_type() {
    $labels = array(
        'name' => _x('Projects', 'post type general name'),
        'singular_name' => _x('Project', 'post type singular name'),
        'add_new' => _x('Add New', 'project item'),
        'add_new_item' => __('Add New Project'),
        'edit_item' => __('Edit Project'),
        'new_item' => __('New Project'),
        'view_item' => __('View Project'),
        'search_items' => __('Search Projects'),
        'not_found' =>  __('Nothing found'),
        'not_found_in_trash' => __('Nothing found in Trash'),
        'parent_item_colon' => '',
        'menu_name' => 'Projects' 
    );

    $args = array(
        'labels' => $labels,
        'public' => true,
        'publicly_queryable' => true,
            'hierarchical' => false,
            'has_archive' => true,
        'rewrite' => array('slug'=>'work', 'with_front'=>false),
        'show_ui' => true,
        '_builtin' => false, // It's a custom post type, not built in!
        'capability_type' => 'post',
            'query_var' => true, // This goes to the WP_Query schema
        'menu_position' => null,
        'supports' => array('title','editor','thumbnail', 'comments', 'author', 'excerpt')
    );

    register_post_type( 'work' , $args );

    global $wp_rewrite;   
    $wp_rewrite->flush_rules();    // this should help 
}

5
$ wp_rewrite-> flush_rules () को अक्सर नहीं चलाया जाना चाहिए, इसे केवल सक्रियण या निष्क्रिय करने वाले हुक पर या जितना संभव हो उतना कम चलना चाहिए। ऐसा यहां कहा गया है: codex.wordpress.org/Rewrite_API/flush_rules ALSO बहुत ही समान है क्योंकि यह एक समान है: codex.wordpress.org/Function_Reference/flush_rewr_rules
Jared

एक और नोट पर, मैंने इसे कैसे पूरा किया: pastebin.com/k7QvxKLi
Jared

@Jared इंगित करने के लिए धन्यवाद, लेकिन मैं इसे समाप्त करने का कोई तरीका नहीं निकाल सका जब यह हमारे विषय में एकीकृत हो (अर्थात प्लगइन के साथ नहीं)। कृपया सुझाव दे।
दीपेश के.सी.

functions.phpउस स्थिति में कोड जाएगा । एक प्लगइन और एक विषय के लिए कोड बिल्कुल समान है, केवल उन विषयों में अंतर है जो हमेशा इसमें जाते हैं functions.phpया एक फ़ाइल शामिल होती हैfunctions.php
जारेड

2
मैं after_switch_themeहुक का उपयोग करने का सुझाव दूंगा, यह 3.3 से नया है (IIRC)।
क्रिस्टियन

0

एक और विस्तृत विवरण किसी अन्य पोस्ट पर है , लेकिन यहां उन बुनियादी हिस्सों को जोड़ा गया है:

  1. अपनी कर कमियों को पंजीकृत करें और जैसा कि आप करते हैं। सुनिश्चित करें कि टैक्सो के लिए आपका पुनर्लेखन स्लग "बेस्नेम" है और कैप्टन के लिए फिर से लिखना स्लग "बेसेनमे /% टैक्स_नाम%" है।

  2. इस तरह से "% tax_name%" के साथ क्या करना है

    function filter_post_type_link($link, $post)
    {
    if ($post->post_type != 'custom_post_type_name')
        return $link;
    
    if ($cats = get_the_terms($post->ID, 'taxonomy_name'))
    {
        $link = str_replace('%taxonomy_name%',array_pop($cats)->term_id, link); // see custom function defined below
    }
    return $link;
    }
    add_filter('post_type_link', 'filter_post_type_link', 10, 2);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.