Thêm nội dung để lưu trữ và phân loại trang trên các loại bài tùy chỉnh?


8

Tôi có một loại bài đăng tùy chỉnh có tên "Sản phẩm" và phân loại được gọi là "Cách sử dụng". Trên trang đích "Sản phẩm" của tôi, tôi muốn có nội dung tùy chỉnh có thể được chỉnh sửa qua WYSIWYG bởi khách hàng. Tương tự với trang đích phân loại. Suy nghĩ của tôi là tạo các trang giả mạo và chỉ cần kéo nội dung qua ID vào các mẫu archive-products.php và taxonomy-used.php của tôi nhưng tôi tò mò liệu có cách nào tốt hơn để xử lý nó không.

Câu trả lời:


12

Giải pháp đầu tiên có thể là sử dụng API Cài đặt và tạo 2 trường "Mô tả sản phẩm""Mô tả sử dụng" , sau đó hiển thị trong mẫu của bạn các trường đó dễ dàng như sau:

$options = get_option('my_theme_options');
echo $options['prod_description'];
// echo $options['usage_description'];

Tuy nhiên, API cài đặt không phải là phần tốt nhất của lõi WP và có thể tạo một trang cài đặt chỉ cho các trường không có giá trị.

Một cách tiếp cận khác là sử dụng trang (với một mẫu trang tùy chỉnh ) làm kho lưu trữ.

Tạo một trang và gọi nó là "Lưu trữ sản phẩm"

Trong đó đặt một cái gì đó như thế:

<?php
/*
Template Name: Products Archive
*/

 get_header();

 if ( have_posts() ) the post();

 the_content(); // this will output the page content     

 $p_query = new WP_Query('post_type=products');
 if ( $p_query->have_posts() ) { while( $p_query->have_posts() ) {
   $p_query->the_post();
   // this will require a 'entry-product.php' where you can put all your product markup
   get_template_part('entry', 'product');
 } }
 wp_reset_postdata();

 get_footer();

Sau đó, trong phần phụ trợ của bạn, tạo một trang và gán nó cho mẫu vừa tạo. Viết bất cứ điều gì bạn muốn trong nội dung trang và khi bạn sẽ mở trang, bạn sẽ thấy nội dung trang và các sản phẩm.

Điều tương tự có thể được thực hiện cho trang phân loại. Chỉ cần thay đổi mẫu trang và truy vấn trong đó.

Nếu vì bất kỳ lý do gì, bạn cần sử dụng archive-products.phplàm kho lưu trữ sản phẩm, một giải pháp thay thế là tạo một mẫu tùy chỉnh, nhưng chỉ sử dụng nó để lấy nội dung trang.

Tạo một tệp php trong chủ đề của bạn và đặt tên là 'page-prod-description.php' . Trong tập tin này chỉ đặt:

<?php
/*
Template Name: Products Description
*/
wp_safe_redirect( home_url() );
exit();

Tập tin này làm gì, đang tạo một mẫu trang tùy chỉnh. Mẫu đó có thể được đính kèm vào các trang, nhưng những trang đó không thể được gọi trực tiếp , bởi vì nếu bạn thử nó, bạn sẽ được chuyển hướng đến trang chủ.

Bây giờ hãy đăng nhập vào phần phụ trợ của bạn và tạo một trang, đặt tên là "Mô tả sản phẩm" và gán mẫu trang vừa tạo. Nếu bạn cố gắng truy cập trang, http://example.com/product-descriptionbạn sẽ được chuyển hướng đến trang chủ.

Trong mẫu lưu trữ sản phẩm của bạn archive-products.php, bạn có thể sử dụng nội dung được chèn trong trang đó như sau:

$desc = get_pages('meta_key=_wp_page_template&meta_value=page-prod-description.php');
if ( ! empty($desc) ) {
   $page = array_shift($desc);
   echo apply_filters('the_content', $page->post_content );
}

Bây giờ khách hàng của bạn có thể đăng nhập vào phụ trợ và chỉnh sửa trang "Mô tả sản phẩm" và mọi thứ được ghi trong nội dung trang sẽ được hiển thị trong trang lưu trữ.

Tương tự, tất nhiên, có thể được thực hiện để lưu trữ phân loại.


Nhưng làm điều này sẽ ảnh hưởng đến main_queryđối tượng $wp_queryvà khiến nó không xuất ra quyền post_typecho truy vấn xảy ra trên các trang lưu trữ. Điều này sẽ làm cho các cuộc gọi của bạn đến các bộ lọc như pre_get_postsđối với một trang lưu trữ không có giá trị. Đây là vấn đề chính. Wordpress cũng cần cung cấp một phương tiện để QUẢN LÝ Lưu trữ loại bài đăng và Nội dung lưu trữ phân loại.
Solomon Closson

Cả hai phương pháp bạn cung cấp là một Sloppycách xử lý này. Nhưng thật không may, không có cách làm sạch này. Wordpress cần cung cấp một cách rõ ràng ở đây, IMO!
Solomon Closson

0

Bạn có thể tạo các trang bình thường, sau đó áp dụng các mẫu tùy chỉnh có chứa vòng lặp tùy chỉnh phù hợp để xuất CPT. Hoặc bạn có thể tạo một trang tùy chọn (hoặc thêm tùy chọn vào Trình tùy chỉnh chủ đề), nơi khách hàng có thể thêm nội dung qua WYSIWYG, sau đó xuất nội dung này trong mẫu lưu trữ thích hợp.


Bất kỳ ví dụ về mã cơ bản bạn sẽ sử dụng để làm điều đó?
Brad Dalton
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.