Несколько пользовательских постоянных структур в Wordpress - PullRequest
4 голосов
/ 05 октября 2010

У меня есть один пользовательский тип сообщения 'story' и две таксономии, 'artist' и 'writer' .

Мне удалось получить пользовательскую структуру постоянных ссылок, такую ​​как /% artist /% writer% /% story% , выполнив это (возобновленный код):

    add_action('init', 'custom_init');
    add_filter('post_type_link', 'story_permalink', 10, 3);

    function custom_init(){  
        $story = array(  
        'query_var' => true,
        'rewrite' => false,
        );
        $artist = array(
        'query_var' => true,
        'rewrite' => true
        );
        $writer = array(
            'query_var' => true,
            'rewrite' => true
        );  

        register_post_type('story', $story);
        register_taxonomy('artist', 'story', $artist);
        register_taxonomy('writer', 'story', $writer);

        global $wp_rewrite;
        $story_structure = '/%artist%/%writer%/%story%';
        $wp_rewrite->add_rewrite_tag("%story%", '([^/]+)', "story=");
        $wp_rewrite->add_permastruct('story', $story_structure, false);
    }

    function story_permalink($permalink, $post_id, $leavename){
        $post = get_post($post_id);

        $rewritecode = array(
        '%artist%',
        '%writer%',
        $leavename? '' : '%postname%',
        $leavename? '' : '%pagename%',
        );

        if('' != $permalink && !in_array($post->post_status, array('draft', 'pending', 'auto-draft'))){

            if (strpos($permalink, '%artist%') !== FALSE){
            $terms = wp_get_object_terms($post->ID, 'artist');  
            if (!is_wp_error($terms) && !empty($terms) && is_object($terms[0])) $artist = $terms[0]->slug;
            else $artist = 'unassigned-artist';         
            }

        if (strpos($permalink, '%writer%') !== FALSE){
            $terms = wp_get_object_terms($post->ID, 'writer');  
            if (!is_wp_error($terms) && !empty($terms) && is_object($terms[0])) $writer = $terms[0]->slug;
            else $writer = 'unassigned-writer';         
        }           

        $rewritereplace = array(
            $artist,
            $writer,
            $post->post_name,
            $post->post_name,
        );
        $permalink = str_replace($rewritecode, $rewritereplace, $permalink);
        }
        else{
        }
        return $permalink;
    }

Это дает мне что-то вроде / jason / john / the-cat-is-the-the-table .

Но структуры, которые мне действительно нужны:

/ художники /% artist%
/ писатели /% writer%
/ story /% story%

Возможно, это слишком просто, но я не могу понять, как это сделать, потому что я не знаю, как обращаться с пользовательскими типами записей и таксономиями в однородной структуре пользовательских постоянных ссылок.

Любая помощь для решения этой проблемы будет принята с благодарностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...