web-dev-qa-db-ja.com

パーマリンクにメタ値を追加する

私は出版物を持っています、そして私は単純に年と月をパーマリンクに加えたいです。現在、出版年月はメタ値として投稿に追加されています。私は出版物をカスタム投稿タイプとして設定し、出版物の特定のタイトルの分類法を作成しました。私はパーマリンクをしたいのですが:

出版物/出版物のタイトル/出版年/出版月/投稿名

出版年月のメタ値をパーマリンクに追加したいだけです。

これまでのところ、出版された年と月をプルしてURLに追加することができましたが、残念ながら、投稿にアクセスしようとすると404が表示され続けます。私は私の下の私のステップの1つと間違ったターンを取っていると思う….

任意の助けがいただければ幸いです。

これらは私が次の順序でしたステップです:

  1. 私は出版年と出版月をURLに追加していたので、私はWordPressにこれらのカスタムクエリ文字列変数を認識させなければならないことを読んでいました。これらのカスタム変数を登録するために以下の関数を追加しました。

    function pubyear_register_rewrite_tag() {  
        add_rewrite_tag( '%pubyear%', '([0-9]{4})');  
    }  
    
    add_action( 'init', 'pubyear_register_rewrite_tag');
    
    function pubmonth_register_rewrite_tag() {  
       add_rewrite_tag( '%pubmonth%', '([0-9]{2}');  
    }  
    
    add_action( 'init', 'pubmonth_register_rewrite_tag');
    

2)パーマリンク構造に年と月を追加しました。

add_filter('post_type_link', 'pub_term_permalink', 10, 4);

function pub_term_permalink($permalink, $post, $leavename, $sample)
{
    if ( false !== strpos( $permalink, '%publication-title%/%pubyear%/%pubmonth%' ) ) {

     //get the publication-title
     $publicationtype = get_the_terms( $post->ID, 'publication-type' );

     //get the year of the publication
     $pubyear = date('Y', get_post_meta($post->ID, 'pub_date', true));

     //get the month of the publication
     $pubmonth = date('m', get_post_meta($post->ID, 'pub_date', true));

     $rewritecode = array(
         '%publication-type%',
         '%pubyear%',
         '%pubmonth%',
         $leavename? '' : '%postname%',
     );

     $rewritereplace = array(
         array_pop($publicationtype)->slug,
         $pubyear,
         $pubmonth,
         $post->post_name
     );

     $permalink = str_replace($rewritecode, $rewritereplace, $permalink);    

 }
    return $permalink;
}

3)書き換えルールを追加します。

function pub_add_rewrite_rules() {  
    add_rewrite_rule(  '^([^/]*)/([0-9]{4})/([0-9]{2})/([^/]+)?', 'publications/index.php?pagename=$matches[3]', 'top' );  
}  

add_action( 'init', 'pub_add_rewrite_rules' );

4)カスタム投稿タイプが登録されており、この書き換え配列を含んでいることを確認します。

'rewrite' => array
    (
            'slug' => 'publications/%publication-type%/%pubyear%/%pubmonth%',
    'with_front' => false
         ),
4
user1255062

これを機能させることができました。将来の誰かに役立つことを期待して、私たちがしたことを書き留めると思いました(または、誰かがそれをどのように改善するかについてのフィードバックをくれます)

  1. 登録済みカスタム書き換え規則

    add_action('init', 'pub_rewrite_rules');
    
    function pub_rewrite_rules()
    {
        global $wp_rewrite;
    
        $wp_rewrite->add_rewrite_tag( '%pubyear%', '([0-9]{4})', 'pubyear=');
        $wp_rewrite->add_rewrite_tag( '%pubmonth%', '([0-9]{2})', 'pubmonth=');
    }
    
  2. 作成されたパーマリンク構造

     function pub_permalink($permalink, $post, $leavename)
     {
         if ( false !== strpos( $permalink, '%publication-type%/%pubyear%/%pubmonth%' ) ) {
    
             $publicationtype = get_the_terms($post->ID, 'publication-type');
             $pubyear = date('Y', get_post_meta($post->ID, 'publication_date', true));
             $pubmonth = date('m', get_post_meta($post->ID, 'publication_date', true));
    
             $rewritecode = array(
                   '%publication-type%',
                   '%pubyear%',
                   '%pubmonth%',
                   $leavename? '' : '%postname%',
             );
    
             $rewritereplace = array(
                   array_pop($publicationtype)->slug,
                   $pubyear,
                   $pubmonth,
                   $post->post_name
             );
    
             $permalink = str_replace($rewritecode, $rewritereplace, $permalink);    
        }
        return $permalink;
    }
    
  3. 登録分類法

  4. 登録されたカスタム投稿タイプは、以下を含む書き換え配列を作成しました。

     'slug' => 'publications/%publication-type%/%pubyear%/%pubmonth%',
    
  5. [固定リンク設定]ページに移動して保存またはflush_rewrite_rule()して書き換えルールをフラッシュします。

4
user1255062