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:
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
),
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!)
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=');
}
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;
}
Taxonomie enregistrée
Type de message personnalisé enregistré a écrit un tableau de réécriture pour inclure:
'slug' => 'publications/%publication-type%/%pubyear%/%pubmonth%',
effacer les règles de réécriture en allant sur la page Paramètres Permalink et en enregistrant ou en écrivant flush_rewrite_rule ()