Özel Yazı Türü ve Sınıflandırma için WordPress Yeniden Yazım Kuralları


9

Burası, geçmişte karşılaştığım sorunlar için bir sürü Google ile iyi bir bilgi kaynağı olarak buldum. Sorum, WordPress'in kullandığı ayrıntılı yeniden yazma kurallarıyla ilgili.

Proje adı verilen özel bir yazı türü ayarladım ve projeler adı verilen özel bir sınıflandırma kaydettim . Her şey, büyük olasılıkla yeniden yazma kurallarından dolayı, yeniden yazma sümük seçenekleri dışında, çakışmaya neden oldukları için harika çalışıyor.

Temelde bu ulaşmak istediğim yapı:

  • example.com/work/%taxonomy%/%post_name%/ (gönderiler için)
  • example.com/work/%taxonomy%/ (belirli bir sınıflandırma terimine ait yayınları listeleyin)
  • example.com/work/ (bu sınıflandırma ile ilişkili tüm yayınları listelemek için taxonomy.php dosyasını içeren page-work.php dosyasına gider)

İşte şimdiye kadar var kod, ama bu biraz stumped biraz gibi WP_Rewrite kuralları yazma yardıma ihtiyacım var.

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

Yardımın için çok teşekkürler! :-)



@ChristopherDavis Teşekkürler, bunlara biraz daha bakacağım ve nasıl geçtiğimi göreceğim.
matt_d_rat

1
Bence bu soru Özel yazı tipi ve taksonomi yeniden yazma yapılarını karıştırmaya bakarak cevaplanabilir ? Bu soru size yardımcı olmazsa, nasıl farklı olduğunu belirtmek için lütfen bu soruyu düzenleyin.
Jan Fabry

Yanıtlar:


1

Umarım bu sorununuzu çözebilir

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

oluşturmanız gereken şey, özel sınıflandırma arşivinizi göstermek için kullanacağınız archive-work.php (yazı tipi arşiviniz) ve taxonomy.php'dir.


kendi sınıflandırma adınız için "sınıflandırma" yı değiştirmeyi unutmayın. Post_type'nizle aynı değeri kullanmayın. ilk denemede kategori kullanmaya çalışın. iş / kategori, register_taxonomy ('kategori, dizi (' iş '), dizi (......
duyarsızlık

1

Aynı problemi yaşadım ve çok uğraştıktan sonra bu çözümü buldum.
Bunu sadece kodunuza ekleyin

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 () bu kadar sık ​​çalıştırılmamalıdır, yalnızca etkinleştirme veya devre dışı bırakma kancalarında veya mümkün olduğunca az miktarda çalıştırılmalıdır. Burada şöyle yazıyor: codex.wordpress.org/Rewrite_API/flush_rules ALSO, şu işlevle hemen hemen aynı işlevdir: codex.wordpress.org/Function_Reference/flush_rewrite_rules
Jared

Başka bir not, bunu nasıl başardım: pastebin.com/k7QvxKLi
Jared

@Jared İşaret ettiğiniz için teşekkürler, ancak bu bizim temaya entegre edildiğinde bunu gerçekleştirmenin bir yolunu bulamadım (yani eklenti yoluyla değil). Lütfen önerin.
Dipesh KC

Bu durumda kod functions.phpgirilir. Bir eklenti ve tema kodu tamamen aynıdır, tek fark her zaman girdiği temalarda functions.phpveya içerdiği bir functions.php
dosyadadır

2
after_switch_themeKancayı kullanmanızı öneririm , 3.3 (IIRC) için yeni.
Cristian

0

Daha ayrıntılı bir açıklama başka bir yayında , ancak eklemeniz gereken temel parçalar:

  1. Taksonomilerinizi ve cpt'lerinizi olduğu gibi kaydedin. Taksi için yeniden yazma bilginizin "basename" ve cpt için yeniden yazma bilgisinin "basename /% tax_name%" olduğundan emin olun.

  2. Wordpress'e "% tax_name%" ile şu şekilde ne yapacağınızı söyleyin:

    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);
    
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.