Agregar meta valores a permalink

4

Tengo publicaciones y quiero simplemente agregar un año y un mes al enlace permanente. Actualmente, el año y el mes de publicación se agregan a la publicación como un valor meta. He configurado las publicaciones como un tipo de publicación personalizada y he creado una taxonomía para el título específico de la publicación. Me gustaría que el enlace permanente fuera:

publicaciones / título-publicación / año-publicado / mes-publicado / nombre del post

Simplemente quiero agregar los valores meta para el año y mes de publicación al enlace permanente.

Hasta ahora, he podido sacar el año y el mes publicados y agregarlo a la URL, pero desafortunadamente sigo obteniendo un 404 cuando intento acceder a las publicaciones. Creo que me estoy equivocando con uno de mis pasos a continuación ...

Cualquier ayuda sería apreciada.

Estos son los pasos que hice en el siguiente orden:

  1. Desde que agregué el año de publicación y el mes de publicación a la url, estaba leyendo que tenía que informar a WordPress sobre estas variables personalizadas de cadenas de consulta. Agregué las siguientes funciones para registrar estas variables 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) Se agregó el año y el mes a la estructura de enlace 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) Añadir reglas de reescritura:

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) Asegúrese de que el tipo de publicación personalizada esté registrado e incluya esta matriz de reescritura:

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

1 respuesta

4

Fue capaz de hacer que esto funcione. Pensé que escribiría lo que hicimos con la esperanza de que ayude a alguien en el futuro (¡o alguien me puede dar su opinión sobre cómo mejorarlo mejor!)

  1. Reglas de reescritura personalizadas 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. Estructura de enlace permanente creada

     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. Taxonomía registrada

  4. Tipo de publicación personalizada registrada escribí la matriz de reescritura para incluir:

     'slug' => 'publications/%publication-type%/%pubyear%/%pubmonth%',
    
  5. borre las reglas de reescritura yendo a la página de Configuración de Permalink y guardando o flush_rewrite_rule ()

respondido por el user1255062 15.08.2012 - 23:58