วิธีการรวมข้อมูลปลั๊กอินกับธีม


17

ฉันต้องการรับความคิดเห็นเกี่ยวกับแนวทางปฏิบัติที่ดีที่สุดสำหรับการพัฒนาปลั๊กอิน WordPress ที่ให้การรวมธีม

เพื่อให้สมเหตุสมผลเมื่อฉันถามคำถามนี้ขอให้ฉันเริ่มด้วยตัวอย่างสมมุติของสถานการณ์ที่ฉันอยากรู้ ลองนึกภาพว่าฉันสร้างปลั๊กอินชื่อ "Discography" รายชื่อจานเสียงบันทึกประเภทโพสต์ที่กำหนดเองสามประเภท: "แบนด์", "อัลบัม" และ "แทร็ก" ปลั๊กอินยังมีกล่องเมตาที่ให้รายละเอียดสำหรับโพสต์แต่ละประเภทรวมถึง taxonomies ที่กำหนดเองเพื่อจัดระเบียบโพสต์แต่ละประเภท โพสต์ประเภทเหล่านี้เชื่อมโยงกับปลั๊กอินโพสต์ 2 โพสต์ ภายในผู้ดูแลระบบผู้ใช้สามารถเพิ่มแบนด์ใหม่ซึ่งสามารถเชื่อมโยงกับอัลบั้มซึ่งในทางกลับกันจะเชื่อมโยงกับแทร็กทั้งหมดซึ่งจะมีข้อมูลอื่น ๆ เพิ่มเข้ามาผ่านทางเมตาบ็อกซ์และ taxonomies

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

  • วงดนตรี (single-prefix-band.php, single.php, index.php, shortcode)
  • อัลบั้ม (single-prefix-album.php, single.php, index.php, shortcode)
  • แทร็ก (single-prefix-track.php, single.php, index.php, shortcode)
  • รายชื่อวงดนตรี (template-band-list.php, page-band-listing.php, page- {id} .php, page.php, index.php, รหัสย่อ)
  • รายชื่ออัลบั้ม (template-album-list.php, page-album-listing.php, page- {id} .php, page.php, index.php, shortcode)
  • เส้นเวลาของอัลบั้ม (เทมเพลตอัลบั้ม -timeline.php, page-album-timeline.php, หน้า - {id} .php, page.php, index.php, shortcode)

สิ่งสำคัญคือต้องมีการนำเสนอเริ่มต้นสำหรับประเภทโพสต์เหล่านี้เนื่องจากไฟล์เทมเพลตเริ่มต้นจะไม่แสดงข้อมูลทั้งหมดที่จำเป็นสำหรับโพสต์แต่ละประเภท ตัวอย่างเช่นธีม Twenty Eleven จะแสดงชื่อหมวดหมู่คำอธิบายและวันที่โพสต์สำหรับอัลบั้ม ไม่มีประโยชน์อย่างยิ่งสำหรับอัลบั้ม ฉันต้องการให้เทมเพลตโพสต์เดียวที่ดึงลงมาในแถบวันที่เผยแพร่ฉลากเพลงเวอร์ชั่นอัลบั้มแทร็ก ฯลฯ ในฐานะนักพัฒนาปลั๊กอินฉันรู้สึกว่ามันจะเป็นสิ่งสำคัญ ฉันรู้ว่าเทมเพลตจะไม่สามารถใช้งานได้กับทุกธีม แต่ควรมีค่าเริ่มต้นที่สามารถรวมเข้ากับธีมของผู้ใช้ได้

อีกครั้งฉันอยากรู้ว่าวิธีที่ดีที่สุดในการจัดการสถานการณ์นี้คืออะไร? ฉันคิดว่าคุณสามารถทำสิ่งใดสิ่งหนึ่งต่อไปนี้

ย่อ

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

ไฟล์เทมเพลต

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

คุณยังสามารถใช้ตัวกรองเพื่อใช้ไฟล์เหล่านี้โดยไม่ต้องย้ายออกจากโฟลเดอร์ปลั๊กอินทำให้ทุกอย่างอยู่ในตัวเอง ฉันเห็นตัวกรอง "template_include" และตัวกรอง "{$ type} _template" ที่ใช้เพื่อจุดประสงค์นี้ ในความเป็นจริงคุณสามารถใช้แม่แบบจากโฟลเดอร์ชุดรูปแบบและหากไม่มีอยู่คุณสามารถย้อนกลับไปที่ตัวกรองเหล่านี้เพื่อให้มุมมองเริ่มต้น

คำถาม

ฉันชอบที่จะรู้ว่าสิ่งที่คนอื่นคิดว่าเป็นแนวทางปฏิบัติที่ดีที่สุดสำหรับสถานการณ์เหล่านี้หากความคิดที่นำเสนอเป็นปัญหาในทางใดทางหนึ่งและทางเลือกอื่น ๆ ที่ฉันไม่ได้รวมไว้

ขอขอบคุณ!


3
ถ้าเพียง แต่คำถามทั้งหมดใน WPSE จะคิดให้ดีออก ... :)
scribu

@ Subsu ... คุณแค่บอกว่าเพราะฉันรวมลิงค์ไปยังปลั๊กอินของคุณ;) อย่างจริงจังว่าขอบคุณสำหรับคำชม ฉันกังวลว่านี่จะเป็นคำถามที่โง่ แต่ก็เป็นปัญหาที่ทำให้ฉันอึดอัดอยู่พักหนึ่ง
tollmanz

+1 อีกจากฉัน สำหรับ "ทำไม" อ่านความคิดเห็น @scribu
ไกเซอร์

@kaiser & scribu ... ฉันหวังว่าคุณทั้งคู่จะให้ความคิดของคุณในหัวข้อนี้ ฉันชอบที่จะได้ยินสิ่งที่คุณพูด
tollmanz

@tollmanz เสร็จเรียบร้อยแล้ว แต่คำถามที่รุนแรงเช่นนี้ต้องการความคิดและเวลาเล็กน้อย
ไกเซอร์

คำตอบ:


4

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

1.อย่าทำมากเกินไป คุณสมบัติคือความตายของปลั๊กอินทุกตัว สร้างเวอร์ชันพื้นฐานก่อนและทดสอบปฏิกิริยาของผู้ใช้ของคุณ หากปลั๊กอินของคุณได้รับความสนใจเป็นอย่างมากคุณสามารถรวมคุณสมบัติที่ได้รับการร้องขอเป็นส่วนใหญ่

2.หลีกเลี่ยงการเติมทุกกรณีการใช้งาน คุณต้องบำรุงรักษาปลั๊กอินของคุณ WP เสนอรุ่นใหม่ทุกสามเดือน และบางครั้งก็ยากที่จะติดตามปลั๊กอินของคุณทั้งหมด ในการสร้างตัวอย่าง: API การตั้งค่าเวอร์ชันใหม่จะถูกกล่าวถึงใน Trac. เมื่อสิ่งนี้จะเสร็จสิ้นแล้วมีโอกาสที่นักพัฒนาปลั๊กอินหรือชุดรูปแบบจำนวนมากจำเป็นต้องเปลี่ยนรหัสส่วนใหญ่และบางคนเช่นฉันได้เขียนเลเยอร์สิ่งที่เป็นนามธรรมเหนือ API ดังนั้นคุณต้องย้อนกลับไปเขียนฐาน / abstraction layer ใหม่แล้วทำใหม่ทุกอย่างที่เรียกบางส่วนของมัน ฉันสัญญาว่านี่เป็นงานจำนวนมาก และยิ่งกว่านั้นถ้ามันผูกแน่นกับรหัสของคุณ เมื่อคุณเริ่มเติมกรณีการใช้งานจำนวนมากคุณก็จะได้รับวิวัฒนาการของรหัส Core WP จำนวนมากที่คุณต้องตรวจสอบรวมถึงคุณมีงานมากมายที่ทำให้รหัสของคุณทันสมัยอยู่เสมอ

3.อย่าพยายามรวมตัวอย่างโค้ด (หรือเทมเพลต) จำนวนมากเข้าในปลั๊กอินหรือธีมของคุณ หากคุณต้องการกำหนดเป้าหมายผู้พัฒนาและผู้ใช้: ใช้บล็อกของคุณสำหรับเอกสาร นักพัฒนาเกลียดสิ่งที่ต้องการและผู้ใช้ปลายทางไม่เคยพอใจ (ดู: เติมทุกกรณีการใช้งาน)

4.แบ่งรหัสของคุณอย่างชาญฉลาดเป็นไฟล์เดียว Rule of thumb: หนึ่งไฟล์ต่อส่วนหนึ่ง ตัวอย่าง: styles.php, scripts.php, taxonomies.php, cpts.php เป็นต้นโหลดทุกอย่างจากคลาส "แม่" (โรงงาน) และเก็บข้อมูลของคุณ "เสียบ" ได้ หากคุณต้องการเขียนเนื้อหาใหม่คุณจะพบได้ง่าย หากผู้พัฒนากำลังค้นหาบางสิ่ง: พวกเขาจะค้นหาได้ง่าย ไฟล์ที่มีชื่อดีมากมายไม่เป็นอันตรายต่อคุณ

5.ถ้าคุณมีรายชื่อของรูปแบบพื้นฐาน (เรียน) ที่ปล่อยให้มันขึ้นให้กับผู้ใช้ โอกาสสูงเกินไปสไตล์จากชุดรูปแบบหรือปลั๊กอินอื่น ๆ จะขัดขวางคำจำกัดความของคุณ (ไม่ว่าคุณจะใส่ความจำเพาะเจาะจงมากแค่ไหน) เพียงแค่พยายามอธิบายที่ใดที่หนึ่งโดยใช้ข้อความให้น้อยที่สุด

6.รักปลั๊กอินของคุณ แต่ปล่อยไปถ้าคุณเบื่อ :)


ตอนนี้ - กล่าวโดยย่อ - บางอย่างเกี่ยวกับแนวคิดปลั๊กอินของคุณในรายละเอียด:

A.ไฟล์เทมเพลตไม่ดี ดังที่ฉันได้กล่าวไว้: บันทึกไว้ในบล็อกของคุณนำเสนอตัวอย่างการทำเครื่องหมายและสไตล์ที่นั่น บล็อกของคุณจะได้รับกำไร (และคุณเช่นกันหากคุณมีโฆษณา)

B.รหัสย่อคือคูล พวกเขาจะไม่ทำอันตรายใคร ๆ ถ้าปลั๊กอินหายไป (ในกรณีส่วนใหญ่) และสามารถขยาย / พัฒนาในภายหลังได้ที่ปุ่ม TinyMCE (ซึ่งผู้คนชื่นชอบ)

C.ทำให้ชัดเจนว่าปลั๊กอินของคุณต้องการปลั๊กอินอื่น ตั้งคำถามนี้และเพิ่มบันทึกย่อไปยัง admin_notices (ผ่าน register_activation_hook) หากปลั๊กอินอื่นไม่ออก (เชื่อมโยงในกรณีนี้) หรือไม่เปิดใช้งาน (คุณสามารถทำสิ่งนี้กับผู้ใช้เมื่อเปิดใช้งาน) นอกจากนี้โปรดทราบว่าปลั๊กอินนี้มาจากแหล่งที่เชื่อถือได้และจะได้รับการปรับปรุงในปีถัดไป

หมายเหตุ: ไม่มีอะไรที่ฉันเขียนมีอะไรมากกว่าความคิดเห็นส่วนตัวของฉันซึ่งสะท้อนถึงประสบการณ์ของฉัน


1
+1 สำหรับปุ่มย่อขนาดเล็กของ TinyMCE (หรืออื่น ๆ ) เทคนิคนี้มีประโยชน์มากสำหรับผู้ใช้ที่ไม่มีความรู้ทางด้านเทคนิคและช่วยในเรื่องการรวมธีมทั้งหมด
Wyck

1
ขอบคุณสำหรับความคิดของคุณ มีภูมิปัญญาปลั๊กอินทั่วไปมากมายที่นี่ สำหรับคำถามของฉันดูเหมือนว่าวิธีการของคุณคือให้การรวมธีมน้อยมาก ค่อนข้างคุณต้องการให้ผู้ใช้ขบผ่านเอกสาร ฉันเห็นได้ว่าทำไมนี่เป็นวิธีการที่สมเหตุสมผล แต่ในเวลาเดียวกันฉันไฟล์แบบนี้จะทำให้ผู้ใช้จำนวนมากรู้สึกว่ามีบางอย่างขาดหายไปในปลั๊กอิน ด้วยตัวอย่างของฉันฉันคิดว่าผู้ใช้จะรู้สึกว่ามีบางอย่างพังทลายถ้าไม่มีการสนับสนุนในการแสดงวง / อัลบั้ม / แทร็ก
tollmanz

หากคุณต้องการที่จะติดกับฉันขอแนะนำให้คุณใช้รหัสสั้น ๆ เพื่อเพิ่มมาร์กอัปเป็น cpt (หรือภายในที่อื่น) เกี่ยวกับสไตล์: ฉันแค่ตรวจสอบว่าสไตล์ชีทที่เฉพาะเจาะจงปรากฏอยู่ในโฟลเดอร์ธีมลูก> หลัก ถ้าใช่: มันจะแทนที่ทับกฎสไตล์ชีตหลัก ด้วยวิธีนี้คุณสามารถตอบสนองนักพัฒนาทั้งสองในฐานะผู้ใช้ปลายทางได้
ไกเซอร์

@kaiser ... ทั้งสองจุดแข็งอยู่ตรงนั้น
tollmanz

2

ในบางกรณีคุณต้องชั่งน้ำหนักความสมดุลระหว่างการสร้างปลั๊กอินหรือธีมหากสถานการณ์ของคุณต้องการการปรับแต่ง / คุณสมบัติมากมายมักจะดีกว่าการสร้างธีมแทน วิธีนี้ทำให้ผู้ใช้สามารถปรับแต่งในแง่ของรูปลักษณ์ซึ่งจะทำให้ผู้ใช้ปรับแต่งการทำงานได้ง่ายขึ้น (โดยการติดรหัสย่อไม่ว่าจะอยู่ที่ใด) คุณมีการควบคุมคุณสมบัติที่ดีกว่าทำงานกับปลั๊กอินอื่น ๆ เป็นต้น

ปลั๊กอินที่พยายามรวมเข้ากับชุดรูปแบบที่หลากหลายในตลาดอย่างหนักนั้นถูกผูกไว้เพื่อก่อให้เกิดปัญหามากมายและทำงานให้คุณอย่างสุจริตใจ

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

นอกจากนี้ยังเป็นไปได้ว่าจากมุมมองด้านการตลาดชุดรูปแบบเฉพาะจะทำได้ดีกว่าปลั๊กอินเมื่อปรับสมดุลคุณสมบัติของส่วนหน้า


จุดที่ดีเกี่ยวกับแนวคิดนี้เป็นปลั๊กอิน (โดยเฉพาะอย่างยิ่งเพื่อประโยชน์ทางการตลาด) ปัญหาที่ใหญ่ที่สุดคือนี่ไม่ใช่กรณีที่ปลั๊กอินและข้อมูลจำเป็นต้องนำไปสู่ธีมทั้งหมด มันอาจเป็นเพียงส่วนประกอบเล็ก ๆ ของเว็บไซต์ซึ่งน่าเสียดายที่มันต้องการมัน แม้ว่าฉันจะได้คะแนนที่กว้างกว่า แต่ก็เป็นไปไม่ได้ที่จะตอบสนองผู้ใช้ทุกกลุ่มและมันก็ดีกว่าที่จะตั้งเป้าหมายสำหรับกลุ่มเดียว
tollmanz

2

หน้าเสมือน

เทคนิคที่สามที่ฉันเห็นคือการกำหนดหน้าพิเศษเป็นตัวยึดสำหรับปลั๊กอินของคุณและใช้ตัวกรอง 'the_content' เพื่อแสดงผลทุกสิ่งที่คุณต้องการส่งออก

ด้วยวิธีนี้คุณสามารถสร้างเทมเพลตที่กลมกลืนกับโครงสร้างธีมเนื่องจากคุณไม่ต้องจัดการกับส่วนหัว, ไซด์บาร์, ท้ายกระดาษและ div

ตัวอย่างที่ดีของสิ่งนี้สามารถพบได้ในปลั๊กอิน bbPress:

http://bbpress.trac.wordpress.org/browser/branches/plugin/bbp-includes/bbp-core-compatibility.php?rev=3434#L931


คุณจะเสนอตัวอย่างรหัสหรือไม่ ฉันเดาว่านี่เป็นสิ่งที่ปลั๊กอิน dev.s มากชอบที่จะเห็น (+1)
ไกเซอร์

คุณสามารถดูตัวอย่างของ bbPress plugin
scribu

มันน่าสนใจมาก ฉันจะต้องดูรหัสก่อนที่จะผ่านการตัดสิน
tollmanz

@ Subsu: ฉันค้นหาเพื่อเพิ่มลิงค์ แต่หาไม่เจอผ่าน plugins.svn คุณช่วยกรุณาโพสต์ลิงค์สำหรับผู้อ่านในภายหลังได้ไหม? ขอบคุณ
ไกเซอร์

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