web-dev-qa-db-ja.com

カテゴリ分類を書き換えます

私はいくつかのカテゴリがあります:

/europe/postname
/usa/postname

さまざまな理由から、これらを次のように書き換えたいと思います。

/news/view/postname

私はいくつかのリダイレクトプラグインを試したが成功しなかった。これは可能ですか?

3
Dave McCourt

それはpost_linkフィルタにコードを書くことによって行うことができます。このフィルタは最終投稿リンクを変更することを可能にします。

あなたのパーマリンクにカテゴリを表示しているので、私はあなたのパーマリンク構造がその中に%category%を含んでいると仮定しています。

以下のコードは、あなたが望むようにリンクを取得するのに役立ちます。

add_filter( 'post_link', 'wdm_change_category_permalink_structure', 10, 3 );

function wdm_change_category_permalink_structure( $post_link, $post, $leavename ) {

    $array_of_cats_to_be_replaced = array( 'europe', 'usa' ); //array of category slugs. Add more slugs here

    $get_permalink_structure = get_option( 'permalink_structure' );

    if ( strpos( $get_permalink_structure, '%category%' ) !== false ) {

        $cats = get_the_category( $post->ID ); //get categories assocaited with the post

        if ( $cats ) {

            usort( $cats, '_usort_terms_by_ID' ); // order by ID  

            $category_object = get_term( $cats[0], 'category' ); //Take first category

            $category = $category_object->slug; //Get slug of category

            if ( in_array( $category, $array_of_cats_to_be_replaced ) ) { //If category we want is in the array
                $rewritecode = array(
                    '%year%',
                    '%monthnum%',
                    '%day%',
                    '%hour%',
                    '%minute%',
                    '%second%',
                    $leavename ? '' : '%postname%',
                    '%post_id%',
                    '%category%',
                    '%author%',
                    $leavename ? '' : '%pagename%',
                );
                $rewritereplace = array(
                            $date[0],
                            $date[1],
                            $date[2],
                            $date[3],
                            $date[4],
                            $date[5],
                            $post->post_name,
                            $post->ID,
                            'news/view', //Replace category with news/view
                            $author,
                            $post->post_name,
                );

                $post_link = home_url( str_replace( $rewritecode, $rewritereplace, $get_permalink_structure ) );
                $post_link = user_trailingslashit( $post_link, 'single' );
            }
        }
    }
    return $post_link;
}

それが役に立てば幸い :)

1
WisdmLabs