จะใส่รหัสของฉันได้ที่ไหน: plugin หรือ functions.php


86

มีรูปแบบที่เข้าใจง่ายหรือไม่ในการตัดสินใจว่าโค้ดประเภทใดเป็นของปลั๊กอินหรือธีมfunctions.phpหรือไม่

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

ควรอธิบายวิธีจัดการกับประเด็นเหล่านี้ (และอาจมากกว่า):

  • ประเภทโพสต์ที่กำหนดเองและ taxonomies
  • แบบฟอร์มการติดต่อ
  • ย่อ
  • วิดเจ็ตที่กำหนดเอง
  • add_theme_support( 'automatic-feed-links' );
  • ฟังก์ชั่น SEO เช่นmetaองค์ประกอบที่กำหนดเอง
  • สลับธีม

มักจะมีข้อดีข้อเสียสำหรับทั้งสองฝ่าย คำถามที่ได้รับความนิยมมากที่สุดของเราคอลเลกชันที่ดีที่สุดของรหัสสำหรับไฟล์ functions.php ของคุณได้รับข้อมูลโค้ดจำนวนมากเป็นคำตอบที่อย่างน้อยเป็นที่ถกเถียงกัน
เราต้องการเกณฑ์ที่ผู้เริ่มต้นสามารถเข้าใจได้อาจเป็นรายการตรวจสอบ - ด้วยเหตุผล

ดูคำถามที่เกี่ยวข้องโดย Chip Bennett ในเว็บไซต์ meta ของเรา: คำถามที่ถามวิธีการแก้ปัญหาโดยเฉพาะ "ไม่มีปลั๊กอิน"

ที่เกี่ยวข้อง: ฉันจะวางโค้ดขนาดเล็กที่ฉันพบที่นี่หรือที่อื่นบนเว็บได้ที่ไหน


ฉันสงสัยว่าอะไรจะเป็นข้อเท็จจริงสำหรับจุดประสงค์ของคำถามนี้ บุคคล A พูดว่า CPT เข้าไปในปลั๊กอิน, บุคคล B บอกว่า CPT ไปในธีม เราจะหาข้อเท็จจริงเพื่อตรวจสอบความคิดเห็นได้อย่างไร สิ่งนี้อาจใกล้เคียงกับ "ไม่สร้างสรรค์"
Rarst

คำตอบ:


72

ฉันจะเริ่มต้นด้วยคำถามนี้: ฟังก์ชั่นที่เกี่ยวข้องกับการนำเสนอเนื้อหาหรือการสร้าง / การจัดการเนื้อหาหรือของเว็บไซต์หรือของตัวตนของผู้ใช้หรือไม่?

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

  • การแก้ไขตัวกรอง WP หลัก ( wp_headเนื้อหาเช่นลิงก์แบบบัญญัติ, เครื่องกำเนิดและเมตา HTML อื่น ๆ เป็นต้น)
  • ไซต์ Favicon
  • รหัสย่อโพสต์เนื้อหา
  • โพสต์ลิงก์แชร์
  • สคริปต์ส่วนท้ายของ Google Analytics (และคล้ายกัน)
  • เครื่องมือ / การควบคุม SEO
  • เป็นต้น

หากฟังก์ชั่นที่เกี่ยวข้องกับการนำเสนอเนื้อหานั้นมันเป็นผู้สมัครสำหรับการรวมอยู่ในธีม ณ จุดนี้ฉันจะกลับไปเป็นเกณฑ์ของ Theme-switch ของ @ Raf912 : คุณจะพลาดฟังก์ชั่นเมื่อคุณเปลี่ยนธีมหรือไม่? หากคำตอบของคำถามนั้นคือไม่ใช่แสดงว่าการทำงานเป็นของธีม ตัวอย่างบางส่วน:

  • การลบ / ลบล้าง CSS core Gallery CSS
  • การกรองความยาวของข้อความที่ตัดตอนมาของข้อความ "อ่านเพิ่มเติม" ฯลฯ
  • สิ่งที่ดำเนินการผ่านadd_theme_support()(ฉันคิดว่าสิ่งนี้ควรชัดเจน)
  • CSS ที่กำหนดเอง

โดยปกติแล้วคำถามสองข้อนี้จะให้ความแตกต่างที่ชัดเจน อย่างไรก็ตามมีข้อยกเว้นอยู่

ประเภทโพสต์ที่กำหนดเอง

ที่กำหนดเองโพสต์ประเภทเช่นมีบิตของไฮบริดที่เป็นเอกลักษณ์ของการสร้างเนื้อหาและการนำเสนอให้ทางแม่แบบลำดับชั้นการทำงานสำหรับการโพสต์เดียวชนิดหน้าดัชนีเก็บและหน้าโพสต์เดียว ด้านการสร้างเนื้อหาของ CPT มักจะวางไว้ในอาณาเขตปลั๊กอินอย่างเต็มที่ อย่างไรก็ตามปลั๊กอินไม่สามารถกำหนดหน้าเทมเพลตที่เหมาะสมกับการออกแบบ / โครงร่าง / สไตล์สำหรับธีมที่กำหนดโดยเฉพาะ (โดยเฉพาะอย่างยิ่งถ้า CPT แสดงนอกเหนือจากชื่อ / เนื้อหา / Meta ปกติหรือมี taxonomies แบบกำหนดเองที่เกี่ยวข้อง)

ในระยะยาวการแก้ปัญหาความไม่เท่าเทียมนี้ IMHO จะต้องมีการประชุม / ฉันทามติมาตรฐานสำหรับคำจำกัดความของ CPT สำหรับเนื้อหาประเภทต่างๆ .) ด้วยวิธีนี้เนื้อหาที่ผู้ใช้สร้างขึ้นจะยังคงพกพาได้ระหว่างธีมที่ใช้ข้อกำหนดมาตรฐาน / การประชุมของ CPT ที่กำหนดในขณะที่นักพัฒนาธีมยังคงความยืดหยุ่นในการกำหนดการออกแบบ / เลย์เอาต์ / สไตล์ของ CPT นั้นในไฟล์เทมเพลตธีม

ลิงค์โซเชียลมีเดีย

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

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


add_theme_support( 'automatic-feed-links' );ไม่ใช่การนำเสนอ แต่มันถูกต้องตามแนวทางรูปแบบ ทำไมจึงเป็นความเสี่ยงที่จำเป็นที่จะสูญเสียฟังก์ชันการทำงานนี้หลังจากเปลี่ยนธีม
fuxia

1
สิ่งใดก็ตามที่นำไปใช้ผ่านadd_theme_support()สามารถนำไปใช้ได้ผ่านทางธีมเท่านั้น การใช้add_theme_support( 'automatic-feed-links' )ภายในธีมทำให้แน่ใจได้ถึงประสบการณ์ที่สอดคล้องกันจาก Theme เป็น Theme เนื่องจากลิงก์ฟีดที่สร้างขึ้นจะเหมือนกัน
Chip Bennett

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

1
คุณรู้: นั่นเป็นจุดที่ดี :)
Chip Bennett

50

การทดสอบง่ายๆที่วางโค้ดไว้ดีที่สุด:

  • เขียนรหัสลงใน functions.php
  • เปลี่ยนธีม
  • คุณพลาดฟังก์ชั่นนี้หรือไม่บล็อกไม่ทำงานหรือชิ้นส่วนของชุดรูปแบบเก่า (เช่นรหัสย่อ) ถูกทิ้งไว้?

    • ใช่: ใส่ลงในปลั๊กอิน

    • ไม่ใช่: ปล่อยไว้ใน function.php

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

เขียนฟังก์ชั่นเพื่อแสดงความคิดเห็นล่าสุด หลังจากเปลี่ยนธีมแล้วทุกอย่างก็โอเคเพราะธีมอื่นอาจมีฟังก์ชั่นที่เทียบเท่า

มันขึ้นอยู่กับรหัสและสิ่งที่จะทำ โค้ดบางอย่างมีอิทธิพลต่อการกำหนดสไตล์หรือเนื้อหาของธีมเท่านั้นบางโค้ดจะดัดแปลงโพสต์ของบล็อก


11
+1 functions.phpถ้ารหัสเป็นเฉพาะกับรูปแบบที่วางไว้คือ หากต้องการนำไปใช้กับธีมมากกว่าหนึ่งธีมให้วางไว้ในปลั๊กอิน
s_ha_dum

18

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

  • รหัสนี้จะใช้ในการติดตั้ง WordPress แบบไซต์เดียวหรือไม่
    • ใช่ - ชุดรูปแบบของไซต์เปลี่ยนไปด้วยการออกแบบและการเปลี่ยนแปลงที่สำคัญในการทำงานหรือไม่
      • ใช่ - รหัสในคำถามเฉพาะสำหรับการออกแบบปัจจุบันนี้หรือไม่?
        • ใช่: functions.php
        • ไม่: ปลั๊กอิน
      • ไม่ (มันเปลี่ยนแปลงบ่อยหรืออย่างรวดเร็ว) - ปลั๊กอิน
    • ไม่ (Multsisite) - คุณโฮสต์การติดตั้งหลายไซต์หรือเป็นโซลูชันมัลติไซต์โฮสต์ที่อนุญาตให้ใช้ปลั๊กอินหรือไม่
      • ใช่: ฟังก์ชันการทำงานที่เป็นปัญหาเฉพาะกับไซต์นี้หรือสามารถ / ควรใช้กับเว็บไซต์อื่นในเครือข่ายหรือไม่
        • เฉพาะเว็บไซต์นี้: functions.php
        • แชร์ในหลาย ๆ ไซต์ - คุณต้องการบังคับให้ทุกเว็บไซต์หรือไม่
          • ใช่: ปลั๊กอินเก็บไว้ในไดเรกทอรี mu-plugins หรือเปิดใช้งานเครือข่าย
          • ไม่: นี่เป็นเครือข่ายของไซต์ที่ไม่เกี่ยวข้องหรือไม่ (เช่นลูกค้าที่แตกต่างกัน)
            • ใช่: มันจะไม่ดีหรือไม่เป็นมืออาชีพถ้าลูกค้า A เห็นหรือเปิดใช้งานปลั๊กอินที่คุณเขียนสำหรับลูกค้า B, C และ D? (เช่นอาจทำให้ไซต์เสียหายหรือทำให้เกิดการทำงานที่ไม่พึงประสงค์)
              • ใช่: functions.php
              • ไม่: ปลั๊กอิน
            • ไม่: อาจเป็นปลั๊กอิน
      • ไม่ (โฮสต์โดยบริการเช่นวีไอพีที่ไม่อนุญาตให้ใช้ปลั๊กอิน): use Functions.php
ความคิดอื่น ๆ ที่ฉันไม่รู้ว่าจะเข้าที่นี่ได้อย่างไร:

  • ธีมผู้ปกครอง - บางครั้งด้วยการใช้งานร่วมกันมันจะดีกว่าที่จะสร้างธีมผู้ปกครองและวางการทำงานในไฟล์ฟังก์ชั่นของธีมหลัก
  • ไดเรกทอรีปลั๊กอินของการติดตั้งหลายไซต์ขนาดใหญ่อาจกลายเป็นเรื่องไม่เรียบร้อยอย่างรวดเร็วดังนั้นบางครั้งฟังก์ชันการทำงานที่ใช้ร่วมกันที่ใช้โดยไซต์ที่มีเปอร์เซ็นต์ต่ำ (เช่น <1%) จะเป็นการดีที่สุดในการทำซ้ำในไฟล์

6

จากที่นี่Themes VS Plugins

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

คุณยังสามารถสร้างปลั๊กอินเฉพาะไซต์ซึ่งมีโค้ดที่กำหนดเองทั้งหมดของคุณได้เช่นกัน

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

 function modify_contact_methods($profile_fields) {

// Add new fields
$profile_fields['twitter'] = 'Twitter Username';
$profile_fields['facebook'] = 'Facebook URL';
$profile_fields['gplus'] = 'Google+ URL';

return $profile_fields;
}
add_filter('user_contactmethods', 'modify_contact_methods');

http://codex.wordpress.org/Plugin_API/Filter_Reference/user_contactmethods

  1. เพิ่มประเภทโพสต์ที่กำหนดเองใหม่ - รหัส
  2. เพิ่มเขตข้อมูลใหม่ให้กับผู้ใช้ - รหัสข้างต้น
  3. เพิ่มวิดเจ็ตใหม่ - รหัส
  4. เพิ่มลิงก์ถาวรที่กำหนดเอง - การตั้งค่าลิงก์ถาวร WordPress

5

ฉันรู้ว่านี่เป็นม้าที่ตายแล้วและ Chip นั้นได้ปิดบังไว้ค่อนข้างมาก แต่ต้องการเพิ่มความคิดเล็กน้อย

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

บ่อยกว่าโดยเฉพาะอย่างยิ่งสำหรับผู้ที่เพิ่งเริ่มต้นมันเร็วและง่ายกว่ามากที่จะเพิ่มสิ่งที่คุณต้องการลงในธีมและเรียกมันว่าเสร็จสิ้น

ที่ถูกกล่าวว่าถ้าคุณทำงานกับ wordpress เป็นประจำกึ่งคุณควรพิจารณาอย่างจริงจังทำต่อไปนี้ :


  1. สร้างโครงกระดูกปลั๊กอิน

สิ่งนี้ควรจัดการทุกสิ่งที่คุณจำเป็นต้องทำกับปลั๊กอินซึ่งรวมถึงการเปิดใช้งานการปิดใช้งานการอัปเดตเวอร์ชันการสร้างแผงการดูแลระบบและการถอนการติดตั้ง

หากคุณให้เวลาในการทำเช่นนี้คุณจะพบกับ:

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

ตอนนี้คุณสามารถสร้างสิ่งต่าง ๆ ออกมาได้อย่างเหมาะสมและทำให้โครงการในอนาคตเสร็จเร็วขึ้น


  1. สร้างโครงกระดูกของชุดรูปแบบ

สิ่งนี้ควรจัดการทุกสิ่งที่จำเป็นโดยทั่วไปในชุดรูปแบบ:

  • สไตล์ชีตหลักที่มีสไตล์ที่คุณใช้ทั่วไป (รีเซ็ต ฯลฯ )
  • ไฟล์ index.php ที่เหมาะสมจัดการทุกสิ่งที่คุณต้องการสำหรับเทมเพลตใด ๆ
  • ไฟล์ฟังก์ชั่น. php - คุณจะไม่ใช้มันเกือบเท่าไหร่ แต่มันก็ยังมีประโยชน์

เมื่อคุณทำเสร็จแล้วให้สร้างโครงกระดูกของธีมลูกที่ใช้ธีมหลักของคุณ

  • เพิ่มสไตล์ชีทอ้างอิงธีมหลักของคุณ
  • เพิ่มไฟล์ functions.php

เมื่อคุณทำสองสิ่งนี้เสร็จแล้วการสร้างไซต์ใหม่สำหรับผู้คนจะเร็วขึ้นมาก


หากคุณทำตามข้างต้นคุณสามารถทำงานต่อไปนี้ได้:

  • ใช้เวลาว่างของคุณในการทำความคุ้นเคยกับ PHP, WordPress, JavaScript, CSS และ / หรือ mySQL ... ยิ่งคุณเรียนรู้สิ่งเหล่านี้มากเท่าไหร่คุณก็ยิ่งทำสิ่งต่าง ๆ ได้เร็วขึ้นเท่านั้น
  • อัปเดตโครงกระดูกของชุดรูปแบบและธีมของเด็กเมื่อคุณพบสิ่งที่คุณควรปรับปรุง ไม่ว่าคุณจะดีแค่ไหนหากคุณเรียนรู้อย่างต่อเนื่องคุณจะพบกับการปรับปรุงที่จะทำ

และถ้าคุณทำตามข้างต้นทั้งหมดคุณจะพบว่าคำตอบของ Chip นั้นไม่เพียง แต่จะเหมาะสมที่สุดเท่านั้น


3

คำตอบง่ายๆคือนี่ ..

รหัสขึ้นอยู่กับฟังก์ชั่นใด ๆ ที่สร้างขึ้นในธีมเฉพาะหรือไม่? ถ้าใช่ให้ใส่ธีม

คุณต้องการให้รหัสนี้สามารถถ่ายโอนระหว่างไซต์และระหว่างชุดรูปแบบได้หรือไม่ ถ้าใช่ให้ใส่ปลั๊กอิน

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

นอกจากนี้หากคุณไม่ได้ใช้ธีมลูกและคุณวางแผนที่จะอัพเดตธีมฉันจะแนะนำให้คุณใช้ปลั๊กอิน

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