web-dev-qa-db-fra.com

Ajout de méta-valeurs à permalink

J'ai des publications et je veux simplement ajouter l'année et le mois au permalien. Actuellement, l'année et le mois de publication sont ajoutés à l'article en tant que méta-valeur. J'ai configuré les publications en tant que type d'article personnalisé et créé une taxonomie pour le titre spécifique de la publication. J'aimerais que le permalien soit:

publications/publication-titre/année-publiée/mois-publiée/nom-de-poste

Je veux simplement ajouter les méta-valeurs pour l'année et le mois de la publication au permalien.

Jusqu'ici, j'ai pu extraire l'année et le mois publiés et les ajouter à l'URL, mais malheureusement, je continue à obtenir un 404 lorsque j'essaie d'accéder aux publications. Je pense que je prends un mauvais tournant avec l'une de mes étapes ci-dessous ...

Toute aide serait appréciée.

Voici les étapes que j'ai suivies dans l'ordre suivant:

  1. Depuis que j'ajoutais année de publication et mois de publication à l'URL, je lisais que je devais informer WordPress de ces variables de chaîne de requête personnalisées. J'ai ajouté les fonctions suivantes pour enregistrer ces variables personnalisées:

    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) Ajout de l'année et du mois à la structure de permalien:

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) Ajouter des règles de réécriture:

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) Assurez-vous que le type de publication personnalisé est enregistré et inclut ce tableau de réécriture:

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

A pu faire fonctionner cela. J'ai pensé écrire ce que nous avons fait dans l'espoir que cela puisse aider quelqu'un à l'avenir (ou que quelqu'un puisse me donner des informations sur la manière de l'améliorer!)

  1. Règles de réécriture personnalisées enregistrées

    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. Structure permalien créée

     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. Taxonomie enregistrée

  4. Type de message personnalisé enregistré a écrit un tableau de réécriture pour inclure:

     'slug' => 'publications/%publication-type%/%pubyear%/%pubmonth%',
    
  5. effacer les règles de réécriture en allant sur la page Paramètres Permalink et en enregistrant ou en écrivant flush_rewrite_rule ()

4
user1255062