Résoudre un conflit de nom de type de publication personnalisé par rapport à une page (même slug)

14

J'ai un type de message personnalisé appelé "visningshus", ainsi qu'une page contenant ce slug. C'est comme il se doit (doit être).

Actuellement, " enlace " répertorie tous les messages de ce type. Je veux montrer la page qui a ce slug permanent à 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?

    
posée Henrik Erlandsson 19.02.2014 - 09:32

7 réponses

25

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

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

N'oubliez pas de vous rafraîchir les liens permanents ultérieurement dans "Paramètres> Liens permanents"

    
réponse donnée kraftner 19.02.2014 - 11:28
7

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 maintien du slug de page et de slug de type de message personnalisé identique et n'utilisant pas de 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');

Ceci regarde 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 complément à 'has_archive' => false, posté ci-dessus devrait permettre d'obtenir les fonctionnalités souhaitées.

Comme d'autres l'ont déjà indiqué, veillez à vider les règles de réécriture en consultant Paramètres > Permaliens après ce changement.

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

    
réponse donnée Andrew Herder 14.03.2017 - 21:22
4

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 fichier séparé ...

add_action('init', function () {
     add_rewrite_rule('visningshus/?$','index.php?pagename=visningshus', 'top');
     flush_rewrite_rules();
}, 1000);
    
réponse donnée Carl 13.05.2016 - 16:19
0

Je l'ai résolu sans résoudre le conflit. Créez une page avec slug visningshus et écrivez ce que vous voulez. Notez 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 un modèle de page), mais remplacez la partie de la boucle par

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

Ensuite, lorsque vous accédez à enlace , le contenu géré par la page s'affiche à la bonne adresse.

Faites-moi savoir que cela fonctionne.

    
réponse donnée molokom 19.02.2014 - 11:31
0

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, consultez

add_rewrite_rule
    
réponse donnée Vitali Protosovitski 23.02.2017 - 18:31
0

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é!

    
réponse donnée Adrian Sticea 05.10.2018 - 14:50
0

Voici une solution générale pour hiérarchiser la pagination sur le 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 pour objet archive = false

.

et le dernier mais non le moindre, 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.

    
réponse donnée jmarceli 08.10.2018 - 08:33

Lire d'autres questions sur les étiquettes