web-dev-qa-db-fra.com

Résoudre un conflit de nom de type de publication personnalisé et de lien de page permanent (même slug)

J'ai un type de message personnalisé appelé "visningshus", et aussi une page avec cette limace. C'est comme il se doit (doit être).

Actuellement, " http://my-site.com/visningshus " répertorie tous les messages de ce type. Je veux montrer la page qui a cette limace permalien à la place.

Comment puis-je faire en sorte que Wordpress ne donne pas la priorité au nom du type de message, mais au lien permanent, et affiche la page?

17
Henrik Erlandsson

Le plus simple serait de simplement désactiver la page d'archive de ce CPT:

register_post_type( 'visningshus',
    array(
        [...]
        'has_archive' => false,
        [...]
    )
);

N'oubliez pas de vous rafraîchir les liens permanents par la suite dans "Paramètres> Permaliens"

30
kraftner

Je n'ai pas assez de réputation pour commenter le message de @ Carl, mais sa réponse est correcte (du moins à cette situation de garder les slug de page} et slug de type de message personnalisé identiques et ne pas utiliser un fichier archive.php)

Mais sa réponse donnerait des erreurs de pagination. Pour éviter les erreurs de pagination:

add_rewrite_rule('^visningshus/page/([0-9]+)','index.php?pagename=visningshus&paged=$matches[1]', 'top');

Cela examine la pagination, saisit le numéro de page, puis l’oblige à utiliser la page avec le slug correspondant, puis insère la variable de page.

Ce en plus à 'has_archive' => false, affiché ci-dessus devrait permettre d'obtenir les fonctionnalités souhaitées.

Comme d'autres l'ont dit, veillez à vider les règles de réécriture en accédant à Paramètres> Permaliens après avoir apporté cette modification.

J'espère que cela aide quelqu'un, parce que je sais que cela m'a stoppé pendant très longtemps.

8
Andrew Herder

Tjena Henrik!

Je pense que tout ce que vous avez à faire est d’ajouter une règle de réécriture aux règles de Wordpress Rewrite déjà créées. Ajoutez cet extrait de code à votre functions.php de votre thème ou incluez-le en tant que pugin séparé ...

add_action('init', function () {
     add_rewrite_rule('visningshus/?$','index.php?pagename=visningshus', 'top');
     flush_rewrite_rules();
}, 1000);
4
Carl

Ce qui a été résolu pour moi, c'était de définir l'archive sur false, mais également de définir la hiérarchie sur false lors de la configuration de mon type de publication personnalisé!

0
Adrian Sticea

Non autorisé à voter, mais + pour la solution Carls, register_post_type devrait avoir

'has_archive' => false

Simple. Cependant, lorsque vous rencontrez des problèmes de pagination, jetez un coup d’œil à

add_rewrite_rule
0
Vitali Protosovitski

Voici une solution générale pour donner la priorité à la pagination par rapport au contenu des types de publication personnalisés pour TOUT slug de type de publication personnalisée.

// prioritize pagination over displaying custom post type content
add_action('init', function() {
  add_rewrite_rule(
    '(.?.+?)/page/?([0-9]{1,})/?$',
    'index.php?pagename=$matches[1]&paged=$matches[2]',
    'top'
  );
});

Outre l'ajout de cet extrait de code, vous devez également vous assurer que votre type de message personnalisé a archive = false

et pour finir, accédez à la page des paramètres de permaliens Paramètres> permaliens (/wp/wp-admin/options-permalink.php) et enregistrez les paramètres actuels pour actualiser la structure des liens sur la page.

0
jmarceli

Je l'ai résolu sans résoudre le conflit. Créez une page avec visningshus et écrivez ce que vous voulez. Prenez note sur l'ID de cette page.

Créez et personnalisez le modèle archive-custom-post-type-type.php de la manière qui vous convient (vous utiliserez probablement uniquement un modèle de page), mais remplacez la partie de boucle par

$recent = new WP_Query("page_id=your-page-id");  
while($recent->have_posts()) : $recent->the_post();
    the_content();
endwhile;

Ensuite, lorsque vous allez sur http://my-site.com/visningshus vous verrez le contenu géré par la page à la bonne adresse.

Laissez-moi savoir que ça fonctionne.

0
molokom