it-swarm-vi.tech

Dữ liệu loại bài đăng tùy chỉnh trong các tiện ích Sidebar?

(lưu ý: câu hỏi này ban đầu là về Trường tùy chỉnh, nhưng @MikeSchinkel có giải pháp tốt hơn liên quan đến Loại bài đăng tùy chỉnh)

Trên trang web của tôi, tôi có một vài trang mà tôi muốn hiển thị cùng một dữ liệu trong thanh bên. Chẳng hạn, trong một cấu trúc như thế này:

-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

Tôi muốn tất cả các trang Volvo 850 hiển thị cùng một dữ liệu trong thanh bên, tất cả các trang của Porsche để hiển thị một bộ dữ liệu khác (ví dụ: Tốc độ, Trình tạo, v.v.).

Các trang Đường sẽ có bộ dữ liệu riêng cho từng đường. Ô tô và Đường cũng sẽ có mẫu trang riêng và cách tôi hình dung nó sẽ có thanh bên phải là một cái gì đó giống như trong sidebar.php:

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

Đây là một trang ví dụ, trang Volvo 850 Pictures. Thanh bên tương tự (bên trái) sẽ xuất hiện trên các trang Volvo 850 khác, trong khi nội dung bên phải chỉ là nội dung trang.

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

Trong ví dụ này, hai tiện ích thanh bên, Thông số kỹ thuật và Xếp hạng sẽ nhận được thông tin của họ từ Loại bài đăng tùy chỉnh. Có một phương pháp, người dùng cuối có thể dễ dàng chỉnh sửa, điều đó có nghĩa là họ sẽ chỉ phải nhập dữ liệu tùy chỉnh này một lần? Có thể không cần thiết cho mỗi trường riêng biệt (nghĩa là tất cả các Spec có thể được nhập trong trường Trình chỉnh sửa và tất cả Xếp hạng có thể được đặt trong trường Trích dẫn .. có thể)

10
cannyboy

CẬP NHẬT:

Dựa trên bản cập nhật của câu hỏi, tôi nghĩ rằng tôi cần nói rõ rằng những gì được hỏi trong câu hỏi có thể được thực hiện với câu trả lời bên dưới, chỉ sử dụng các trường tùy chỉnh trong "Xe hơi" loại bài đăng tùy chỉnh cho mỗi các mục bạn muốn hiển thị trên tất cả các trang cho một chiếc xe nhất định.

Nếu bạn muốn làm điều đó chỉ đơn giản là mã hóa thanh bên vào tệp mẫu single-car.php tôi đưa vào bên dưới và sau đó sử dụng câu lệnh if của bạn để xác định nội dung nào sẽ hiển thị cho các URL khác nhau. Bạn có thể nỗ lực để tiện ích hóa thanh bên của mình và phát triển một tiện ích tùy chỉnh trong đó tiện ích sẽ lấy thông tin cho ID bài đăng hiện tại, nhưng tại sao cả hai trừ khi bạn xây dựng đây làm chủ đề cho người khác sử dụng?

Thực tế có một loạt các cách khác nhau tinh tế để thực hiện điều này nhưng cách tôi đang đề xuất nên tuyệt vời cho nhu cầu của bạn.


Xin chào @cannyboy:

Tôi thực sự không biết cách tốt nhất để chia sẻ các trường tùy chỉnh trên các bài đăng. Nhưng đó có thể chỉ là lá cờ đỏ bạn cần. Nếu có gì đó quá khó có lẽ ...

Một cách tiếp cận thay thế?

... bạn có thể shonsider architecting nó khác? Tôi nghĩ bạn sẽ tốt hơn nhiều khi tạo Loại bài tùy chỉnh của "Xe hơi" và sau đó bạn có thể lưu trữ mọi thứ cho mỗi "trang" vào một bài đăng trên Xe hơi kiểu. Dưới đây là một số URL mẫu:

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

Tìm hiểu về các loại bài tùy chỉnh

Bạn có thể tìm hiểu thêm về Loại bài đăng tùy chỉnh tại các câu trả lời cho những câu hỏi sau:

Loại bài đăng tùy chỉnh và Quy tắc viết lại

Để triển khai Loại bài đăng tùy chỉnh và nhiều trang bạn sử dụng mã như sau đăng ký "Xe hơi" Loại bài đăng tùy chỉnh và sau đó đặt quy tắc viết lại cho các trang xe của bạn . Đặt mã này vào tệp functions.php của chủ đề của bạn hoặc trong một plugin, tùy theo bạn thích:

<?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 Xe hơi- Tệp mẫu chủ đề cụ thể

Sau đó, bạn sẽ cần một tệp mẫu cụ thể Xe hơi- trong chủ đề của bạn; tên mặc định cho cái này sẽ là single-car.php. Tôi đã mã hóa một mẫu khởi động cho bạn để hiển thị cả ba URL ((tổng quan), 'thông số kỹ thuật''hình ảnh') trong một mẫu bằng cách sử dụng câu lệnh if để xác định nội dung nào sẽ hiển thị:

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

Lưu ý trong ví dụ trên tôi rất đơn giản với việc sử dụng get_post_meta(); trang web thực sự sẽ cần phải có nhiều phức tạp hơn ở đó.

Thẻ mẫu a.k.a. Hàm trợ giúp

Tất nhiên tôi đã sử dụng một số thẻ mẫu a.k.a. các hàm trợ giúp để giảm thiểu độ phức tạp trong tệp mẫu trong các điều kiện câu lệnh if. Chúng ở đây và bạn cũng có thể đặt chúng trong tệp functions.php của chủ đề:

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

Ảnh chụp màn hình với Loại bài tùy chỉnh Tình yêu

Khi bạn đã có tất cả mã đó và bạn đã thêm Xe hơi bài đăng như Volvo 850 bạn có thể làm cho nó hoạt động như các ảnh chụp màn hình sau:

Trang tổng quan

 http://example.com/cars/volvo850/ 
(nguồn: mikechinkel.com )

Trang thông số kỹ thuật

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

Trang hình ảnh

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

14
MikeSchinkel

Tôi nghĩ ai đó có thể đã trả lời câu hỏi này cho câu hỏi khác mà bạn đã đăng (về trang mẹ/trang trung gian), nhưng đây là cách tôi nghĩ cách tốt nhất để cấu trúc dữ liệu của bạn, dựa trên những gì bạn đã mô tả:

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

Bằng cách đó, bạn chỉ phải nhập các trường meta một lần - trên trang mẹ - và trên các trang con bạn có thể lấy dữ liệu meta đó từ cha mẹ:

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

Tất nhiên, một cách thậm chí tốt hơn để tổ chức việc này là có một loại bài đăng tùy chỉnh duy nhất cho mỗi kiểu xe lưu trữ tất cả thông tin của xe và hiển thị các trang con khác nhau dựa trên yêu cầu GET được chuyển đến trang và được sử dụng trong mẫu trang như một công tắc để xác định mẫu nào sẽ hiển thị. Bằng cách đó, bạn hoàn toàn có thể tránh trùng lặp dữ liệu và giúp dễ dàng thêm thông tin vào mẫu sau này ...

Thêm chi tiết ...

Tôi đã thực hiện nó một vài cách khác nhau. Trong một trang web nơi tôi có đại lý (đại diện công ty) làm loại bài đăng tùy chỉnh, tôi đã sử dụng bài đăng của họ để lưu trữ tất cả dữ liệu liên quan đến người đó, nhưng thực sự chưa bao giờ hiển thị trang đó. Thay vào đó, tôi đã có một trang "Danh sách đại lý", trang "Bản ghi hiệu suất đại lý" và trang "Liên hệ với đại lý này", luôn được gọi với biến GET và hiển thị thông tin từ bài đăng thích hợp. Vì vậy, permalink sẽ trông giống như site.com/agent-listing/?agent=john-smith .

Trong một trang web khác, tôi thiết lập tất cả thông tin trên một trang và xây dựng cả ba chế độ xem cho trang đó vào mẫu trang. Trong trường hợp của bạn, nó sẽ trông giống như site.com/cars/volvo-850/?pictures .

Và trong mẫu trang, bạn sẽ bao gồm một kiểm tra cho biến đó ở gần đầu nội dung:

if ($_GET['pictures']) {

 // template for pictures page

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

 // template for tech specs page 

} else {

 // overview template

}
1
goldenapples

Nếu bạn không muốn tạo các loại bài đăng tùy chỉnh và bạn chỉ muốn bao gồm một thanh bên tùy chỉnh cho mỗi trang hoặc bài đăng, bạn có thể sử dụng Trình cắm thanh bên duyên dáng. Điều này cho phép tạo nội dung thanh bên tùy chỉnh ngay trong màn hình chỉnh sửa bài hoặc trang bằng cách sử dụng các trường bổ sung được gọi là tiêu đề duyên dáng và nội dung duyên dáng. Chúng sau đó được hiển thị trong khu vực thanh bên dưới dạng tiện ích khi bài đăng hoặc trang này đang được hiển thị trên blog của bạn. Thông tin thêm về plugin này có sẵn tại http://www.mlynn.org/graceful-sidebar-plugin

0
Michael Lynn