Question

(note: cette question était à l'origine sur les champs personnalisés, mais @MikeSchinkel avait une meilleure solution impliquant les types personnalisés Post)

Sur mon site j'ai plusieurs pages que je veux montrer les mêmes données dans la barre latérale. Par exemple, dans une structure comme ceci:

-Home
-Cars 
 -Volvo 850 overview 
 -Volvo 850 tech spec 
 -Volvo 850 pictures
 -Porsche 911 overview
 -Porsche 911 tech spec
 -Porsche 911 pictures
-Roads 
 -Route 66 overview 
 -Route 66 history 
 -Route 66 pictures
 -Pan-American Highway overview
 -Pan-American Highway history
 -Pan-American Highway pictures

Je voudrais que tous les Volvo 850 pages pour afficher les mêmes données dans la barre latérale, toutes les pages Porsche montrer un autre ensemble de données (par exemple la vitesse, Maker, etc.).

Les pages Route auraient leur propre ensemble de données pour chaque route. Les voitures et les routes devraient également leur propre modèle de page, et la façon dont je le figure obtiendrait la barre latérale droite est quelque chose comme cela dans sidebar.php:

if ( is_page_template('car-profile-template.php') ) :
// show car widgets

Voici une page d'exemple, la Volvo 850 Page photos. Le même (à gauche) la barre latérale devrait apparaître sur les autres Volvo 850 pages, alors que les choses à droite est seulement le contenu de la page.

|  Home   •Cars   Roads                                |
--------------------------------------------------------
|   Overview     |     Volvo 840 Pictures              |
|   Tech Spec    |    (some pics)                      |
|  •Pictures     |                                     |
------------------                                     |
| -Specs-        |                                     |
| Volvo 850      |                                     |
| Speed:150mph   |                                     |
| Maker:Volvo    |                                     |  
| Download PDF   |                                     |
------------------                                     |
| -Rating-       |                                     |
| Style:3        |                                     |
| Safety:5       |                                     |
| Reliablity:4   |                                     |
------------------                                     |

Dans cet exemple, les deux widgets de la barre latérale, Spécifications et notes devraient obtenir leurs informations d'un type post personnalisé. Y at-il une méthode, ce qui serait facile pour l'utilisateur final à modifier, ce qui signifie qu'ils devraient entrer ces données personnalisées qu'une seule fois? Il peut ne pas être nécessaire pour chacun des champs à être séparés (c.-à-tous Spec pourrait être entré dans un champ éditeur, et tous risque pourrait être mis dans le champ Extrait .. peut-être)

Était-ce utile?

La solution

Mise à jour:

Sur la base de la mise à jour de la question que je pense que je dois indiquer explicitement que ce qui est demandé dans la question peut être fait avec la réponse ci-dessous, utilisez seulement des champs personnalisés dans « Car » après personnalisé de type pour chacun des éléments que vous souhaitez afficher sur toutes les pages pour une voiture donnée.

Si vous voulez le faire tout simplement dans la barre latérale coder en dur le fichier modèle de single-car.php I inclus ci-dessous puis utilisez votre déclaration de if pour déterminer quel contenu à afficher pour les différentes URL. Vous pouvez aller à l'effort de widgetiser votre barre latérale et de développer un widget personnalisé où le widget retirerait les informations pour l'ID de poste actuel, mais pourquoi les deux à moins que vous construisez cela comme un thème pour d'autres personnes à utiliser?

Il y a en fait un tas de façons légèrement différentes pour y parvenir, mais celui que je veux dire, ce devrait demander à merveille à vos besoins.


Salut @cannyboy:

Je ne sais pas ce que fait la meilleure façon serait de partager des champs personnalisés à travers les messages. Mais cela pourrait être juste le drapeau rouge dont vous avez besoin. Si quelque chose semble trop dur peut-être ...

Une autre approche?

... vous pourriez shonsider architecturer différemment ? Je pense que vous serez beaucoup mieux de créer un Personnalisé message "Car" et vous pouvez stocker tout pour chaque "page" dans le poste d'un type de voiture. Voici quelques exemples d'URL:

http://example.com/cars/volvo850/  <-- overview
http://example.com/cars/volvo850/tech-specs/
http://example.com/cars/volvo850/pictures/

L'apprentissage de types personnalisés Publier

Vous pouvez en savoir plus sur les types personnalisés post les réponses à ces questions:

Un type post personnalisé et une règle de réécriture

Pour mettre en œuvre les types personnalisés Post et le plusieurs pages que vous devriez utiliser le code comme le suivant qui enregistre votre "Car" Personnalisé message et définit une règle de réécriture pour vos pages voiture . Mettez ce code dans votre fichier functions.php de thème ou dans un plug-in, selon ce que vous préférez:

<?php
add_action('init','car_init');
function car_init() {
  register_post_type('car',
    array(
      'label'           => 'Cars',
      'public'          => true,
      'show_ui'         => true,
      'query_var'       => 'car',
      'rewrite'         => array('slug' => 'cars'),
      'hierarchical'    => true,
      //'supports'        => array('title','editor','custom-fields'),
    )
  );
  global $wp,$wp_rewrite;
  $wp->add_query_var('car-page');
  $wp_rewrite->add_rule('cars/([^/]+)/(tech-specs|pictures)','index.php?car=$matches[1]&car-page=$matches[2]', 'top');
  $wp_rewrite->flush_rules(false);  // This should really be done in a plugin activation
}

Car Modèle Thème Fichier spécifique de

Ensuite, vous besoin Car fichier modèle dans votre thème spécifique de ; le nom par défaut pour ce serait single-car.php. J'ai codé un modèle de départ pour vous qui rend tous les trois des URL ( (aperçu) , 'tech-specs' et 'images' ) dans un modèle en utilisant un si déclaration pour déterminer le contenu à rendre:

<?php get_header(); ?>
<div id="container">
  <div id="content">
  <?php if ( have_posts() ): the_post(); ?>
    <div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
    <h1 class="entry-title"><?php the_title(); ?></h1>
    <div class="entry-content">
<?php if(is_car_techspecs()): ?>
  <a href="..">Back</a>
  <h1>Tech Specs</h1>
  The tech specs go here!
  <?php get_post_meta($post->ID,'_car_tech_specs'); ?>
<?php elseif (is_car_pictures()): ?>
  <a href="..">Back</a>
  <h1>Pictures</h1>
  Car Pictures go here!
  <?php get_post_meta($post->ID,'_car_pictures'); ?>
<?php else: ?>
  <ul>
    <h1>Overview</h1>
    <li><a href="tech-specs/">Tech Specs</a></li>
    <li><a href="pictures/">Pictures</a></li>
  </ul>
  <?php the_content(); ?>
<?php endif; ?>
      <?php the_content(); ?>
    </div>
  <?php endif; ?>
  </div>
</div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>

Note dans l'exemple ci-dessus, je suis d'être très simpliste avec l'utilisation de get_post_meta(); vrai site aurait besoin d'avoir beaucoup plus de complexité là.

Modèle tags Fonctions Helper alias

Bien sûr, j'utilisé des balises de modèle fonctions d'aide pour minimiser la complexité appelés également dans le fichier de modèle dans les si conditions de déclaration. Ici, ils sont et vous pouvez les mettre dans le fichier functions.php de votre thème aussi:

function is_car_techspecs() {
  global $wp_query;
  return is_car_page('tech-specs');
}
function is_car_pictures() {
  global $wp_query;
  return is_car_page('pictures');
}

function is_car_page($page) {
  global $wp_query;
  return (isset($wp_query->query['car-page']) && $wp_query->query['car-page']==$page);
}

Captures d'écran rempli de type post personnalisé Love

Une fois que vous avez tout ce que le code en place et que vous avez ajouté une Car poste comme Volvo 850 vous pouvez l'obtenir au travail comme les captures d'écran suivantes:

Présentation


(source: mikeschinkel.com )

Caractéristiques techniques page

Photos page

http://example.com/cars/volvo850/pictures/

Autres conseils

Je pense que quelqu'un pourrait avoir déjà une sorte de répondu à cette autre question que vous avez affichée (sur les pages parent / pages intermédiaires), mais voici ce que je pense que la meilleure façon de structurer vos données est, en fonction de ce que vous avez décrit:

 - Home
 - Volvo 850 (overview)
   - Volvo 850 tech spec
   - Volvo 850 pictures
 - Porsche 911 (overview)
   - Porsche 911 tech spec
   - Porsche 911 pictures

De cette façon, il suffit d'entrer dans les champs de méta fois - sur la page parent - et sur les enfants pages que vous pouvez tirer que les méta-données du parent:

<?php echo 'Top speed: '.get_post_meta($post->post_parent,'Top Speed',true); ?>

Bien sûr, une meilleure façon d'organiser ce serait d'avoir un type de poste personnalisé unique pour chaque modèle de voiture qui stocke toutes les informations de la voiture, et afficher les différents sous-pages basé sur une requête GET qui est transmis à la page et utilisée dans le modèle de page en tant que commutateur pour déterminer quel modèle pour l'affichage. De cette façon, vous pouvez complètement éviter la duplication des données, et le rendre plus facile d'ajouter plus d'informations à modèle plus tard ...

Plus de détails ...

Je l'ai fait deux manières différentes. Dans un site où j'avais des agents (des représentants de la société) comme un type de poste personnalisé, je leur poste pour stocker toutes les données relatives à cette personne, mais jamais réellement affichée cette page. Au lieu de cela, j'avais une page « Liste Agent », une page « Performance Agent Record » et un « Contact Cet agent », qui ont été toujours appelé à une variable GET et les informations affichées sur le poste approprié. Donc, ce permalien ressemblerait à quelque chose comme site.com/agent-listing/?agent=john-smith .

Dans un autre site, je mis en place toutes les informations sur une page et les trois vues construit pour cette page dans le modèle de page. Dans votre cas, cela ressemblerait à quelque chose comme site.com/cars/volvo-850/?pictures .

Et dans le modèle de page comprendrait un chèque de cette variable dans la partie supérieure du contenu:

if ($_GET['pictures']) {

 // template for pictures page

} else if ($_GET['tech-spec']) {

 // template for tech specs page 

} else {

 // overview template

}

Si vous ne voulez pas créer des types personnalisés poste, et vous voulez simplement d'inclure une barre latérale personnalisée pour chaque page ou par la poste, vous pouvez utiliser la barre latérale Graceful Plugin. Cela permet de créer de droit sidebar personnalisé à partir de l'écran de poste ou modifier la page en utilisant des champs supplémentaires appelés titre gracieux et le contenu gracieux. Ceux-ci sont alors affichés dans la zone de la barre latérale comme un widget lorsque ce poste ou la page est affiché sur votre blog. Plus d'informations sur ce plugin est disponible à http://www.mlynn.org/graceful-sidebar-plugin

Licencié sous: CC-BY-SA avec attribution
Non affilié à wordpress.stackexchange
scroll top