web-dev-qa-db-fra.com

wordpress - charge un modèle basé sur l'URI

J'ai un certain nombre de types de messages personnalisés: i.e. 'windows', 'doors', 'garages'

et je veux charger un modèle personnalisé (special.php) chaque fois que mon site wordpress a une URL qui ressemble à ceci:

www.mysite.com/windows/
www.mysite.com/doors/
www.mysite.com/garages/

Je ne veux pas utiliser de pages, car ce n'est pas approprié dans ce cas (j'ai donné un exemple réduit dans l'exemple ci-dessus)

Comment puis-je réaliser cela?

Actuellement, comme il n’existe aucune page avec ces noms, je reçois un 404 (index.php)

1
Ash

Je suppose que votre type de message personnalisé windows mapperait sur/windows/etc?

Vous pouvez personnaliser le modèle pour chaque type d'article personnalisé via single-posttype.php dans votre thème, par exemple. single-windows.php single-doors.php et single-garages.php Wordpress les prendra automatiquement

Vous pouvez également utiliser des modèles de page personnalisés, par exemple. page-windows.php ou des modèles personnalisés avec les bons noms de modèles.

Si les pages sont destinées à répertorier les types de publication, vous pouvez alors essayer de créer des modèles d'archive de publication, par exemple: http://mark.mcwilliams.me/2010/10/wordpress-3-1 -introduces-custom-post-type-archives/

Ou, vous pouvez créer une taxonomie pour chacun de ces noms et utiliser taxonomy-windows.php

En utilisant tout ce qui précède, on pourrait partager le code en utilisant quelque chose comme:

<?php
// example code, may need minor modifications
get_template_part('special',$post->post_type);

Vous permettant de partager le code de toutes les pages d'un fichier et de vous fournir un support de thème enfant et la possibilité de remplacer par des fichiers tels que special-windows.php

OU, si rien de ce qui précède ne vous convient, il existe une solution finale:

http://www.braindonor.net/coding-blog/custom-pages-with-wordpress-plugins/230/

Cela vous permettra de mettre une page avec ce que vous voulez, où vous voulez, sans avoir besoin de posts ou de pages d'aucune sorte, de manière indépendante du thème.

1
Tom J Nowell

déplacez tous vos scripts dans single.php vers le modèle anthor appelé say "narmol.php"

et dans le single.php, placez une condition comme

 if(post_type="windows" || "doors" || "garages") include "special.php";
 else include "normal.php";

le code ci-dessus est juste une idée (pseudocode). Je suppose que vous savez comment le mettre en œuvre. laissez-moi savoir si vous ne savez pas.

0
bingjie2680

Lorsque vous enregistrez un nouveau type de publication, un argument activant les archives de type de publication has_archive (vérifiez le Codex ). Lorsque vous activez post type archive, ces URL:

www.mysite.com/windows/
www.mysite.com/doors/
www.mysite.com/garages/

will utilise archive-$post_type.php en tant que fichier modèle. Et si le fichier archive-$post_type.php n'existe pas, il cherchera archive.php. (vérifiez le Codex )

Donc, je pense qu'une solution simple pour vous est de vérifier le $post_type dans le fichier archive.php et quand c'est l'un des windows, doors, garages, nous incluons special.php, comme ceci:

<?php
// archive.php
$post_type = get_query_var('post_type');
if (in_array($post_type, array('windows', 'doors', 'garages'))) {
    include 'special.php';
    exit;
}

// default content for other archive type
?>

Remarque: N'oubliez pas de définir has_archive sur true lorsque vous enregistrez le type de publication.

0
Anh Tran