การเพิ่มที่เก็บถาวรของโพสต์ลงในเมนูนำทางใน WordPress 3.0


10

Hay ทั้งหมดผมเล่นรอบกับ WordPress 3.0 และสอง (2) ของคุณสมบัติใหม่, ประเภทที่กำหนดเองโพสต์และเมนูแก้ไข

ฉันได้เริ่มต้นด้วยการสร้างประเภทโพสต์ใหม่ที่เรียกว่า " products" ตามที่คุณคาดเดาผลิตภัณฑ์รายการนี้

ฉันใช้เทมเพลตมาตรฐานบึงและฉันกำลังสร้างเมนูใหม่เพื่อแทนที่การนำทางด้านบน เท่าที่ผมสามารถมองเห็นฉันเท่านั้นที่สามารถเพิ่มบางอย่าง"ผลิตภัณฑ์"มันฉันไม่สามารถเพิ่ม"เก็บ"ของผลิตภัณฑ์ สิ่งที่ฉันพยายามจะทำคือเพิ่มลิงค์ไปยังเมนูเพื่อไปที่หน้าที่แสดงรายการผลิตภัณฑ์ทั้งหมด

ความคิดใด ๆ วิธีการทำเช่นนี้?

คำตอบ:


12

@dottyตามที่คุณเห็นด้วยตั๋ว trac นี้: ควรมีหน้าดัชนีสำหรับประเภทโพสต์ที่กำหนดเองดังนั้นเห็นได้ชัดว่าความต้องการยังไม่ได้รับการแก้ไขในแกน WordPress

ทั้ง @John P Bloch และ @Chris_O ให้ทางเลือกที่ดีแก่คุณ ฉันจะให้อันดับ 3

"ผลิตภัณฑ์"หน้า

แรกสร้างหน้าสำหรับการกำหนดเองของคุณประเภทโพสต์และเรียกว่า"ผลิตภัณฑ์" ที่จะให้มัน URL ต่อไปนี้:

http: //example.php/products/

"ผลิตภัณฑ์รายการ"ย่อ

ถัดไปสร้างรหัสย่อที่คุณสามารถฝังลงในหน้า"ผลิตภัณฑ์" ของคุณ [product-list]ในตัวอย่างของฉันฉันเรียกมันว่า นี่คือภาพหน้าจอของสิ่งที่ใช้จะมีลักษณะ:

หน้าของผลิตภัณฑ์ที่ใช้รหัสย่อเพื่อแสดงรายการผลิตภัณฑ์ใน WordPress
(ที่มา: mikeschinkel.com )

โปรดทราบว่ารหัสย่อดังกล่าวจะเป็นตัวเลือกที่ยอดเยี่ยมสำหรับการเพิ่มฟังก์ชั่นเสริมจำนวนมากและทำให้มันสามารถทำงานกับโพสต์ประเภทต่าง ๆ ได้มากมาย แต่เพื่อความชัดเจนฉันค่อนข้างฮาร์ดโค้ดทุกอย่าง แน่นอนคุณสามารถใช้เป็นจุดเริ่มต้นสำหรับรหัสย่อของคุณเอง:

<?php
add_shortcode('product-list', 'my_product_list');
function my_product_list($args) {
  $save_post = $GLOBALS['post'];  // Save state so you can restore later
  $post_type = 'product';
  $template_file = get_stylesheet_directory() . "/post-{$post_type}.php";
  if (!file_exists($template_file)) {
    return "<p>Missing template [$template_file].</p>";
  } else {
    global $post;
    $q = new WP_Query("showposts=10&post_type={$post_type}&orderby=title&order=ASC");
    $rows = array();
    $rows[] = '<div class="post-list ' . $post_type . '-post-list">';
    global $post_list_data;
    $post_list_data = array();
    $post_list_data['post_count'] = $post_count = count($q->posts);
    foreach ($q->posts as $post) {
      $q->the_post();
      ob_start();
      include($template_file);
      $rows[] = ob_get_clean();
    }
    $rows[] = '</div>';
    $GLOBALS['post'] = $save_post;
    return implode("\n",$rows);
  }
}

post-product.phpธีมแม่แบบไฟล์

ถัดไปคุณจะต้องสร้างไฟล์เทมเพลตธีมที่แสดงผลิตภัณฑ์เดียวเท่านั้น ฟังก์ชั่นที่ใช้รหัสย่อตั้งชื่อไฟล์เทมเพลตpost-product.phpและนี่คือจุดเริ่มต้นที่ดี:

<?php
/**
 * post-product.php - File to display only one product within a list of products.
 */
?>
<div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
  <h2 class="entry-title"><?php the_title(); ?></h2>
  <div class="entry-content">
    <?php the_content(); ?>
  </div>
</div>

เพิ่มตัวเลือกเมนู

สุดท้ายคุณจะต้องเพิ่มตัวเลือกเมนู ตรงไปตรงมาอย่างที่คุณเห็นจากภาพหน้าจอนี้ (ต่อไปนี้จะถือว่าคุณไม่ได้ทำอะไรกับเมนู WordPress 3.0 มาก่อนและคุณใช้ธีมที่รองรับเมนู WordPress 3.0 เช่น Twenty Ten):

  1. เลือกตัวเลือกเมนูในเมนูผู้ดูแลระบบ
  2. คลิกที่" + "เพื่อเพิ่มเมนูใหม่
  3. พิมพ์ชื่อเมนูของคุณตามใจชอบ
  4. คลิกปุ่ม"สร้างเมนู" (ภาพหน้าจอแสดง"บันทึกเมนู"แต่จะเป็น"สร้างเมนู"เมื่อทำการเพิ่ม)
  5. เลือกเมนูใหม่ของคุณเป็นของคุณ"การนำทางหลัก"
  6. เลือกหน้า " ผลิตภัณฑ์ " ของคุณ
  7. คลิก"เพิ่มไปที่เมนู"
  8. คลิก"บันทึกเมนู"

การเพิ่มตัวเลือกเมนูหน้าผลิตภัณฑ์ไปยังไซต์ WordPress
(ที่มา: mikeschinkel.com )

ในที่สุดการส่งออก

และนี่คือรายชื่อผลิตภัณฑ์พื้นฐานที่อาจมีลักษณะดังนี้:

รายการผลิตภัณฑ์ที่ใช้ประเภทโพสต์ที่กำหนดเองใน WordPress
(ที่มา: mikeschinkel.com )


คำถามที่เหลือคือวิธีการแก้ไขรายการเมนูผลิตภัณฑ์เพื่อให้เมนูย่อยของผลิตภัณฑ์ทั้งหมด
hakre

@harkeอัปเดตแล้ว
MikeSchinkel

ดีที่ไม่ได้ขอ :) ฉันเพิ่งสงสัยว่าการสร้างรายการแบบหล่นลงจะเกิดขึ้นโดยอัตโนมัติอย่างไรและฉันคิดว่านั่นยังไม่เป็นประโยชน์ แต่ตามที่เขียนไว้นั่นไม่ใช่คำขอ
hakre

สวัสดีฉันมีปัญหากับสิ่งนี้และหวังว่าคุณจะช่วยได้ ปัญหาคือcurrent-menu-itemคลาสไม่ได้ใช้กับผลิตภัณฑ์ 'li
Reigel

ภาพหายไป : /
fuxia

4

WordPress นี้ไม่ได้รับการสนับสนุน อย่างไรก็ตามคุณสามารถเพิ่มไฟล์นี้ลงในไฟล์ functions.php ของคุณและมันจะทำงาน:

function give_me_a_list_of_products(){
  add_rewrite_rule( 'products/?$', 'index.php?post_type=products', 'top' );
}

add_action( 'init', 'give_me_a_list_of_products' );

สิ่งนั้นจะให้ example.com/products/ เป็นรายการผลิตภัณฑ์ จากตรงนั้นคุณเพียงแค่เพิ่มลิงค์ที่กำหนดเองในเมนูของคุณ

อย่างไรก็ตามหากคุณต้องการเก็บถาวรอย่างแท้จริง (ตามเดือนปี ฯลฯ ) ด้วยฟีดคุณต้องใช้รหัสที่ละเอียดมากขึ้น หาก 'ผลิตภัณฑ์' ของคุณเป็นประเภทโพสต์ที่ไม่ใช่แบบลำดับชั้น (ดูเหมือนว่าควรเป็น) คุณสามารถใช้ปลั๊กอินของฉัน:

http://www.wordpress.org/extend/plugins/custom-post-permalinks/

ที่ให้ฟิลด์เพิ่มเติมแก่คุณในการปรับแต่งลิงก์ถาวรของคุณ (เช่นเดียวกับการโพสต์บล็อก) และจะให้ความสามารถในการปรับแต่งลิงก์ถาวรตามหมวดหมู่ผู้แต่งเดือนปีปีประเภทโพสต์ ฯลฯ


ขอบคุณสำหรับข้อมูลที่ดีที่นี่ ฉันกำลังมองหาสิ่งเดียวกัน แต่แม้ว่าทุกอย่างจะทำงานได้ดีกับการเขียนฉันติดอยู่เพราะเมื่อฉันเพิ่มลิงค์ที่กำหนดเองไปที่เมนูเว็บไซต์สาธารณะดูเหมือนจะไม่เปลี่ยน css ที่ระบุว่าผู้เข้าชมอยู่ในหน้านั้น คุณช่วยบอกฉันทีว่าทำเสร็จได้อย่างไรเพื่อให้ฉันสามารถแสดงรายการเมนูในสถานะ "เปิด" หากคุณอยู่ในที่เก็บถาวร "ผลิตภัณฑ์"
NetConstructor.com

0
เท่าที่ฉันเห็นฉันสามารถเพิ่ม "ผลิตภัณฑ์" บางอย่างเท่านั้นฉันไม่สามารถเพิ่ม "เก็บถาวร" ของผลิตภัณฑ์ สิ่งที่ฉันพยายามจะทำคือเพิ่มลิงค์ไปยังเมนูเพื่อไปที่หน้าที่แสดงรายการผลิตภัณฑ์ทั้งหมด ความคิดใด ๆ วิธีการทำเช่นนี้?

คุณจะต้องกำหนด taxonomy ให้กับประเภทโพสต์ "ผลิตภัณฑ์" จากนั้นเพิ่มคำ taxonomy ให้กับหนึ่งในเมนูที่คุณกำหนดเองซึ่งจะนำผู้ใช้ไปยังหน้าเก็บถาวรของผลิตภัณฑ์ทั้งหมดภายใต้ taxonomy ที่ใช้

ตัวอย่าง ฉันมีประเภทโพสต์ที่กำหนดเองที่เรียกว่า "งาน" ด้วยอนุกรมวิธานที่มีป้ายกำกับ "ตำแหน่ง" ข้อความแสดงแทน

ถ้าฉันต้องการงานทั้งหมดที่มีคำว่า taxonomy ปัจจุบัน "open open" ฉันจะเลือกมันและเพิ่มลงในเมนู ข้อความแสดงแทน

หากคุณต้องการประเภทโพสต์ "ผลิตภัณฑ์" ทั้งหมดของคุณในหน้าเก็บถาวรคุณสามารถกำหนด taxonomy พาเรนต์ให้กับทั้งหมดเพื่อให้สามารถแสดงรายการทั้งหมดในหน้าเก็บถาวร


@Chris_O : นี่เป็นวิธีหนึ่ง แต่ไม่ใช่วิธีเดียวและยังต้องใช้ความพยายามในการรักษาหมวดหมู่โดยผู้ใช้ อย่างไรก็ตาม JMTCW
MikeSchinkel

มีเหตุผล. หวังว่าหน้าดัชนีประเภทโพสต์ที่กำหนดเองจะได้รับการแก้ไขเป็นหลัก
Chris_O

0

ฉันคิดว่ามันเป็นทางออกที่ดีกว่าในการสร้างประเภทโพสต์ที่กำหนดเองประเภทโพสต์เก็บถาวรและย้ายโพสต์ที่เก็บถาวรในการเก็บถาวรนี้ เพิ่ม post_type ปัจจุบันลงใน postmeta ของ post_type ใหม่นี้เพื่อเลิกทำ ฉันมีเขียนปลั๊กอินนี้และปัจจุบันคุณสามารถดูนี้โดยไม่ต้อง stylesheets ภาพและไฟล์ภาษาในgist.github / 978,690

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.