it-swarm-eu.dev

Vlastní data typu příspěvku v widgetech postranního panelu?

(poznámka: tato otázka byla původně o vlastních polích, ale @MikeSchinkel měl lepší řešení zahrnující vlastní typy příspěvků)

Na mých stránkách mám několik stránek, na kterých chci zobrazit stejná data v postranním panelu. Například ve struktuře jako je tato:

-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

Chtěl bych, aby všechny stránky Volvo 850 zobrazovaly stejná data v bočním panelu, aby všechny stránky Porsche zobrazovaly jinou sadu dat (například Speed, Maker atd.).

Stránky Road by měly mít vlastní sadu dat pro každou silnici. Auta a silnice by také měly vlastní šablonu stránky, a způsob, jakým bych na to měl pravý postranní panel, je něco takového v rámci sidebar.php:

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

Zde je příklad stránky Volvo 850 Pictures. Stejný (levý) postranní panel by se měl objevit na ostatních stránkách Volvo 850, zatímco na pravé straně je jen obsah stránky.

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

V tomto příkladu by měly být dva widgety sidebar, Specs a Rating získávány z vlastního typu příspěvku. Existuje metoda, která by byla pro koncového uživatele snadná, což by znamenalo, že by tato uživatelská data musela zadat pouze jednou? Nemusí být nutné, aby každé z polí bylo oddělené (tj. Všechny Spec bylo možné zadat do pole Editoru a všechna hodnocení by mohla být vložena do pole Výpis .. Možná)

10
cannyboy

AKTUALIZACE:

Na základě aktualizace této otázky se domnívám, že musím výslovně uvést, že to, co se v této otázce požaduje, lze provést pomocí níže uvedené odpovědi, která používá pouze vlastní pole v poli „Car“vlastní typ příspěvku pro každou z položek chcete zobrazit na všech stránkách daného vozidla.

Chcete-li to udělat, stačí jednoduše naskenovat postranní panel do souboru šablony single-car.php I, který je uveden níže, a poté pomocí příkazu if určete, který obsah se bude zobrazovat pro různé adresy URL. Mohli byste jít do snahy widgetizovat svůj postranní panel a vytvořit si vlastní widget, kde by widget vytáhl informace pro aktuální ID příspěvku, ale proč, pokud toto nevytváříte jako téma pro ostatní lidi?

Tam jsou vlastně spoustu jemně různých způsobů, jak toho dosáhnout, ale ten, který navrhuji, by měl divit, nádherně pro vaše potřeby.


Ahoj @cannyboy:

Vlastně nevím, jaký je nejlepší způsob sdílení vlastních polí napříč příspěvky. Ale to může být jen červená vlajka, kterou potřebujete. Pokud se něco zdá být příliš těžké, možná ...

Alternativní přístup?

... mohl bys shonider architektonicky jinak? Myslím, že budete mnohem lépe vytvářet Vlastní příspěvek typu z "Auto"a pak můžete uložit vše pro každou "stránka"do jednoho typu poštovního bodu. Zde jsou několik ukázkových adres URL:

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

Informace o vlastních typech příspěvků

Další informace o vlastních typech příspěvků naleznete v odpovědích na tyto otázky:

Vlastní typ příspěvku a pravidlo přepsání

Chcete-li implementovat vlastní typy příspěvků a více stránek, použijte kód jako následující registruje vaše "Car"Vlastní typ příspěvku a pak nastaví pravidlo přepsání pro vaše stránky aut. tento kód v souboru functions.php vašeho motivu nebo v zásuvném modulu, podle toho, co dáváte přednost:

<?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
}

A Car- specifický soubor šablony motivu

Pak budete potřebujete Car- specifický soubor šablony ve vašem motivu výchozí název bude single-car.php. Kódoval jsem pro vás šablonu spouštěče, která vykresluje všechny tři adresy URL ( (přehled), 'tech-specs'a 'obrázky') v jedné šabloně pomocí parametru ifvýkaz pro určení obsahu, který má být vykreslen:

<?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(); ?>

Všimněte si výše uvedeného příkladu, že používám get_post_meta() velmi zjednodušující; skutečné místo by tam muselo být mnohem složitější.

Šablony Štítky a.k.a. Pomocné funkce

Samozřejmě jsem použil některé šablony tagů a.k.a. pomocné funkce pro minimalizaci složitosti v souboru šablony v podmínkách ifstatement. Zde jsou a můžete je také umístit do souboru functions.php vašeho tématu:

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);
}

Screenshoty vyplněné Custom Post Type Love

Jakmile budete mít tento kód na svém místě a přidáte znak Carpříspěvek jako Volvo 850, můžete jej použít jako následující screenshoty:

Přehled Strana

 http://example.com/cars/volvo850/ 
(zdroj: mikeschinkel.com )

Technická specifikace Strana

http://example.com/cars/volvo850/tech-specs/

Obrázky Stránka

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

14
MikeSchinkel

Myslím, že na tuto jinou otázku, kterou jste odeslali (o nadřazených stránkách/mezilehlých stránkách), by už někdo mohl odpovědět, ale myslím si, že nejlepší způsob, jak strukturovat data, je podle toho, co jste popsali:

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

Tímto způsobem musíte zadat meta pole pouze jednou - na nadřazené stránce - a na stránkách dětí můžete tato meta data vytáhnout z rodiče:

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

Samozřejmě, ještě lepší způsob, jak to zorganizovat, by bylo mít pro každý model automobilu jeden vlastní typ příspěvku, který by ukládal všechny informace o vozidle a zobrazoval by různé podstránky na základě požadavku GET, který je předán na stránku a používán ve službě šablonu stránky jako přepínač k určení, která šablona se má zobrazit. Tímto způsobem se můžete zcela vyhnout kopírování dat a usnadnit přidávání dalších informací do šablony později ...

Další podrobnosti ...

Udělal jsem to pár různými způsoby. V jednom místě, kde jsem měl agenty (firemní opakování) jako typ vlastního příspěvku, jsem použil jejich příspěvky k ukládání všech dat týkajících se této osoby, ale nikdy jsem tuto stránku skutečně nezobrazoval. Místo toho jsem měl stránku "Agent Listing", stránku "Agent Performance Record" a stránku "Contact This Agent", která byla vždy volána s proměnnou GET a zobrazenými informacemi z příslušného příspěvku. Permalink by tedy vypadal jako site.com/agent-listing/?agent=john-smith .

V jiné lokalitě jsem nastavil všechny informace na jedné stránce a vytvořil všechny tři pohledy na tuto stránku do šablony stránky. Ve vašem případě by to vypadalo něco jako site.com/cars/volvo-850/?pictures .

V šabloně stránky byste zahrnuli kontrolu této proměnné v horní části obsahu:

if ($_GET['pictures']) {

 // template for pictures page

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

 // template for tech specs page 

} else {

 // overview template

}
1
goldenapples

Pokud nechcete vytvářet vlastní typy příspěvků a chcete pro každou stránku nebo příspěvek jednoduše přidat vlastní postranní panel, můžete použít plugin Graceful Sidebar Plugin. To umožňuje vytvořit vlastní obsah postranního panelu přímo v rámci obrazovky pro úpravy příspěvků nebo stránek pomocí dalších polí nazývaných ladný název a elegantní obsah. Tyto jsou pak zobrazeny v oblasti postranního panelu jako widget, když je tento příspěvek nebo stránka zobrazena na vašem blogu. Další informace o tomto pluginu naleznete na adrese http://www.mlynn.org/graceful-sidebar-plugin

0
Michael Lynn