it-swarm-ko.tech

사이드 바 위젯의 맞춤 게시 유형 데이터?

(참고 :이 질문은 원래 사용자 정의 필드에 관한 것이었지만 @MikeSchinkel에는 사용자 정의 게시 유형과 관련된 더 나은 솔루션이있었습니다)

내 사이트에는 사이드 바에 동일한 데이터를 표시하려는 여러 페이지가 있습니다. 예를 들어, 다음과 같은 구조에서 :

-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

모든 Volvo 850 페이지에서 사이드 바에 동일한 데이터를 표시하고 모든 포르쉐 페이지에서 다른 데이터 세트 (예 : 속도, 제조사 등)를 표시하고 싶습니다.

도로 페이지에는 각 도로마다 고유 한 데이터 세트가 있습니다. Cars and Roads에는 페이지 템플릿이 있으며 사이드 바를 얻는 방법은 sidebar.php 내에서 이와 비슷합니다.

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

다음은 Volvo 850 Pictures 페이지의 예제 페이지입니다. 오른쪽의 내용은 단지 페이지 내용 인 반면 동일한 (왼쪽) 사이드 바가 다른 Volvo 850 페이지에 나타납니다.

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

이 예에서 두 가지 사이드 바 위젯 인 Specs 및 Rating은 사용자 정의 Post Type에서 정보를 가져와야합니다. 최종 사용자가 쉽게 편집 할 수있는 방법이 있습니까? 즉,이 사용자 지정 데이터를 한 번만 입력해야한다는 것입니다. 각각의 필드가 분리되어있을 필요는 없습니다 (즉, Spec은 모두 Editor 필드에 입력 할 수 있고, 모든 등급은 Excerpt 필드에 넣을 수 있습니다)

10
cannyboy

최신 정보:

질문의 업데이트를 기반으로 질문에 대한 질문을 아래 답변으로 수행 할 수 있다고 명시 적으로 언급해야한다고 생각합니다. 각각에 대한 "Car"사용자 정의 게시물 유형의 사용자 정의 필드를 사용했습니다. 특정 차량의 모든 페이지에 표시하려는 항목.

사이드 바를 아래에 포함 된 single-car.php 템플릿 파일에 하드 코딩 한 다음 if 문을 사용하여 다른 URL에 표시 할 컨텐츠를 결정하십시오. 사이드 바를 위젯 화하고 위젯이 현재 게시물 ID에 대한 정보를 가져 오는 사용자 정의 위젯을 개발하려는 노력을 기울일 수 있지만 다른 사람들이 사용할 수 있도록 테마로 작성하지 않는 한 왜 둘 다?

실제로이 작업을 수행하는 미묘하게 다른 여러 가지 방법이 있지만 제안하는 방법은 귀하의 요구에 훌륭하게 궁금합니다.


안녕 @ cannyboy :

실제로 게시물에서 사용자 정의 필드를 공유하는 가장 좋은 방법은 무엇인지 모르겠습니다. 그러나 그것은 단지 당신이 필요로하는 적기 일 수 있습니다. 뭔가 어려워 보인다면 ...

다른 접근법?

... 당신은 다르게 다르게 설계 ? 나는 당신이 Custom Post Type of "Car"를 만드는 것이 훨씬 나을 것이라고 생각합니다. 그리고 각 "page"에 대한 모든 것을 저장할 수 있습니다 하나의 자동차 게시물 유형으로. 샘플 URL은 다음과 같습니다.

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

맞춤 게시물 유형에 대해 알아보기

다음 질문에 대한 답변에서 맞춤 게시물 유형에 대해 자세히 알아볼 수 있습니다.

맞춤 게시물 유형 및 다시 쓰기 규칙

사용자 정의 게시물 유형과 여러 페이지를 구현하려면 다음과 같은 코드를 사용해야합니다. "자동차"를 등록합니다사용자 정의 게시물 유형 그리고 자동차 페이지에 대한 다시 쓰기 규칙을 설정합니다 . 이 코드를 테마의 functions.php 파일 또는 플러그인 중 원하는쪽에 넣으십시오.

<?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특정 템플릿 파일이 필요합니다 ; 기본 이름은 single-car.php입니다. 세 URL을 모두 렌더링하는 시작 템플릿을 코딩했습니다 ((개요), 'tech-specs'and 'pictures') 렌더링 할 컨텐츠를 결정하기 위해if문을 사용하여 하나의 템플리트에서

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

위의 예에서 저는 get_post_meta(); 실제 사이트에는 훨씬 더 복잡해야합니다.

템플릿 태그 ak.a. 도우미 기능

물론if문 조건에서 템플릿 파일의 복잡성을 최소화하기 위해 일부 템플릿 태그 일명 도우미 기능을 사용했습니다. 여기에 이들이 있으며 테마의 functions.php 파일에도 해당 파일을 넣을 수 있습니다.

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

맞춤 게시물 유형 사랑으로 가득 찬 스크린 샷

모든 코드가 준비되고자동차게시물과 같은Volvo 850을 추가하면 다음 스크린 샷과 같이 작동하도록 할 수 있습니다.

개요 페이지

http://example.com/cars/volvo850/
(출처 : mikeschinkel.com )

기술 사양 페이지

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

사진 페이지

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

14
MikeSchinkel

누군가가 게시 한 다른 질문 (부모 페이지/중간 페이지)에 대해 이미 답변 한 사람이 있을지 모르지만, 여기에 설명 된 내용을 기반으로 데이터를 구성하는 가장 좋은 방법은 무엇이라고 생각하십니까?

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

이렇게하면 부모 페이지에 한 번만 메타 필드를 입력하면되고 하위 페이지에서는 부모로부터 메타 데이터를 가져올 수 있습니다.

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

물론 이것을 구성하는 더 좋은 방법은 자동차의 모든 정보를 저장하는 자동차의 각 모델에 대해 하나의 맞춤형 게시물 유형을 사용하고 페이지에 전달되어 GET 요청을 기반으로 다양한 서브 페이지를 표시하는 것입니다. 표시 할 템플리트를 판별하기위한 스위치로서 페이지 템플리트. 그렇게하면 데이터 복제를 완전히 피할 수 있고 나중에 템플릿에 정보를 더 쉽게 추가 할 수 있습니다.

세부 정보 ...

나는 그것을 여러 가지 방법으로 해왔다. 사용자 지정 게시 유형으로 상담원 (회사 담당자)이있는 한 사이트에서 해당 사용자와 관련된 모든 데이터를 저장하기 위해 게시물을 사용했지만 그 페이지를 실제로 표시하지 않았습니다. 대신 "GET 변수로 항상 호출되고 해당 게시물에서 정보를 표시 한"에이전트 목록 "페이지,"에이전트 성능 레코드 "페이지 및"이 에이전트에 문의 "페이지가있었습니다. 그래서 permalink는 site.com/agent-listing/?agent=john-smith 와 같은 형태로 보일 것입니다.

다른 사이트에서는 한 페이지에 모든 정보를 설정하고 해당 페이지의 세 가지보기를 페이지 템플리트에 작성했습니다. 귀하의 경우, 그것은 site.com/cars/volvo-850/?pictures 와 유사합니다.

그리고 페이지 템플릿에서 컨텐트의 상단 근처에 해당 변수에 대한 검사를 포함시킵니다.

if ($_GET['pictures']) {

 // template for pictures page

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

 // template for tech specs page 

} else {

 // overview template

}
1
goldenapples

맞춤 게시 유형을 만들고 싶지 않고 각 페이지 또는 게시물에 맞춤 사이드 바를 포함하려는 경우 Graceful Sidebar Plugin을 사용할 수 있습니다. 이를 통해 graceful title 및 graceful content라는 추가 필드를 사용하여 게시물 또는 페이지 편집 화면에서 바로 사용자 정의 사이드 바 컨텐츠를 만들 수 있습니다. 이러한 게시물이나 페이지가 블로그에 표시 될 때 사이드 바 영역에 위젯으로 표시됩니다. 이 플러그인에 대한 자세한 내용은 http://www.mlynn.org/graceful-sidebar-plugin

0
Michael Lynn