Rescrierea unui permalink pentru custom-post-type cu termen de taxonomie?

16 apr. 2012, 09:23:57
Vizualizări: 35.3K
Voturi: 17

Încerc să rescriu URL-ul pentru un custom_post_type numit wr_events cu unul dintre termenii custom_taxonomy din event_type

add_action('init', 'wr_events');

function wr_events() {

     register_taxonomy(
        'event_type',
        'wr_event',
        array(
            'label' => 'Tipuri',
            'singular_label' => 'Tip',
            'hierarchical' => true,
            'query_var' => true,
            'rewrite' => array('slug' => 'events'),
        )
    );

    $labels = array(
        'name' => _x('Evenimente', 'nume general tip postare'),
        'singular_name' => _x('Eveniment', 'nume singular tip postare')
    );

    $args = array(
        'labels' => $labels,
        'public' => true,
        'publicly_queryable' => true,
        'show_ui' => true,
        'query_var' => true,
        'capability_type' => 'post',
        'hierarchical' => false,
        'menu_position' => null,
        'supports' => array('title','editor','thumbnail', 'excerpt'),
        'rewrite' => array(
            //'slug' => 'event',
            'slug' => 'events/%event%',
            'with_front' => false
        ),
        'has_archive' => 'events'
    ); 

    register_post_type( 'wr_event' , $args );
    flush_rewrite_rules();
}

add_action('save_post', 'save_details');

add_filter('post_type_link', 'events_permalink_structure', 10, 4);
function events_permalink_structure($post_link, $post, $leavename, $sample)
{
    if ( false !== strpos( $post_link, '%event%' ) ) {
        $event_type_term = get_the_terms( $post->ID, 'event_type' );
        $post_link = str_replace( '%event%', array_pop( $event_type_term )->slug, $post_link );
    }
    return $post_link;
}

Așadar, în cazul meu, termenii taxonomiei ar fi "workshops" sau "lectures" etc. url/events/lectures sau url/events/workshops listează toate postările mele legate de această "categorie", url/events arată o arhivă personalizată pentru toate evenimentele mele. -> acest lucru este exact ce îmi doresc, însă singurul lucru care nu funcționează este URL-ul complet către custom-post-ul în sine...

url/events/lectures/post-name - generează o eroare 404!

Aveți vreo idee de ce se întâmplă acest lucru? Funcția mea events_permalink_structure() pare să funcționeze corect deoarece înlocuiește permalink-urile exact așa cum vreau.

Am instalat pluginul "Rewrite Analyzer" și acesta îmi arată "Regex is empty" pentru wr_event.

Am încercat, de asemenea, să reactualizez Regulile de Rescriere vizitând setările permalink-urilor. Cu toate acestea, nu a avut niciun efect.

0
Toate răspunsurile la întrebare 1
3
11

Schimbă toate %event% cu %event_type%. Sper că acest lucru funcționează pentru tine.

16 apr. 2012 14:33:00
Comentarii

Mulțumesc foarte foarte mult! Minunat! Nu înțeleg exact cum funcționează, dar merge :)

mathiregister mathiregister
16 apr. 2012 17:57:18

@mathiregister - asta se întâmplă pentru că WordPress nu înțelege automat tag-ul %event%, dar înțelege că %event_type% corespunde taxonomiei tale pentru tipul de eveniment.

Stephen Harris Stephen Harris
9 mai 2012 18:55:51

Acum am un custom post type cu slug-ul /catalog/ care afișează toate articolele, /katalog/whatever/ afișează articolele din taxonomia personalizată cu slug-ul whatever, iar /katalog/whatever/mypost afișează un singur articol care aparține taxonomiei whatever. Doar înlocuiește %event% în codul de mai sus cu numele taxonomiei tale personalizate între %%

User User
16 aug. 2012 22:51:51