Adicionando valores meta para permalink

4

Tenho publicações e quero simplesmente adicionar ano e mês ao permalink. Atualmente, o ano e o mês de publicação são adicionados ao post como um valor meta. Configurei publicações como um tipo de postagem personalizado e criei taxonomia para o título específico da publicação. Eu gostaria que o permalink fosse:

publicações / título da publicação / ano-publicado / mês-publicado / nome-da-postagem

Eu simplesmente quero adicionar os meta valores para o ano e mês de publicação ao permalink.

Até agora, consegui publicar o ano e o mês e adicioná-lo à URL, mas infelizmente continuo recebendo um 404 quando tento acessar as postagens. Eu acho que estou tomando um caminho errado com um dos meus passos abaixo ...

Qualquer ajuda seria apreciada.

Estes são os passos que fiz na seguinte ordem:

  1. Como eu estava adicionando ano de publicação e mês de publicação ao URL, eu estava lendo que precisava tornar o WordPress ciente dessas variáveis de querystring personalizadas. Eu adicionei as seguintes funções para registrar essas variáveis personalizadas:

    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) Adicionado o ano e o mês à estrutura do link permanente:

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) Adicione regras de reescrita:

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) Verifique se o tipo de postagem personalizada está registrado e inclui essa matriz de reescrita:

'rewrite' => array
    (
            'slug' => 'publications/%publication-type%/%pubyear%/%pubmonth%',
    'with_front' => false
         ),
    
por user1255062 14.08.2012 / 01:53

1 resposta

4

Conseguiu fazer isso funcionar. Pensei em escrever o que fizemos na esperança de que isso ajudará alguém no futuro (ou alguém pode me dar feedback sobre como melhorá-lo melhor!)

  1. Regras de regravação personalizada registradas

    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. Estrutura Permalink criada

     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. Taxonomia Registrada

  4. Tipo de postagem personalizada registrada escreveu reescrever matriz para incluir:

     'slug' => 'publications/%publication-type%/%pubyear%/%pubmonth%',
    
  5. flush reescreva as regras indo para a página Permalink Settings e salvando ou flush_rewrite_rule ()

por user1255062 15.08.2012 / 23:58