SlideShare ist ein Scribd-Unternehmen logo
1 von 25
Downloaden Sie, um offline zu lesen
คูมือการพัฒนาธีมของ WordPress เบื้องตน
สารบัญ

WordPress!                                                             1
ฐานขอมูล!                                                             3
โครงสรางธีม !                                                         5
    โครงสรางธีม!                                                     5
    โครงสรางหนาเพจ!                                                 6
การแสดงผลขอมูล!                                                       8
    สรางขอมูล!                                                      9
    The Loop!                                                       11
    ดึงขอมูล post ออกมาแสดงดวยเงื่อนไขที่ตองการ!                 13
Actions & Filters!                                                  15
    Actions in Action!                                              15
    Filters in Action!                                              17
อภิธานศัพท!                                                        19
    ID!                                                             19
    Post!                                                           19
    Page!                                                           19
    Slug!                                                           19
    Page Slug, Post Slug!                                           19
    Post Type!                                                      19
    Custom Post Type!                                               19




v0.1~alpha-2012.11.07!                                สิทธิพงษ เหลาโกก
เอกสารฉบับนี้อยูภายใตสัญญาอนุญาตการใชงานครีเอทีฟคอมมอนสแบบ
    แสดงที่มา-ไมใชเพื่อการคา-อนุญาตแบบเดียวกัน 3.0 ตนฉบับ
                        รายละเอียดเพิ่มเติมไดที่
     http://creativecommons.org/licenses/by-nc-sa/3.0/.
v0.1~alpha-2012.11.07!   สิทธิพงษ เหลาโกก
บทที่ 1
                                                                                      WordPress
!        WordPress เปนเครื่องมือสำหรับสรางบล็อกและระบบจัดการขอมูล (Content Management System -
CMS) แบบโอเพนซอรสที่พัฒนาอยูบน PHP และ MySQL ดวยสัญญาอนุญาตแบบ GPL มีความสามารถตางๆ
มากมาย เริ่มตนพัฒนาเมื่อ 27 เมษายน 2546 ซึ่งภายใน WordPress นั้นมีโครงสรางตางๆ เพื่ออำนวยความสะดวก
ใหกับนักพัฒนาอยูมากมายดวยกัน ไดแก

!        ธีม (Themes - wp-content/themes) ซึ่งเปรียบเสมือนหนากากของเว็บไซต เปนสวนแสดงผลขอมูลที่ผูใช
สรางขึ้นมา ทั้งนี้เพื่อแยกการประมวลผลอื่นๆ ออกมาจากเว็บไซต จึงทำใหผูใชสามารถปรับเปลี่ยนธีมเปนธีมที่ตองการ
ไดโดยไมสงผลกระทบตอขอมูลที่ผูใชสรางขึ้นเลย (http://wordpress.org/extend/themes)

!       ปลั๊กอิน (Plugins - wp-content/plugins) เปนสวนที่เขามาชวยเพิ่มความสามารถใหกับ WordPress ใหมี
มากขึ้นไปอีก เชน ชวยจัดการดาน SEO ของเว็บไซต ชวยดูแลรักษาฐานขอมูล จำกัดสิทธิการเขาถึงขอมูลของผูใช
หรือชวยทำ cache เพื่อใหเว็บไซตตอบสนองไดเร็วยิ่งขึ้น เปนตน (http://wordpress.org/extend/plugins)

!        วิดเจ็ด (Widgets) คือ กลองเครื่องมือขนาดเล็กที่ผูใชงานสามารถเลือกไดวาจะวางกลองนี้ไวที่ใดโดยแตกลอง
ก็จะมีพฤติกรรมที่แตกตางกันออกไปเชน แสดงขอมูลของเว็บไซต เพิ่มขึ้นมาจากขอมูลหลักที่กำลังอานอยู แสดงสถิติ
การใชงาน แสดงภาพถายแบบสไลด หรือเชื่อมตอเขากับ Social Network อื่นๆ เปนตน โดยที่วิดเจ็ดจะมากับธีมหรือ
ปลั๊กอินตางๆ ที่ติดตั้งเพิ่มเขาไป

ขอมูลภายใน WordPress จะแบงออกเปน 2 สวนใหญๆ ไดแก
1. Post (หรือ album ในความหมายของ m-culture.in.th) เปนขอมูลที่จะเคลื่อนไหว (เพิ่ม) อยูตลอดเวลา โดย
   ปกติแลวจะเรียงจากใหมที่สุดไปหาเกาที่สุด เนื่องจากพัฒนาอยูบนแนวคิดของการเขียนบล็อก
2. Page (หรือหนาแสดงผลขอมูลตางๆ ในความหมายของ m-culture.in.th) เปนสวนที่ไมเคลื่อนไหวหรือปรับ
   เปลี่ยนมากเทาไหรนัก โดยจะแสดงผลขอมูลเฉพาะดาน เปนหนาๆ ไป เชน หนา เกี่ยวกับฉัน เพื่อแนะนำตัวหรือ
   บอกขอมูลการติดตอ หนา แผนที่ สำหรับแสดงผลขอมูลวัฒนธรรมบนแผนที่ เปนตน

นอกจากขอมูลชนิดของ Post และ Page ภายใน WordPress ยังมีขอมูลแบบอื่นอีก เชน
- Attachment สำหรับรูปภาพที่อัพโหลดเขามา
- Revision สำหรับทำเวอรชั่นของ Post หรือ Page ในกรณีที่มีการเปลี่ยนแปลงแกไข หรือทำการบันทึกอัตโนมัติใน
  ระหวางที่ผูใชกำลังสรางขอมูลใน Post หรือ Page นั้น
- Navigation Menu ใชสำหรับสรางเมนูในระบบ




v0.1~alpha-2012.11.07!                                                                                สิทธิพงษ เหลาโกก
บทที่ 2
                         ฐานขอมูล




v0.1~alpha-2012.11.07!       สิทธิพงษ เหลาโกก
บทที่ 3
                                                                                       โครงสรางธีม
โครงสรางธีม
!          การเปลี่ยนแปลงโครงสรางของหนาเว็บไซตนั้นถือเปนเรื่องหนึ่งที่เว็บไซตหลายแหงทำบอยๆ (4-5 ปครั้ง) เพื่อ
เพิ่มความสามารถ ออกแบบใหมเพื่อใหเขากับเทรนด เชน เปลี่ยนจาก XHTML เปน HTML5 เปนตน และอีกเหตุผล
หนึ่งก็เพื่อไมทำใหผูใชรูสึกจำเจ ซึ่ง WordPress เองก็คำนึงถึงความตองการนี้ (และไมตองการที่จะดูแลธีมเองอีกตอ
ไป) ดังนั้น WordPress จึงยอมใหนักพัฒนาทั่วไปสามารถที่จะสรางธีมของตัวเองขึ้นมาใชงานได เพื่อใหธีมที่นักพัฒนา
สามารถนำไปใชงานไดกับทุกๆ เว็บไซตที่ใชงาน WordPress จึงไดมีโครงสรางของธีมที่จำเปนจะตองทำตามดัง
โครงสรางดานลาง




                รูปที่ 3.1 โครงสรางไฟลของธีม (http://codex.wordpress.org/Template_Hierarchy)

v0.1~alpha-2012.11.07!                                                                                  สิทธิพงษ เหลาโกก
6

!       โดยไฟลทั้งหมดที่เห็นดานบนจะอยูดานบนสุดของไดเรคทอรี่ที่บรรจุธีมไวซึ่งในที่นี้จอยูในไดเรคทอรี่
nakornsawanlive (wp-content/theme/nakornsawanlive) ดังนั้นการแกไขไฟลใดๆ ที่ตรงกับชื่อที่ปรากฎอยู
ภายในแผนผังดานบนก็จะสงผลใหหนาตางๆ นั้นเปลี่ยนแปลงไปดวย ยกตัวอยางเชน หากตองการแกไขโครงสรางของ
เพจที่แสดงผลขอมูล 1 ขอมูลนั้น (หนาเดี่ยวของ album) ก็ใหไปแกไขที่ไฟล single.php หากแตถาไมมีไฟลนี้ในได
เรคทอรี่ก็ใหไปแกที่ไฟล index.php หรือหากตองการปรับการแสดงผลเฉพาะขอมูลที่เปนไฟลวิดีโอทั้งหมด (MIME
type = video/*) ใหสรางไฟลที่ชื่อวา video.php เพื่อรับหนาที่แสดงผลขอมูลไฟลที่เปนวิดีโอทั้งหมด หรือหาก
ตองการที่จะระบุชนิดลึกลงไปอีกวาตองการแสดงผลเพียงแคไฟลวิดีโดที่เปน MP4 เทานั้น (MIME type = video/
mp4) ก็ใหสรางไฟลชื่อ video_mp4.php เพื่อทำหนาที่แสดงผล
โครงสรางหนาเพจ
!      โครงสรางของหนาเพจนั้นจะขึ้นอยูกับนักออกแบบแตละคนตองการมาใหเปนแบบไหน ซึ่งไมจำเปนจัดวาง
เหมือนกันไปทั้งหมด แตก็จะมีโครงสรางที่เปนพื้นฐานทั่วไปดังนี้


                                              header.php




                               [The Loop]                                    sidebar.php




                                              footer.php



                 รูปที่ 3.2 โครงสรางเพจ (http://codex.wordpress.org/Stepping_Into_Templates)

!      โครงสรางดานบนนี้ปกติแลวจะอยูในไฟล index.php (หนาแรกของระบบ) ซึ่งแยกการแสดงผลออกไปดังนี้
1. header.php ใชเก็บโคดที่ใชสำหรับแสดงผลสวนที่เปนหัวของเว็บไซต เพื่อใหดานบนของเว็บไซตมีความคงที่อยู
   เสมอ เรียกใชโดยใชฟงกชัน get_header() เพื่อนำขอมูลที่อยูในไฟล header.php มาแสดงผล
    <?php get_header(); ?>
v0.1~alpha-2012.11.07!                                                                            สิทธิพงษ เหลาโกก
2. sidebar.php คือสวนที่ใชสำหรับแสดงผลขอมูลอื่นๆ นอกจากเนื้อหาหลักสวนใหญจะเปนแนวตั้ง และไมจำเปนจะ
   ตองมีเสมอไปขึ้นอยูกับนักออกแบบ เรียกใหดวยฟงกชัน get_sidebar() เพื่อนำขอมูลที่อยูภายในไฟล
   sidebar.php มาแสดงผล

    <?php get_sidebar(); ?>


3. footer.php เปนพื้นที่สำหรับแสดงขอมูลอื่นๆ นอกเหนือจากเนื้อหาหลักเชนเดียวกับ sidebar นอกจากนั้นยังเก็บ
   โคด HTML สวนทายไว สวนใหญจะเปนแนวนอนดานลางสุดของเว็บไซต เรียกใชดวยฟงกชัน get_footer() เพื่อนำ
   ขอมูลที่อยูภายในไฟล footer.php มาแสดง
    <?php get_footer(); ?>


4. The Loop คือสวนที่จะนำเอาขอมูล เชน Post, Page, แผนปายกำกับ ที่อยูในระบบมาแสดงผล โดยขึ้นอยูกับวา
   กำลังสนใจขอมูลใดอยู




v0.1~alpha-2012.11.07!                                                                          สิทธิพงษ เหลาโกก
บทที่ 4
                                                                       การแสดงผลขอมูล
!      กอนหนานีเราไดทราบแลววา WordPress แบงชนิดขอมูลออกเปนกลุมตางๆ ซึ่งขอมูลที่ถือไดวาเปนหัวใจ
                 ้
สำคัญของ WordPress คือขอมูลประเภท Post ซึ่งเปนขอมูลที่เคลื่อนไหวสูงที่สุดในระบบ ดังนั้นการนำขอมูลเหลานี้
มาแสดงผลจึงถือไดวามีความสำคัญสูงสุดของระบบ ซึ่งกอนที่จะแสดงนั้น แนนอนวาตองสรางขอมูลเหลานี้ขึ้นมากอน



                                                                                                            1

   2                                                                                                       3


                                              รูปที่ 4.1 Dashboard
!       รูปที่ 4.1 คือ Dashboard หรือระบบหลังบานของ WordPress ซึ่งผูใชที่ลงชื่อเขาใชงานมีสิทธิเปนผูดูแล
ระบบ (Admin) ซึ่งผูใชคนแรกที่ติดตั้ง WordPress จะไดสิทธินั้นไปโดยอัตโนมัติ ซึ่งสามารถปรับแกสิทธิของผูใชตางๆ
ไดภายหลัง ในหนาจอนี้จะมีกลุมเมนูอยู 3 กลุมดวยกัน
    1. Admin bar จะปรากฎอยูเสมอหลังจากลงชื่อเขาใชงานแลว ทั้งผูใชปกติและผูดูแลระบบ แตเมนูจะแตกตาง
       กันไปตามสิทธิการเขาถึงขอมูลและขอมูลที่กำลังแสดงอยูดานลาง
    2. Admin menu คือเมนูของผูดูแล ซึ่งก็จะปรับเปลี่ยนไปตามสิทธิการเขาถึงของผูใชเชนกัน ยกตัวอยางเชน ใน
       กรณีของผูใชทั่วไป หากเขามาในหนานี้จะเห็นเพียงตัวเลือกสำหรับแกไขขอมูลของตนเองเทานั้น
    3. Options page คือฟอรมตางๆ สำหรับปรับแตงขอมูลของเว็บไซต การแสดงผลจะขึ้นอยูกับตัวเลือกดานซาย
       (Admin menu) ที่เลือกอยู เชนในรูปที่ 4.1 เลือกที่ Dashboard Options page ดานซายก็จะมีขอมูลโดย
       สรุปของเว็บไซตนี้ขึ้นมาให

!       โดยเมนูทั้งหมดดานบน WordPress อนุญาตใหนักพัฒนาเพิ่มเมนูเพื่ออำนวยความสะดวกใหผูใชงานได
ทั้งหมดเพื่อปรับแตงคาตางๆ ที่อยูภายในธีมหรือปลั๊กอินของตนเอง

v0.1~alpha-2012.11.07!                                                                               สิทธิพงษ เหลาโกก
สรางขอมูล
!         จากเมนูดานบนภายในหนา Dashboard จะสรางขอมูลไดจาก 2 ตำแหนงดวยกันคือเลือก Post หรือ Page
ที่ Admin menu แลวเลือกที่เมนู Adnew New (รูปที่ 4.2 a) อีกวิธีการหนึ่งคือจาก Admin bar เลือก +New จาก
นั้นจึงเลือก Post หรือ Page ตามชนิดขอมูลที่ตองการสราง (รูปที่ 4.2 b)




                                                   (a)




                                                   (b)
                         รูปที่ 4.2 (a) สรางขอมูลใหมจาก Admin menu
                         รูปที่ 4.2 (b) สรางขอมูลใหมจาก Admin bar



ลำดับขอมูลและ URL

v0.1~alpha-2012.11.07!                                                                      สิทธิพงษ เหลาโกก
!         ขอมูลที่อยูภายใน WordPress นั้นสามารถจัดเปนหมวดหมู 2 วิธีหลักๆ ดวยกันคือ จัดหมวดหมูดวย
Category ซึ่งเปนการจัดการพื้นฐานของ WordPress อยูแลว โดยที่ทุกๆ Post นั้นจำเปนตองอยูในหมวดหมูใดหมวด
หมูหนึ่งเสมอ อีกวิธีการหนึ่งคือจัดหมวดหมูดวย Post หรือ Page ดวยกันเอง เชน Page A เปนลูกของ Page B ซึ่ง
การจัดหมวดหมูดวยวิธีนี้จะสงผลกระทบโดยตรงไปที่ URL ของ Page B หรือเพจอื่นๆ ที่มาสืบทอดจาก Page A หรือ
Page B ตอไป ยกตัวอยางเชน Page A มี slug คือ foo จะได URL ของ Page A เปน http://example.com/foo1
และเมื่อกำหนดให Page B ซึ่งเดิมทีมี URL เปน http://example.com/bar กลายเพจลูกของ Page A ดังนั้น URL
ใหมของ Page B จะเปลี่ยนมาเปน http://example.com/foo/bar




                                                           รูปที่ 4.3 สราง Page
!           จากรูปที่ 4.3 เปนการสรางขอมูล Page ใหมขึ้นมา ในภาพ Page นี้ยังไมเผยแพรใหบุคคลทั่วไปเห็น แต
จะบันทึกไวในฐานขอมูลเรียบรอยเปนระยะๆ (Auto save) ในภาพจะเห็นตัวหนังสือสีเหลือดานลางคือหัวเรื่อง (Title)
ที่เพิ่มเขาไป เรียกวา slug เพื่อนำไปใช กับ URL ซึ่ง WordPress จะสรางใหโดยอัตโนมัติ2 หากตองการแกไขทำได
ทันทีดวยการคลิ้กที่ตัวหนังสือสีเหลืองโดยตรงหรือปุม Edit
!           ในกรอบ Page Attribute ดานซาย (ในกรณีที่ไมมีใหเลือกที่ Screen Options ดานบนแลวเลือกที่ตัวเลือก
ดานบนวาตองการเมนูใดเพิ่มเติมบาง) จะมีตัวเลือก 3 ตัวเลือกไดแก
            - Parent : เปนตัวเลือกสำหรับกำหนดวาหนาเพจนี้จะเปนเพจลูกของเพจใด ซึ่งคาโดยปริยายคือไมมี
              (None) แตในกรณีนี้จะเลือกที่ Sample Page (เพจตัวอยางที่สรางขึ้นอัตโนมัติเมื่อติดตั้งเสร็จ)
            - Template : วิธีการแสดงผลของ Page นี้ โดยตัวเลือกดานในจะขึ้นอยูกับธีมจะสรางรูปแบบใดใหเลือกบาง
            - Order ลำดับการจัดเรียงในกรณีที่นำเพจนี้ไปสรางเปนตัวเลือกในเมนู แตทายที่สุดแลวผูใชยังเปนผูตัดสินใจ
              วาเพจใดจะขึ้นกอนหรือหลัง
!           ในกรอบเมนู Publish คือสวนที่ใชกำหนดเงื่อนไขในการแสดงผล เชน

1   ในกรณีนี้กำหนดใหรูปแบบลิงกคือ %post_name%
2   รูปแบบของ URL ดานลางนี้จะขึ้นอยูกับรูปแบบ permalink ที่เลือก คาโดยปริยายของ WordPress คือ p=[page_id]
v0.1~alpha-2012.11.07!                                                                                          สิทธิพงษ เหลาโกก
- Save Draft คือบันทึกฉบับราง จะยังไมปรากฎบนหนาเว็บ
       - Preview แสดงตัวอยางการแกไข
       - Status สถานะของขอมูลที่สรางขึ้น มี 3 ตัวเลือกดวยกันคือ Draft, Pending Review และ Published
         แกไขไดที่ปุม Edit ดานขวา จะมีเมนูยอยขึ้นมาเปนตัวเลือกจากนั้นกดปุม OK เพื่อบันทึก หรือ Cancel
         เพื่อยกเลิกการแกไข
       - Visibility ใชกำหนดวาขอมูลที่สรางขึ้นจะมีการแสดงผลในรูปแบบใด
                 - Public แสดงผลขอมูลทั้งหมด
                 - Password protected แสดงผลบนหนาเพจ แตตองใสรหัสผานกอนแสดงเนื้อความดานใน
                 - Private ไมแสดงบนหนาเว็บ ยกเวนผูสรางขอมูล
       - Published on สำหรับกำหนดวันที่และเวลาที่ตองการใหขอมูลแสดงผลบนหนาเว็บ สามารถตั้งเวลาไวลวง
         หนาได
!      เมื่อกดบันทึกขอมูล (Publish) ในภาพที่ 4.3 จะมีกรอบสีเหลืองแจงขอมูลใหทราบวาบันทึกขอมูลเรียบรอย
แลวและตัวอยาง URL ของเพจนนี้จะเปลี่ยนเปน http://localhost/wordpress/sample-page/lorem-ipsum-
dolor/
The Loop
!        บทบาทสำคัญของธีมก็คือการนำเอาขอมูลที่มีอยูมาแสดงผลในตำแหนงที่จัดวางไวดวยรูปแบบหรือหนาตาที่
ออกแบบมาไวเรียบรอยแลว หรือเพิ่มความสามารถในการแสดงผลขอมูล เชน เพิ่มชองทางการแชรไปยัง Social
Network ตางๆ แสดงผลเพื่อคนพิการ หรือแปลงขอมูลที่กำลังแสดงอยูนี้เปนไฟลอื่นๆ ที่ผูใชตองการ (ตามตัวเลือกที่
นักพัฒนากำหนด) เปนตน เพื่อเปนการอำนวยความสะดวกใหกับนักพัฒนา WordPress จึงใหฟงกชันที่สามารถอาน
ขอมูลออกมา โดยไมจำเปนตองใชคำสั่ง SQL เลย The Loop ในความหมายของ WordPress จึงหมายถึง กลุมของ
โคดที่นำเอาขอมูล (Post, Tag, Commet) มาแสดงผล ไมวาจะเปนการแสดงผลเพียงรายการเดียวหรือตามจำนวนที่
ตองการก็ตามที่ผูใชกำหนดไว
ตัวอยางที่ 4.1 The Loop
!        โคดดานบนคือ The Loop หรือกลุมขอมูลที่ใชสำหรับแสดงผลขอมูลที่สนใจ เนื่องจากหากไปวางไวในไฟล
index.php (ในกรณีที่ไฟลอื่นๆ ตามครบตามโครงสรางของธีมแลว) The Loop จะแสดงผล Post ออกมาโดยเรียง
ตามวันที่อัพเดตจากใหมที่สุดไปหาเกาที่สุด ดวยจำนวนที่กำหนดไว หากแตถานำโคดนี้ไปวางไวที่ไฟล single.php ก็
จะแสดงขอมูลออกมาเพียงขอมูลเดียวเทานั้น และเชนเดียวกันหากนำโคดนี้ไปวางไวที่ไฟล search.php (ใชสำหรับ
post ที่ไดจากการคนหา) ก็แสดง Post ที่มีขอมูลตรงกับที่ผูใชระบุในคำคนหาเขามา
!        เพื่อใหเห็นภาพที่เขาใจไดงายยิ่งขึ้น จะอธิบาย The Loop ในกรณีที่วางไวหนาแรกของเพจ (index.php)
   1 <?php if ( have_posts() ) : ?>
   2   <section id=”my-content”>
   3     <?php while( have_posts() ) : the_post() ?>
   4       <article id=”post-id-<?php the_ID() ?>”>
   5         <header>
   6           <h1>
   7             <a href=”<?php the_permalink() ?>”
   8                 title=”<?php the_title() ?>”
   9                 class=”my-permalink” id=”>
  10                <?php the_title() ?>


เพื่อแสดงขอมูล Post ลาสุดออกมา
v0.1~alpha-2012.11.07!                                                                              สิทธิพงษ เหลาโกก
11              </a>
  12           </h1>
  13           <small>
  14              <?php the_date() ?>
  15              at <?php the_time() ?>
  16           </small>
  17         </header>
  18
  19         <?php the_content(); ?>
  20
  21         <footer>
  22           <?php if ( has_category() ) : ?>
  23              Categories: <?php the_category() ?>
  24           <?php endif; ?>
  25           <?php if ( has_tag() ) : ?>
  26              Tags: <?php the_tags() ?>
  27           <?php endif; ?>
  28         </footer>
  29       </article>
  30     <?php endwhile; ?>
  31   </section>
  32 <?php endif;
   1
   2
   3




 บรรทัดที่ คำอธิบาย
 1              ใชตรวจสอบวามี post ที่ตองนำมาแสดงอยูหรือไม ดวยฟงกชัน have_posts()
                 - true - มี
                 - false - ไมมี
 3              เขา while...loop เพื่อนำ post ออกมาแสดง โดยใช have_posts() ตรวจสอบวายังมี post ที่ตองนำ
                มาแสดงเหลืออยูอีกหรือไม หลังจากนั้นจะใชฟงกชัน the_post() ดึง post ถัดไป (หรือ post แรก)
                ออกมาแสดง หากไมใช the_post ภายใน loop นี้ ก็จะกลายเปน infinite loop




v0.1~alpha-2012.11.07!                                                                           สิทธิพงษ เหลาโกก
บรรทัดที่ คำอธิบาย
    4~30         สวนแสดงผลขอมูลโดยตำแหนงตางๆ นั้นจะขึ้นอยูกับการจัดวางของนักออกแบบ ซึ่งขอมูลที่แสดงนั้น
                 จะไดมาจากฟงกชันตางๆ ไดแก
                 - the_ID : สำหรับนำรหัสของขอมูลนั้นมาแสดง
                 - the_permalink : แสดงลิงกของขอมูล
                 - the_title : แสดงชื่อขอมูล
                 - the_date, the_time : แสดงวันและเวลาที่สรางขอมูลนี้ตามลำดับดวยรูปแบบที่กำหนดไวแลว
                 - the_content : แสดงเนื้อความของขอมูลปจจุบัน
                 - has_category : ใชตรวจสอบวาขอมูลนี้ผูใชกำหนดกลุม (category) ใหหรือไม ซึ่ง WordPress จะ
                   บังคับใหทุกขอมูลตองอยูในภายในกลุมใดกลุมหนึ่งอยางนอย 1 กลุม
                 - the_category : แสดงรายการของกลุมที่ขอมูลนั้นถูกจัดไว ซึ่งเปนขอมูลที่จัดรูปแบบไวแลว (อยู
                   ภายใน <ul> และมีลิงกไปยังกลุมขอมูลนั้นครอบขอมูล)
                 - has_tag : ใชสำหรับตรวจสอบวาขอมูลดังกลาวมี tag กำกับอยูหรือไม
                 - the_tags : แสดงรายการของปายกำกับออกมาทั้งหมดเชนเดียวกันกับ the_category

!          ภายใน WordPress จะมีฟงกชันที่ทำหนาที่สำหรับแสดงผลขอมูล โดยทำหนาที่ครอบ Object ตางๆ เอาไว
อีกที ซึ่ง WordPress จะเรียกฟงกชันเหลานี้วา Tags จากดานบน (บรรทัดที่ 4~30 ของตัวอยางที่ 4.1) จะมี Tags 2
กลุมดวยกันคือ Template Tags 3 ทำหนาที่แสดงผลขอมูล ไดแก the_ID, the_permalink, the_title, the_date,
the_time, the_content, the_category, the_tags และ Conditional Tags สำหรับใชตรวจสอบเงื่อนไขตางๆ
สนใจ ในที่นี้คือ has_category และ has_tag
!          ลักษณะพิเศษของฟงกชันใน WordPress คือพารามิเตอรของฟงกชันสวนใหญจะเปนแบบ Optional เมื่อไม
ระบุคาใหก็จะนำคาที่เปน Global ออกมาประมวลผลเลยทันที เชน the_ID จะนำหมายเลข ID ของ $post (Object
ที่เก็บคา Post ปจจุบันออกมา) หรือ has_tag ในตัวอยางดานบนจะหมายถึงการตรวจสอบวา Post ที่กำลังแสดงผล
นั้นมี Tag อยูหรือไม ซึ่งการใชงานในลักษณะนี้จะทำงานไดเพียงแคภายใน The Loop เทานั้น


ดึงขอมูล post ออกมาแสดงดวยเงื่อนไขที่ตองการ
!        การแสดงผลขอมูลนั้น ในบางกรณีนักพัฒนาจำเปนดึงขอมูลดวยเงื่อนไขพิเศษนอกเหนือจากที่ WordPress
สรางใหโดยอัตโนมัติแลว นักพัฒนาก็ยังดึงขอมูลที่ตองการขึ้นมาแสดงไดตามเงื่อนไข ซึ่งการดึงขอมูลออกมาแสดงนั้น
สามารถทำได 2 วิธีดวยกัน คือ
1. สราง Object ของคลาส WP_Query
2. ใชฟงกชัน query_posts

!       ซึ่งทั้ง 2 วิธีนี้ทายที่สุดแลวก็จะใชเปนการใชงานผานคลาส WP_Query เหมือนกัน แตกตางกันที่ WP_Query
นั้นจะสราง Instance ของ WP_Query ขึ้นมากี่ Instance ก็ไดแลวนำไป Iterate ดวย the_post เพื่อนำมาแสดง
3  Template Tags สวนใหญจะมี 2 ฟงกชันที่ทำหนาที่คลายกัน เชน the_ID จะมี get_the_ID ที่คืนหมายเลขของขอมูลนั้นออกมาเหมือนกัน แตตางกันตรง
ที่ the_ID จะคืนคาออกมาในลักษณะของการ echo ดังนั้นจึงไมจำเปนตองใช echo นำหนา the_ID สวน get_the_ID นั้นจะคืนคาออกมาดวยการ return
ทำใหตองใช echo นำหนาเพื่อแสดงผลขอมูล ดังนั้น get_the_ID จึงเหมาะกับการที่จะตองนำเอาขอมูลไปใชตอ สวน the_ID นั้นเหมาะสำหรับการนำเอา
คาที่ไดไปใชงานเลยทันที
v0.1~alpha-2012.11.07!                                                                                                         สิทธิพงษ เหลาโกก
ขอมูลภายหลังทีละ Instance แตสำหรับการใชงาน query_posts จะนำขอมูลที่ไดนั้นไปใสไวในตัวแปรแบบ Global
ดังนั้นจะทำไดครั้งละ 1 เงื่อนไขเทานั้น ซึ่งหลังจากการใชงานทั้ง 2 วิธีนี้สิ่งที่จำเปนที่สุดคือตองใชฟงกชัน
wp_reset_query เพื่อคืนคาในตัวแปร Global ตางๆ ใหเปนคา default และเพื่อไมใหสงผลกระทบตอการดึงขอมูล
ในสวนอื่นๆ วิธีการการระบุเงื่อนไขสำหรับดึงขอมูลออกมาแสดงนั้นจะแบงเปน 2 แบบดวยกันคือ
         - ระบุเงื่อนไขดวยขอความแบบ Query String แบบเดียวกับใน URL
         - ระบุเงื่อนไขดวย Associative Array โดยที่คียของอารเรยจะเปนคาที่ WordPress กำหนดไวแลว
!        ซึ่งการระบุเงื่อนไขทั้ง 2 นี้สามารถใชไดกับทั้ง WP_Query และ query_posts

ตัวอยางที่ 1: แสดงขอมูลที่มีชนิด (Post Type) เปนสินคา (product) ขึ้นมาแบบสุม
     <?php
       $products = new WP_Query(“orderby=rand&post_type=product”);


ตัวอยางที่ 2: ตองการดึงขอมูลที่มีชนิด (Post Type) เปนสินคา (product) ขึ้นมาแสดง โดยเรียงตามจำนวนยอดขาย
(postmeta key = ns_product_sold) จากมากไปหานอย โดยยังมีสินคาอยูในคลัง (ns_product_amount ไมเปน
0) และยอดรีวิวโดยผูใชเฉลี่ย (ns_average_user_review) แลวมากกวาหรือเทากับ 3.5 ในกรณีที่มีขอมูลตรงตาม
เงื่อนไขจำนวนมาก ใหแบงการแสดงผลออกเปนหนา หนาละ 5 รายการ
      <?php
        query_posts(array(
          ‘post_type‘      => ‘product’,
          ‘meta_key‘       => ‘ns_product_sold’,
          ‘orderby‘        => ‘meta_value_num’,,
          ‘order‘          => ‘desc’,
          ‘posts_per_page’ => 5,
          ‘meta_query‘     => array(
            ‘relate‘     => ‘AND’,
            array(
               ‘meta‘    => ‘ns_product_amount’,
               ‘value‘   => ‘0’,
               ‘compare’ => ‘>’
            ),
            array(
               ‘meta‘    => ‘ns_average_user_review’,
               ‘value‘   => ‘3.5’,
               ‘compare’ => ‘>=’
            )
          )



จากทั้ง 3 ตัวอยางดานบน หากเลือกใชวิธีการสราง Instance จาก WP_Query ใหใช $products->have_posts()
เพื่อตรวจสอบวามี post ที่ตรงตามเงื่อนไขที่ระบุหรือไม หลังจากนั้นจึงใช $products->the_post() เพื่อดึงขอมูล
ออกมาหลังจากนั้นก็ใช Template Tags ไดตามปกติ




v0.1~alpha-2012.11.07!                                                                             สิทธิพงษ เหลาโกก
บทที่ 5
                                                                                  Actions & Filters
!         ลำดับการทำงานของฟงกชันที่พัฒนาขึ้นนั้นมีความสำคัญมาก การนำเอาฟงกชันที่พัฒนาขึ้นในธีมหรือ
ปลั๊กอินไปแทรกสอดในแกน (Core) ของระบบ (WordPress) นั้นยอมไมใชเรื่องดีแนนอน เพราะเมื่อระบบหลักมีการ
แกไขเพิ่มเติมเชนปรับเวอรชั่น ยอมสงผลกระทบกับโคดที่เราไดแกไขโดยตรงเขาไปไมมากก็นอย ดังนั้นเพื่อลดการ
เชื่อมโยงกันระหวางสิ่งที่นักพัฒนาไดสรางขึ้นมาและระบบหลักของ WordPress (Loose Coupling) จึงมีกลไกที่ชวย
อำนวยความสะดวกใหกับนักพัฒนามีอิสระที่จะกำหนดวาฟงกชันที่พัฒนาขึ้นนี้จะทำงานในตำแหนงหรือเงื่อนไขใด
เรียกวา Action4 และ Filter5

!      Actions คือ ชื่อกลุมพฤติกรรมที่จะเกิดขึ้นระหวางการทำงานอยางใดอยางหนึ่งของ WordPress เชน
ระหวางการสรางหนาเว็บเพจ ระหวางที่ผูใชลงชื่อเขาใชงาน หรือระหวางการคนหาขอมูลเปนตน
!      Filters คือ ชื่อของตัวกรองขอมูลโดยรับขอมูลจาก WordPress และคืนคาขอมูลที่ประมวลผลเรียบรอยแลว
ออกไป

!        วิธีการใชงาน Actions และ Filters นั้นแบงเปน 2 วิธีคือ ใช Actions และ Filters ที่ WordPress สรางให
อยูแลว และใช Actions หรือ Filters ที่สรางขึ้นมาเอง ซึ่งวิธีการใชงานจะคลายกันคือ ระบุ Actions หรือ Filters ที่
ตองการ จากนั้นจึงระบุฟงกชันที่สรางขึ้นเพื่อทำงานเมื่อมี Actions หรือ Filters นั้นเกิดขึ้น ผานฟงกชัน add_action
หรือ add_filter พฤติกรรมนี้เรียกวา Hook
Actions in Action
!           สำหรับการทำงานของ Actions นั้นจะใชฟงกชัน add_action ซึ่งฟงกชันนี้ตองการพารามิเตอร
            - $tag (string - required) ชื่อ Actions ที่ตองการ hook
            - $function_to_add (string - required) ชื่อฟงกชันที่ตองการแนบไปกับการทำงานของ Actions
            - $priority (int - optional) ใชระบุน้ำหนักการทำงานของ $function_to_add คาโดยปริยายนั้นจะมีคา
              เปน 10 หากกำหนดคานอยลงไปกวานี้ $function_to_add จะถูกเรียกขึ้นมาประมวลผลกอน
            - $accepted_args (int - optional) ใชระบุจำนวนอารกิวเมนตที่ตองการคาโดยปริยายคือ 1

ตัวอยางที่ 1: ตองการกำหนดคาเริ่มตนตางๆ เชน หมายเลขเวอรชั่นของธีม คาคงที่ตางๆ หลังจากเปดใชธีม
(Activate)
    <?php
      // functions.php
      add_action( ‘after_setup_theme’, ‘li_setup_theme’);



4 ตรวจสอบรายการ Actions ทั้งหมดไดจาก http://codex.wordpress.org/Plugin_API/Action_Reference โดยขอมูลในหนาเพจจะเรียงตามลำดับการ
เกิด
5   ตรวจสอบรายการ Filters ทั้งหมดไดจาก http://codex.wordpress.org/Plugin_API/Filter_Reference
v0.1~alpha-2012.11.07!                                                                                             สิทธิพงษ เหลาโกก
function li_setup_theme() {
      if ( ! get_option( ‘li_theme_name’ ) )
        update_option( ‘li_theme_name’, ‘Lorem ipsum’ );

        if ( ! get_option( ‘li_theme_version’ ) )
          update_option( ‘li_theme_version’, ‘0.1~alpha’ );
    }



!        โคดดานบนจะเปนการ hook เอา Actions ที่ชื่อวา ‘after_theme_setup’ ที่จะทำงานครั้งแรกครั้งเดียว
หลังจากกด activate ธีม เขากับฟงกชันชื่อ li_setup_theme ภายในฟงกชัน li_setup_theme จะตรวจสอบวามี
คา li_theme_name และ li_theme_version กำหนดคาไวแลวหรือยังดวยฟงกชัน get_option ตามดวยชื่อของ
คา (หรือคีย) ที่ตองการ ในกรณีที่ยังไมมีการกำหนดคาไวในระบบฟงกชันจะคืนคาเปน null จากนั้นจึงใชฟงกชัน
update_option เพื่อกำหนดคาให WordPress

ตัวอยางที่ 2: ตองการเพิ่มจาวาสคริปตใหกับ WordPress
<?php
  // functions.php
  add_action( ‘wp_enqueue_scripts’, ‘li_add_more_scripts’ );
  function li_add_more_scripts() {
    wp_enqueue_script(
       ‘li-main-js’,
       get_template_direcoty_uri() . ‘/js/li-main.js’,
       array( ‘jquery’, ‘li-prepare’ ),
       ‘2.1’,
       true
    );
  }



!       โคดดานบนใชเพิ่มจาวาสคริปตใหกับ WordPress ดวยฟงกชัน wp_enqueue_script โดยกำหนด id ให
สคริปตนี้วา li-main-js ระบุตำแหนงที่เก็บของไฟลจาวาสคริปตนี้ดวยการเรียกมาจากฟงกชัน
get_template_directory_uri เพื่อรับคาไดเรคทอรี่ปจจุบันของธีม กำหนดเงื่อนไขใหสคริปตนี้นำเขามาในระบบให
นำเขามาถัดจาก jquery (id ของ jQuery) และ li-prepare กำหนดเวอรชั่นของ li-main-js เปน 2.1 และใหใส
สคริปตนี้ที่ดานลางสุดของเพจ
!
!       ในกรณีที่ตองการสรางกลุมของ Actions นั้นก็สามารถทำไดเองเชนกัน

ตัวอยางที่ 3: ตองแสดงคาจำนวนสินคาที่เหลืออยู จำนวนที่สินคาที่เหลือ และยอดรีวิวของลูกคาโดยเฉลี่ยไวทายสุด
ของหนาแสดงรายละเอียดสินคา
     // single.php
     ...
     <?php do_action( ‘li_more_product_detials’ ); ?>
     ...


v0.1~alpha-2012.11.07!                                                                               สิทธิพงษ เหลาโกก
<?php
  // functions.php
  add_action( ‘li_more_product_details’, ‘li_display_product_sold’, );
  function li_display_product_sold() {
    global $post;
    if ( ! is_single( $post->ID ) ) return ;

        printf(
           ‘Product remain: %d’,
           get_post_meta( $post->ID, ‘ns_product_amount’, true ),
        );
    }

    add_action( ‘li_more_product_details’, ‘li_average_user_review’ );
    function li_average_user_review() {
      global $post;
      if ( ! is_single( $post->ID ) ) return ;

        printf(
           ‘Review: %d’,
           get_post_meta( $post->ID, ‘ns_average_user_review’, true ),
        );
    }

  add_action(
      ‘li_more_product_details’,
      ‘li_display_product_remain’,
      4
   );
   function li_display_product_remain() {
      global $post;
      if ( ! is_single( $post->ID ) ) return ;

        // do something
    }


!          ขอดีของวิธีการนี้คือ ถึงแมจะมีการแกไขหรือลบฟงกชัน li_display_product_remain,
li_display_product_sold หรือ li_average_user_review ก็ไมมีขอผิดพลาดเกิดขึ้นในไฟล single.php ลำดับการ
ทำงานจะเปน li_display_product_remain เริ่มตนทำงานอันดับแรก เนื่องจากระบุลำดับความสำคัญไวที่ 4 (เปน
คาอื่นที่นอยกวา 10 ก็ได) หลังจากนั้นคือ li_display_product_sold และ li_average_user_review เพราะทั้ง 2
นี้ไมไดกำหนดคาความสำคัญจึงใชลำดับการประกาศกอนหลังในการประกาศแทน

Filters in Action
!       เชนเดียวกันกับการใช Actions วิธีการใช Filters นั้นก็ตองแนบฟงกชันที่พัฒนาขึ้นเขาไปกับ Filters หลักของ
WordPress หรือสราง Filters ขึ้นมาใชเองก็ไดเชนเดียวกัน การใชงานนั้นเริ่มตน hook เอา Filter ของ WordPress
มาใชงานดวยฟงกชัน add_filter ตามดวยชื่อ Filters ที่ตองการและชื่อฟงกชันที่พัฒนาขึ้นมา แตการใช Filters นั้น
จะแตกตางจาก Actions อยางหนึ่งคือฟงกชันที่ใชงานรวมกับ Filters นั้นจำเปนตองรับคาเขามา จากนั้นจึงนำคาที่ได
มาประมวลผลแลวคืนออกไปให WordPress นำคานั้นสงใหฟงกชันอื่นประมวลผลตอหรือนำไปแสดงบนหนาเพจ
v0.1~alpha-2012.11.07!                                                                                สิทธิพงษ เหลาโกก
ตัวอยางที่ 4: ตองการเปลี่ยนใหตัวหนังสือที่หัวเรื่อง (Title) เปนสีแดง จะไดวา
<?php
  // functions.php
  add_filter( ‘the_title’, ‘li_change_title_color );
  add_filter( ‘get_the_title’, ‘li_change_title_color’ );
  function li_change_title_color( $the_title ) {
    return sprintf(
       ‘<span style=”color:red!important;”>%s</span>’,
       $the_title
    );
  }


!        จากตัวอยางที่ 4 นั้นจะเปนการ hook เอา Filters มา 2 ฟลดเตอรดวยกัน ไดแค the_title และ
get_the_title เนื่องจากทั้ง 2 ฟงกชันนี้สามารถดึงเอาหัวเรื่อง (Title) ของขอมูลมาแสดงผลไดเชนเดียวกัน โดยใช
ฟงกชัน li_change_title_color มาประมวลผล ซึ่ง WordPress จะใสคาหัวเรื่องของขอมูลนั้นมาใหอัตโนมัติ ฟงกชั่น
ดานบนคือการนำเอา $the_title ที่ไดรับมาครอบดวย <span> และเปลี่ยนเปนสีแดงจากนั้นจึงคืนคาใหกับ
WordPress

ตัวอยางที่ 5: ตองการเพิ่มเมธอดของ XML-RPC เว็บเซอรวิส
<?php
  // functions.php
  add_filter( ‘xmlrpc_methods’, ‘li_xmlrpc_methods_register );
  function li_xmlrpc_methods_register( $methods ) {
    $methods[‘li.hello’] = ‘li_say_hello’;

        return $methods;
    }

    function li_say_hello() {
      $var = @$_POST[‘foo’];
      return “hello {$var}”;
    }



!          จากตัวอยางดานบนจะ hook เอา Filters ที่ชื่อวา xmlrpc_methods และแนบเอาฟงกชั่น
li_xmlrpc_methods_register เอาไป เพื่อลงทะเบียนเมธอดตางๆ เขาไป ในที่นี้จะลงทะเบียน li.hello เขาไป โดย
ใชฟงกชั่น li_say_hello เขามาทำงาน ซึ่งในฟงกชั่น li_say_hello นั้นจะรับคาตัวแปร foo ที่สงมาดวยวิธี POST
และคือคาไปดวย hello และตอทายดวย คาที่สงมา




v0.1~alpha-2012.11.07!                                                                             สิทธิพงษ เหลาโกก
อภิธานศัพท
ID
!         ตัวเลขสำหรับบงชี้ post, page, tag, category
Post
!         บทความ ที่ผูใชสรางขึ้นมา ซึ่งจะเพิ่มจำนวนขึ้นเรื่อยๆ
Page
!      หนาสำหรับแสดงขอมูลที่คอนขางคงที่ ไมคอยมีความเคลื่อนไหว เชน หนาเพจหรับแสดงขอมูลการติดตอ
หนาเพจสำหรับแสดงแบบสอบถาม เปนตน
Slug
!         คำที่สามารถอธิบายขอมูลนั้น ซึ่ง slug ที่ดีจะเปนภาษาอังกฤษ ในกรณีที่เลือกรูปแบบ URL เปน clean url
ซึ่ง slug นี้ WordPress จะสรางใหอัตโนมัติในโดยเอา title ของ post หรือ page นั้นมาใสให หากซ้ำกับที่มีอยูแลว
จะตอทายดวยตัวเลข แตผูใชก็สามารถที่จะกำหนด slug นี้ขึ้นมาเองได
Page Slug, Post Slug
!         คำสั้นๆ ที่สามารถอธิบาย post หรือเพจนั้น
Post Type
!      ประเภทของ Post นั้น เชน post, page, attachment, revision นอกจากนั้นแลวนักพัฒนายังสามารถสราง
Post Type ขึ้นมาไดเอง เชน store, product, album, movie เปนตน
Custom Post Type
!        ประเภทของ Post (Post Type) ของเอกสารที่นักพัฒนาสรางขึ้นมา เชน movie, product, book เปนตน
นอกจากนั้นยังสามารถกำหนดคุณสมบัติตางๆ เชน จะรองรับภาพตัวแทนหรือไม สามารถกำหนดแผนปายและจัด
กลุมไดหรือไม




v0.1~alpha-2012.11.07!                                                                               สิทธิพงษ เหลาโกก

Weitere ähnliche Inhalte

Was ist angesagt?

การเขียนเว็บเพจด้วยภาษา HTML
การเขียนเว็บเพจด้วยภาษา HTMLการเขียนเว็บเพจด้วยภาษา HTML
การเขียนเว็บเพจด้วยภาษา HTMLMjjeje Mint
 
20100806 wordpress-server2 go
20100806 wordpress-server2 go20100806 wordpress-server2 go
20100806 wordpress-server2 goarchitechture
 
wordpress-server2
wordpress-server2 wordpress-server2
wordpress-server2 Nan Anan
 
20100806 wordpress-server2 go
20100806 wordpress-server2 go20100806 wordpress-server2 go
20100806 wordpress-server2 gotaweesit doh
 
20100806 wordpress-server2 go
20100806 wordpress-server2 go20100806 wordpress-server2 go
20100806 wordpress-server2 govongboonrod
 
การสร้างเว็บเพจด้วยภาษา Html
การสร้างเว็บเพจด้วยภาษา Htmlการสร้างเว็บเพจด้วยภาษา Html
การสร้างเว็บเพจด้วยภาษา HtmlFair Kung Nattaput
 
ทบทวน Html 1
ทบทวน Html 1ทบทวน Html 1
ทบทวน Html 1School
 
บทที่ 5 การจัดการข้อความ
บทที่ 5 การจัดการข้อความบทที่ 5 การจัดการข้อความ
บทที่ 5 การจัดการข้อความNattipong Siangyen
 
การสร้างหัวข้อเว็บไซต์
การสร้างหัวข้อเว็บไซต์การสร้างหัวข้อเว็บไซต์
การสร้างหัวข้อเว็บไซต์Chuleegron Pintira
 
การใช้งานWordPress
การใช้งานWordPressการใช้งานWordPress
การใช้งานWordPressSamorn Tara
 

Was ist angesagt? (18)

การเขียนเว็บเพจด้วยภาษา HTML
การเขียนเว็บเพจด้วยภาษา HTMLการเขียนเว็บเพจด้วยภาษา HTML
การเขียนเว็บเพจด้วยภาษา HTML
 
20100806 wordpress-server2 go
20100806 wordpress-server2 go20100806 wordpress-server2 go
20100806 wordpress-server2 go
 
wordpress-server2
wordpress-server2 wordpress-server2
wordpress-server2
 
20100806 wordpress-server2 go
20100806 wordpress-server2 go20100806 wordpress-server2 go
20100806 wordpress-server2 go
 
20100806 wordpress-server2 go
20100806 wordpress-server2 go20100806 wordpress-server2 go
20100806 wordpress-server2 go
 
20100806 wordpress-server2 go
20100806 wordpress-server2 go20100806 wordpress-server2 go
20100806 wordpress-server2 go
 
HTML5 Startup
HTML5 StartupHTML5 Startup
HTML5 Startup
 
Lab#2
Lab#2Lab#2
Lab#2
 
Joomla CMS
Joomla CMSJoomla CMS
Joomla CMS
 
Session3 part1
Session3 part1Session3 part1
Session3 part1
 
Doc2
Doc2Doc2
Doc2
 
การสร้างเว็บเพจด้วยภาษา Html
การสร้างเว็บเพจด้วยภาษา Htmlการสร้างเว็บเพจด้วยภาษา Html
การสร้างเว็บเพจด้วยภาษา Html
 
ทบทวน Html 1
ทบทวน Html 1ทบทวน Html 1
ทบทวน Html 1
 
Wordpress day01 MoT
Wordpress day01 MoTWordpress day01 MoT
Wordpress day01 MoT
 
บทที่ 5 การจัดการข้อความ
บทที่ 5 การจัดการข้อความบทที่ 5 การจัดการข้อความ
บทที่ 5 การจัดการข้อความ
 
การสร้างหัวข้อเว็บไซต์
การสร้างหัวข้อเว็บไซต์การสร้างหัวข้อเว็บไซต์
การสร้างหัวข้อเว็บไซต์
 
ทดสอบการอัพโหลด
ทดสอบการอัพโหลดทดสอบการอัพโหลด
ทดสอบการอัพโหลด
 
การใช้งานWordPress
การใช้งานWordPressการใช้งานWordPress
การใช้งานWordPress
 

Andere mochten auch

แม่แบบและแบบบันทึกสำหรับกระบวนการออกแบบรายละเอียดซอฟต์แวร์
แม่แบบและแบบบันทึกสำหรับกระบวนการออกแบบรายละเอียดซอฟต์แวร์แม่แบบและแบบบันทึกสำหรับกระบวนการออกแบบรายละเอียดซอฟต์แวร์
แม่แบบและแบบบันทึกสำหรับกระบวนการออกแบบรายละเอียดซอฟต์แวร์Sitdhibong Laokok
 
คู่มือประกอบกระบวนการออกแบบรายละเอียดซอฟต์แวร์
คู่มือประกอบกระบวนการออกแบบรายละเอียดซอฟต์แวร์คู่มือประกอบกระบวนการออกแบบรายละเอียดซอฟต์แวร์
คู่มือประกอบกระบวนการออกแบบรายละเอียดซอฟต์แวร์Sitdhibong Laokok
 
การนิยามและการปรับปรุงกระบวนการออกแบบรายละเอียดซอฟต์แวร์
การนิยามและการปรับปรุงกระบวนการออกแบบรายละเอียดซอฟต์แวร์การนิยามและการปรับปรุงกระบวนการออกแบบรายละเอียดซอฟต์แวร์
การนิยามและการปรับปรุงกระบวนการออกแบบรายละเอียดซอฟต์แวร์Sitdhibong Laokok
 
ข้อเสนอโครงการ.ระบบจัดการส่งดอกไม้ของฮานะ
ข้อเสนอโครงการ.ระบบจัดการส่งดอกไม้ของฮานะข้อเสนอโครงการ.ระบบจัดการส่งดอกไม้ของฮานะ
ข้อเสนอโครงการ.ระบบจัดการส่งดอกไม้ของฮานะSitdhibong Laokok
 
Introduction to software engineering principles
Introduction to software engineering principlesIntroduction to software engineering principles
Introduction to software engineering principlesWorawut Ramchan
 
Software Engineering Process
Software Engineering ProcessSoftware Engineering Process
Software Engineering ProcessWorawut Ramchan
 
Software Engineering Process Standard
Software Engineering Process StandardSoftware Engineering Process Standard
Software Engineering Process StandardWorawut Ramchan
 
กระบวนการออกแบบรายละเอียดซอฟต์แวร์
กระบวนการออกแบบรายละเอียดซอฟต์แวร์กระบวนการออกแบบรายละเอียดซอฟต์แวร์
กระบวนการออกแบบรายละเอียดซอฟต์แวร์Sitdhibong Laokok
 
Software Engineering - Software Models
Software Engineering - Software ModelsSoftware Engineering - Software Models
Software Engineering - Software ModelsReddhi Basu
 
Lecture 02 Software Process Model
Lecture 02 Software Process ModelLecture 02 Software Process Model
Lecture 02 Software Process ModelAchmad Solichin
 
Seminar: PHP Developer for Dummies
Seminar: PHP Developer for DummiesSeminar: PHP Developer for Dummies
Seminar: PHP Developer for DummiesAchmad Solichin
 
Software engineering : Layered Architecture
Software engineering : Layered ArchitectureSoftware engineering : Layered Architecture
Software engineering : Layered ArchitectureMuhammed Afsal Villan
 
Generic Software Process Models
Generic Software Process ModelsGeneric Software Process Models
Generic Software Process ModelsEducation Front
 
Software Process Models
Software Process ModelsSoftware Process Models
Software Process ModelsAtul Karmyal
 

Andere mochten auch (19)

แม่แบบและแบบบันทึกสำหรับกระบวนการออกแบบรายละเอียดซอฟต์แวร์
แม่แบบและแบบบันทึกสำหรับกระบวนการออกแบบรายละเอียดซอฟต์แวร์แม่แบบและแบบบันทึกสำหรับกระบวนการออกแบบรายละเอียดซอฟต์แวร์
แม่แบบและแบบบันทึกสำหรับกระบวนการออกแบบรายละเอียดซอฟต์แวร์
 
คู่มือประกอบกระบวนการออกแบบรายละเอียดซอฟต์แวร์
คู่มือประกอบกระบวนการออกแบบรายละเอียดซอฟต์แวร์คู่มือประกอบกระบวนการออกแบบรายละเอียดซอฟต์แวร์
คู่มือประกอบกระบวนการออกแบบรายละเอียดซอฟต์แวร์
 
การนิยามและการปรับปรุงกระบวนการออกแบบรายละเอียดซอฟต์แวร์
การนิยามและการปรับปรุงกระบวนการออกแบบรายละเอียดซอฟต์แวร์การนิยามและการปรับปรุงกระบวนการออกแบบรายละเอียดซอฟต์แวร์
การนิยามและการปรับปรุงกระบวนการออกแบบรายละเอียดซอฟต์แวร์
 
ข้อเสนอโครงการ.ระบบจัดการส่งดอกไม้ของฮานะ
ข้อเสนอโครงการ.ระบบจัดการส่งดอกไม้ของฮานะข้อเสนอโครงการ.ระบบจัดการส่งดอกไม้ของฮานะ
ข้อเสนอโครงการ.ระบบจัดการส่งดอกไม้ของฮานะ
 
it4116_04_scampi
it4116_04_scampiit4116_04_scampi
it4116_04_scampi
 
Introduction to software engineering principles
Introduction to software engineering principlesIntroduction to software engineering principles
Introduction to software engineering principles
 
Software Engineering Process
Software Engineering ProcessSoftware Engineering Process
Software Engineering Process
 
Software Engineering Process Standard
Software Engineering Process StandardSoftware Engineering Process Standard
Software Engineering Process Standard
 
บทนำ วิศวกรรมซอฟต์แวร์
บทนำ วิศวกรรมซอฟต์แวร์ บทนำ วิศวกรรมซอฟต์แวร์
บทนำ วิศวกรรมซอฟต์แวร์
 
กระบวนการออกแบบรายละเอียดซอฟต์แวร์
กระบวนการออกแบบรายละเอียดซอฟต์แวร์กระบวนการออกแบบรายละเอียดซอฟต์แวร์
กระบวนการออกแบบรายละเอียดซอฟต์แวร์
 
Improving Pronunciation
Improving PronunciationImproving Pronunciation
Improving Pronunciation
 
Modern PHP Developer
Modern PHP DeveloperModern PHP Developer
Modern PHP Developer
 
Software development process models
Software development process modelsSoftware development process models
Software development process models
 
Software Engineering - Software Models
Software Engineering - Software ModelsSoftware Engineering - Software Models
Software Engineering - Software Models
 
Lecture 02 Software Process Model
Lecture 02 Software Process ModelLecture 02 Software Process Model
Lecture 02 Software Process Model
 
Seminar: PHP Developer for Dummies
Seminar: PHP Developer for DummiesSeminar: PHP Developer for Dummies
Seminar: PHP Developer for Dummies
 
Software engineering : Layered Architecture
Software engineering : Layered ArchitectureSoftware engineering : Layered Architecture
Software engineering : Layered Architecture
 
Generic Software Process Models
Generic Software Process ModelsGeneric Software Process Models
Generic Software Process Models
 
Software Process Models
Software Process ModelsSoftware Process Models
Software Process Models
 

Ähnlich wie WordPress Theme Development Short Manual

เอกสารประกอบการอบรม wordpress
เอกสารประกอบการอบรม wordpressเอกสารประกอบการอบรม wordpress
เอกสารประกอบการอบรม wordpressprasitnb
 
หน่วยที่ 2
หน่วยที่ 2หน่วยที่ 2
หน่วยที่ 2pom_2555
 
รายงานคอม
รายงานคอมรายงานคอม
รายงานคอมdekthai
 
รายงาน คอม
รายงาน คอมรายงาน คอม
รายงาน คอมNooLuck
 
รายงาน window
รายงาน windowรายงาน window
รายงาน windowNooLuck
 
20100831 wordpress-extension
20100831 wordpress-extension20100831 wordpress-extension
20100831 wordpress-extensionpornpimolc
 
20100831 wordpress-extension
20100831 wordpress-extension20100831 wordpress-extension
20100831 wordpress-extensionAree Taylor
 
แบบเสนอโครงร่างโครงงานคอมพิวเตอร์
แบบเสนอโครงร่างโครงงานคอมพิวเตอร์แบบเสนอโครงร่างโครงงานคอมพิวเตอร์
แบบเสนอโครงร่างโครงงานคอมพิวเตอร์Supaporn Pakdeemee
 
สร้างเว็บไซต์ด้วยWordpress
สร้างเว็บไซต์ด้วยWordpressสร้างเว็บไซต์ด้วยWordpress
สร้างเว็บไซต์ด้วยWordpresskruburapha2012
 
Chapter4
Chapter4Chapter4
Chapter4aumtall
 
นุ๊ก
นุ๊กนุ๊ก
นุ๊กsirinet
 
หมวย
หมวยหมวย
หมวยsirinet
 
ดรีม
ดรีมดรีม
ดรีมsirinet
 

Ähnlich wie WordPress Theme Development Short Manual (20)

เอกสารประกอบการอบรม wordpress
เอกสารประกอบการอบรม wordpressเอกสารประกอบการอบรม wordpress
เอกสารประกอบการอบรม wordpress
 
หน่วยที่ 2
หน่วยที่ 2หน่วยที่ 2
หน่วยที่ 2
 
รายงานคอม
รายงานคอมรายงานคอม
รายงานคอม
 
รายงาน คอม
รายงาน คอมรายงาน คอม
รายงาน คอม
 
รายงาน window
รายงาน windowรายงาน window
รายงาน window
 
20100831 wordpress-extension
20100831 wordpress-extension20100831 wordpress-extension
20100831 wordpress-extension
 
20100831 wordpress-extension
20100831 wordpress-extension20100831 wordpress-extension
20100831 wordpress-extension
 
Wordpress.org Extension
Wordpress.org ExtensionWordpress.org Extension
Wordpress.org Extension
 
Yuu
YuuYuu
Yuu
 
Ten
TenTen
Ten
 
New
NewNew
New
 
แบบเสนอโครงร่างโครงงานคอมพิวเตอร์
แบบเสนอโครงร่างโครงงานคอมพิวเตอร์แบบเสนอโครงร่างโครงงานคอมพิวเตอร์
แบบเสนอโครงร่างโครงงานคอมพิวเตอร์
 
สร้างเว็บไซต์ด้วยWordpress
สร้างเว็บไซต์ด้วยWordpressสร้างเว็บไซต์ด้วยWordpress
สร้างเว็บไซต์ด้วยWordpress
 
Chapter4
Chapter4Chapter4
Chapter4
 
Cms
CmsCms
Cms
 
นุ๊ก
นุ๊กนุ๊ก
นุ๊ก
 
โบ
โบโบ
โบ
 
Best
BestBest
Best
 
หมวย
หมวยหมวย
หมวย
 
ดรีม
ดรีมดรีม
ดรีม
 

Mehr von Sitdhibong Laokok

Software Metrics: Paper Presentation
Software Metrics: Paper PresentationSoftware Metrics: Paper Presentation
Software Metrics: Paper PresentationSitdhibong Laokok
 
SNA: Information Sharing Behavior
SNA: Information Sharing BehaviorSNA: Information Sharing Behavior
SNA: Information Sharing BehaviorSitdhibong Laokok
 
Seminar Slide: Investigating dependencies in software requirements for change...
Seminar Slide: Investigating dependencies in software requirements for change...Seminar Slide: Investigating dependencies in software requirements for change...
Seminar Slide: Investigating dependencies in software requirements for change...Sitdhibong Laokok
 
New M-Culture + Elementary WordPress
New M-Culture + Elementary WordPressNew M-Culture + Elementary WordPress
New M-Culture + Elementary WordPressSitdhibong Laokok
 
Introduction to WordPress Theme Development
Introduction to WordPress Theme DevelopmentIntroduction to WordPress Theme Development
Introduction to WordPress Theme DevelopmentSitdhibong Laokok
 
JAXB: Create, Validate XML Message and Edit XML Schema
JAXB: Create, Validate XML Message and Edit XML SchemaJAXB: Create, Validate XML Message and Edit XML Schema
JAXB: Create, Validate XML Message and Edit XML SchemaSitdhibong Laokok
 
Software Architecture: Test Case Writing
Software Architecture: Test Case WritingSoftware Architecture: Test Case Writing
Software Architecture: Test Case WritingSitdhibong Laokok
 
พระราชบัญญัติ ว่าด้วยการกระทำความผิดเกี่ยวกับคอมพิวเตอร์ พ.ศ. 2550
พระราชบัญญัติ ว่าด้วยการกระทำความผิดเกี่ยวกับคอมพิวเตอร์ พ.ศ. 2550พระราชบัญญัติ ว่าด้วยการกระทำความผิดเกี่ยวกับคอมพิวเตอร์ พ.ศ. 2550
พระราชบัญญัติ ว่าด้วยการกระทำความผิดเกี่ยวกับคอมพิวเตอร์ พ.ศ. 2550Sitdhibong Laokok
 

Mehr von Sitdhibong Laokok (10)

Software Metrics: Paper Presentation
Software Metrics: Paper PresentationSoftware Metrics: Paper Presentation
Software Metrics: Paper Presentation
 
SNA: Information Sharing Behavior
SNA: Information Sharing BehaviorSNA: Information Sharing Behavior
SNA: Information Sharing Behavior
 
Seminar Slide: Investigating dependencies in software requirements for change...
Seminar Slide: Investigating dependencies in software requirements for change...Seminar Slide: Investigating dependencies in software requirements for change...
Seminar Slide: Investigating dependencies in software requirements for change...
 
Git installation
Git installationGit installation
Git installation
 
New M-Culture + Elementary WordPress
New M-Culture + Elementary WordPressNew M-Culture + Elementary WordPress
New M-Culture + Elementary WordPress
 
Introduction to WordPress Theme Development
Introduction to WordPress Theme DevelopmentIntroduction to WordPress Theme Development
Introduction to WordPress Theme Development
 
JAXB: Create, Validate XML Message and Edit XML Schema
JAXB: Create, Validate XML Message and Edit XML SchemaJAXB: Create, Validate XML Message and Edit XML Schema
JAXB: Create, Validate XML Message and Edit XML Schema
 
Software Architecture: Test Case Writing
Software Architecture: Test Case WritingSoftware Architecture: Test Case Writing
Software Architecture: Test Case Writing
 
Introduce to SVN
Introduce to SVNIntroduce to SVN
Introduce to SVN
 
พระราชบัญญัติ ว่าด้วยการกระทำความผิดเกี่ยวกับคอมพิวเตอร์ พ.ศ. 2550
พระราชบัญญัติ ว่าด้วยการกระทำความผิดเกี่ยวกับคอมพิวเตอร์ พ.ศ. 2550พระราชบัญญัติ ว่าด้วยการกระทำความผิดเกี่ยวกับคอมพิวเตอร์ พ.ศ. 2550
พระราชบัญญัติ ว่าด้วยการกระทำความผิดเกี่ยวกับคอมพิวเตอร์ พ.ศ. 2550
 

WordPress Theme Development Short Manual

  • 2.
  • 3. สารบัญ WordPress! 1 ฐานขอมูล! 3 โครงสรางธีม ! 5 โครงสรางธีม! 5 โครงสรางหนาเพจ! 6 การแสดงผลขอมูล! 8 สรางขอมูล! 9 The Loop! 11 ดึงขอมูล post ออกมาแสดงดวยเงื่อนไขที่ตองการ! 13 Actions & Filters! 15 Actions in Action! 15 Filters in Action! 17 อภิธานศัพท! 19 ID! 19 Post! 19 Page! 19 Slug! 19 Page Slug, Post Slug! 19 Post Type! 19 Custom Post Type! 19 v0.1~alpha-2012.11.07! สิทธิพงษ เหลาโกก
  • 4. เอกสารฉบับนี้อยูภายใตสัญญาอนุญาตการใชงานครีเอทีฟคอมมอนสแบบ แสดงที่มา-ไมใชเพื่อการคา-อนุญาตแบบเดียวกัน 3.0 ตนฉบับ รายละเอียดเพิ่มเติมไดที่ http://creativecommons.org/licenses/by-nc-sa/3.0/.
  • 5. v0.1~alpha-2012.11.07! สิทธิพงษ เหลาโกก
  • 6.
  • 7. บทที่ 1 WordPress ! WordPress เปนเครื่องมือสำหรับสรางบล็อกและระบบจัดการขอมูล (Content Management System - CMS) แบบโอเพนซอรสที่พัฒนาอยูบน PHP และ MySQL ดวยสัญญาอนุญาตแบบ GPL มีความสามารถตางๆ มากมาย เริ่มตนพัฒนาเมื่อ 27 เมษายน 2546 ซึ่งภายใน WordPress นั้นมีโครงสรางตางๆ เพื่ออำนวยความสะดวก ใหกับนักพัฒนาอยูมากมายดวยกัน ไดแก ! ธีม (Themes - wp-content/themes) ซึ่งเปรียบเสมือนหนากากของเว็บไซต เปนสวนแสดงผลขอมูลที่ผูใช สรางขึ้นมา ทั้งนี้เพื่อแยกการประมวลผลอื่นๆ ออกมาจากเว็บไซต จึงทำใหผูใชสามารถปรับเปลี่ยนธีมเปนธีมที่ตองการ ไดโดยไมสงผลกระทบตอขอมูลที่ผูใชสรางขึ้นเลย (http://wordpress.org/extend/themes) ! ปลั๊กอิน (Plugins - wp-content/plugins) เปนสวนที่เขามาชวยเพิ่มความสามารถใหกับ WordPress ใหมี มากขึ้นไปอีก เชน ชวยจัดการดาน SEO ของเว็บไซต ชวยดูแลรักษาฐานขอมูล จำกัดสิทธิการเขาถึงขอมูลของผูใช หรือชวยทำ cache เพื่อใหเว็บไซตตอบสนองไดเร็วยิ่งขึ้น เปนตน (http://wordpress.org/extend/plugins) ! วิดเจ็ด (Widgets) คือ กลองเครื่องมือขนาดเล็กที่ผูใชงานสามารถเลือกไดวาจะวางกลองนี้ไวที่ใดโดยแตกลอง ก็จะมีพฤติกรรมที่แตกตางกันออกไปเชน แสดงขอมูลของเว็บไซต เพิ่มขึ้นมาจากขอมูลหลักที่กำลังอานอยู แสดงสถิติ การใชงาน แสดงภาพถายแบบสไลด หรือเชื่อมตอเขากับ Social Network อื่นๆ เปนตน โดยที่วิดเจ็ดจะมากับธีมหรือ ปลั๊กอินตางๆ ที่ติดตั้งเพิ่มเขาไป ขอมูลภายใน WordPress จะแบงออกเปน 2 สวนใหญๆ ไดแก 1. Post (หรือ album ในความหมายของ m-culture.in.th) เปนขอมูลที่จะเคลื่อนไหว (เพิ่ม) อยูตลอดเวลา โดย ปกติแลวจะเรียงจากใหมที่สุดไปหาเกาที่สุด เนื่องจากพัฒนาอยูบนแนวคิดของการเขียนบล็อก 2. Page (หรือหนาแสดงผลขอมูลตางๆ ในความหมายของ m-culture.in.th) เปนสวนที่ไมเคลื่อนไหวหรือปรับ เปลี่ยนมากเทาไหรนัก โดยจะแสดงผลขอมูลเฉพาะดาน เปนหนาๆ ไป เชน หนา เกี่ยวกับฉัน เพื่อแนะนำตัวหรือ บอกขอมูลการติดตอ หนา แผนที่ สำหรับแสดงผลขอมูลวัฒนธรรมบนแผนที่ เปนตน นอกจากขอมูลชนิดของ Post และ Page ภายใน WordPress ยังมีขอมูลแบบอื่นอีก เชน - Attachment สำหรับรูปภาพที่อัพโหลดเขามา - Revision สำหรับทำเวอรชั่นของ Post หรือ Page ในกรณีที่มีการเปลี่ยนแปลงแกไข หรือทำการบันทึกอัตโนมัติใน ระหวางที่ผูใชกำลังสรางขอมูลใน Post หรือ Page นั้น - Navigation Menu ใชสำหรับสรางเมนูในระบบ v0.1~alpha-2012.11.07! สิทธิพงษ เหลาโกก
  • 8.
  • 9. บทที่ 2 ฐานขอมูล v0.1~alpha-2012.11.07! สิทธิพงษ เหลาโกก
  • 10.
  • 11. บทที่ 3 โครงสรางธีม โครงสรางธีม ! การเปลี่ยนแปลงโครงสรางของหนาเว็บไซตนั้นถือเปนเรื่องหนึ่งที่เว็บไซตหลายแหงทำบอยๆ (4-5 ปครั้ง) เพื่อ เพิ่มความสามารถ ออกแบบใหมเพื่อใหเขากับเทรนด เชน เปลี่ยนจาก XHTML เปน HTML5 เปนตน และอีกเหตุผล หนึ่งก็เพื่อไมทำใหผูใชรูสึกจำเจ ซึ่ง WordPress เองก็คำนึงถึงความตองการนี้ (และไมตองการที่จะดูแลธีมเองอีกตอ ไป) ดังนั้น WordPress จึงยอมใหนักพัฒนาทั่วไปสามารถที่จะสรางธีมของตัวเองขึ้นมาใชงานได เพื่อใหธีมที่นักพัฒนา สามารถนำไปใชงานไดกับทุกๆ เว็บไซตที่ใชงาน WordPress จึงไดมีโครงสรางของธีมที่จำเปนจะตองทำตามดัง โครงสรางดานลาง รูปที่ 3.1 โครงสรางไฟลของธีม (http://codex.wordpress.org/Template_Hierarchy) v0.1~alpha-2012.11.07! สิทธิพงษ เหลาโกก
  • 12. 6 ! โดยไฟลทั้งหมดที่เห็นดานบนจะอยูดานบนสุดของไดเรคทอรี่ที่บรรจุธีมไวซึ่งในที่นี้จอยูในไดเรคทอรี่ nakornsawanlive (wp-content/theme/nakornsawanlive) ดังนั้นการแกไขไฟลใดๆ ที่ตรงกับชื่อที่ปรากฎอยู ภายในแผนผังดานบนก็จะสงผลใหหนาตางๆ นั้นเปลี่ยนแปลงไปดวย ยกตัวอยางเชน หากตองการแกไขโครงสรางของ เพจที่แสดงผลขอมูล 1 ขอมูลนั้น (หนาเดี่ยวของ album) ก็ใหไปแกไขที่ไฟล single.php หากแตถาไมมีไฟลนี้ในได เรคทอรี่ก็ใหไปแกที่ไฟล index.php หรือหากตองการปรับการแสดงผลเฉพาะขอมูลที่เปนไฟลวิดีโอทั้งหมด (MIME type = video/*) ใหสรางไฟลที่ชื่อวา video.php เพื่อรับหนาที่แสดงผลขอมูลไฟลที่เปนวิดีโอทั้งหมด หรือหาก ตองการที่จะระบุชนิดลึกลงไปอีกวาตองการแสดงผลเพียงแคไฟลวิดีโดที่เปน MP4 เทานั้น (MIME type = video/ mp4) ก็ใหสรางไฟลชื่อ video_mp4.php เพื่อทำหนาที่แสดงผล โครงสรางหนาเพจ ! โครงสรางของหนาเพจนั้นจะขึ้นอยูกับนักออกแบบแตละคนตองการมาใหเปนแบบไหน ซึ่งไมจำเปนจัดวาง เหมือนกันไปทั้งหมด แตก็จะมีโครงสรางที่เปนพื้นฐานทั่วไปดังนี้ header.php [The Loop] sidebar.php footer.php รูปที่ 3.2 โครงสรางเพจ (http://codex.wordpress.org/Stepping_Into_Templates) ! โครงสรางดานบนนี้ปกติแลวจะอยูในไฟล index.php (หนาแรกของระบบ) ซึ่งแยกการแสดงผลออกไปดังนี้ 1. header.php ใชเก็บโคดที่ใชสำหรับแสดงผลสวนที่เปนหัวของเว็บไซต เพื่อใหดานบนของเว็บไซตมีความคงที่อยู เสมอ เรียกใชโดยใชฟงกชัน get_header() เพื่อนำขอมูลที่อยูในไฟล header.php มาแสดงผล <?php get_header(); ?> v0.1~alpha-2012.11.07! สิทธิพงษ เหลาโกก
  • 13. 2. sidebar.php คือสวนที่ใชสำหรับแสดงผลขอมูลอื่นๆ นอกจากเนื้อหาหลักสวนใหญจะเปนแนวตั้ง และไมจำเปนจะ ตองมีเสมอไปขึ้นอยูกับนักออกแบบ เรียกใหดวยฟงกชัน get_sidebar() เพื่อนำขอมูลที่อยูภายในไฟล sidebar.php มาแสดงผล <?php get_sidebar(); ?> 3. footer.php เปนพื้นที่สำหรับแสดงขอมูลอื่นๆ นอกเหนือจากเนื้อหาหลักเชนเดียวกับ sidebar นอกจากนั้นยังเก็บ โคด HTML สวนทายไว สวนใหญจะเปนแนวนอนดานลางสุดของเว็บไซต เรียกใชดวยฟงกชัน get_footer() เพื่อนำ ขอมูลที่อยูภายในไฟล footer.php มาแสดง <?php get_footer(); ?> 4. The Loop คือสวนที่จะนำเอาขอมูล เชน Post, Page, แผนปายกำกับ ที่อยูในระบบมาแสดงผล โดยขึ้นอยูกับวา กำลังสนใจขอมูลใดอยู v0.1~alpha-2012.11.07! สิทธิพงษ เหลาโกก
  • 14. บทที่ 4 การแสดงผลขอมูล ! กอนหนานีเราไดทราบแลววา WordPress แบงชนิดขอมูลออกเปนกลุมตางๆ ซึ่งขอมูลที่ถือไดวาเปนหัวใจ ้ สำคัญของ WordPress คือขอมูลประเภท Post ซึ่งเปนขอมูลที่เคลื่อนไหวสูงที่สุดในระบบ ดังนั้นการนำขอมูลเหลานี้ มาแสดงผลจึงถือไดวามีความสำคัญสูงสุดของระบบ ซึ่งกอนที่จะแสดงนั้น แนนอนวาตองสรางขอมูลเหลานี้ขึ้นมากอน 1 2 3 รูปที่ 4.1 Dashboard ! รูปที่ 4.1 คือ Dashboard หรือระบบหลังบานของ WordPress ซึ่งผูใชที่ลงชื่อเขาใชงานมีสิทธิเปนผูดูแล ระบบ (Admin) ซึ่งผูใชคนแรกที่ติดตั้ง WordPress จะไดสิทธินั้นไปโดยอัตโนมัติ ซึ่งสามารถปรับแกสิทธิของผูใชตางๆ ไดภายหลัง ในหนาจอนี้จะมีกลุมเมนูอยู 3 กลุมดวยกัน 1. Admin bar จะปรากฎอยูเสมอหลังจากลงชื่อเขาใชงานแลว ทั้งผูใชปกติและผูดูแลระบบ แตเมนูจะแตกตาง กันไปตามสิทธิการเขาถึงขอมูลและขอมูลที่กำลังแสดงอยูดานลาง 2. Admin menu คือเมนูของผูดูแล ซึ่งก็จะปรับเปลี่ยนไปตามสิทธิการเขาถึงของผูใชเชนกัน ยกตัวอยางเชน ใน กรณีของผูใชทั่วไป หากเขามาในหนานี้จะเห็นเพียงตัวเลือกสำหรับแกไขขอมูลของตนเองเทานั้น 3. Options page คือฟอรมตางๆ สำหรับปรับแตงขอมูลของเว็บไซต การแสดงผลจะขึ้นอยูกับตัวเลือกดานซาย (Admin menu) ที่เลือกอยู เชนในรูปที่ 4.1 เลือกที่ Dashboard Options page ดานซายก็จะมีขอมูลโดย สรุปของเว็บไซตนี้ขึ้นมาให ! โดยเมนูทั้งหมดดานบน WordPress อนุญาตใหนักพัฒนาเพิ่มเมนูเพื่ออำนวยความสะดวกใหผูใชงานได ทั้งหมดเพื่อปรับแตงคาตางๆ ที่อยูภายในธีมหรือปลั๊กอินของตนเอง v0.1~alpha-2012.11.07! สิทธิพงษ เหลาโกก
  • 15. สรางขอมูล ! จากเมนูดานบนภายในหนา Dashboard จะสรางขอมูลไดจาก 2 ตำแหนงดวยกันคือเลือก Post หรือ Page ที่ Admin menu แลวเลือกที่เมนู Adnew New (รูปที่ 4.2 a) อีกวิธีการหนึ่งคือจาก Admin bar เลือก +New จาก นั้นจึงเลือก Post หรือ Page ตามชนิดขอมูลที่ตองการสราง (รูปที่ 4.2 b) (a) (b) รูปที่ 4.2 (a) สรางขอมูลใหมจาก Admin menu รูปที่ 4.2 (b) สรางขอมูลใหมจาก Admin bar ลำดับขอมูลและ URL v0.1~alpha-2012.11.07! สิทธิพงษ เหลาโกก
  • 16. ! ขอมูลที่อยูภายใน WordPress นั้นสามารถจัดเปนหมวดหมู 2 วิธีหลักๆ ดวยกันคือ จัดหมวดหมูดวย Category ซึ่งเปนการจัดการพื้นฐานของ WordPress อยูแลว โดยที่ทุกๆ Post นั้นจำเปนตองอยูในหมวดหมูใดหมวด หมูหนึ่งเสมอ อีกวิธีการหนึ่งคือจัดหมวดหมูดวย Post หรือ Page ดวยกันเอง เชน Page A เปนลูกของ Page B ซึ่ง การจัดหมวดหมูดวยวิธีนี้จะสงผลกระทบโดยตรงไปที่ URL ของ Page B หรือเพจอื่นๆ ที่มาสืบทอดจาก Page A หรือ Page B ตอไป ยกตัวอยางเชน Page A มี slug คือ foo จะได URL ของ Page A เปน http://example.com/foo1 และเมื่อกำหนดให Page B ซึ่งเดิมทีมี URL เปน http://example.com/bar กลายเพจลูกของ Page A ดังนั้น URL ใหมของ Page B จะเปลี่ยนมาเปน http://example.com/foo/bar รูปที่ 4.3 สราง Page ! จากรูปที่ 4.3 เปนการสรางขอมูล Page ใหมขึ้นมา ในภาพ Page นี้ยังไมเผยแพรใหบุคคลทั่วไปเห็น แต จะบันทึกไวในฐานขอมูลเรียบรอยเปนระยะๆ (Auto save) ในภาพจะเห็นตัวหนังสือสีเหลือดานลางคือหัวเรื่อง (Title) ที่เพิ่มเขาไป เรียกวา slug เพื่อนำไปใช กับ URL ซึ่ง WordPress จะสรางใหโดยอัตโนมัติ2 หากตองการแกไขทำได ทันทีดวยการคลิ้กที่ตัวหนังสือสีเหลืองโดยตรงหรือปุม Edit ! ในกรอบ Page Attribute ดานซาย (ในกรณีที่ไมมีใหเลือกที่ Screen Options ดานบนแลวเลือกที่ตัวเลือก ดานบนวาตองการเมนูใดเพิ่มเติมบาง) จะมีตัวเลือก 3 ตัวเลือกไดแก - Parent : เปนตัวเลือกสำหรับกำหนดวาหนาเพจนี้จะเปนเพจลูกของเพจใด ซึ่งคาโดยปริยายคือไมมี (None) แตในกรณีนี้จะเลือกที่ Sample Page (เพจตัวอยางที่สรางขึ้นอัตโนมัติเมื่อติดตั้งเสร็จ) - Template : วิธีการแสดงผลของ Page นี้ โดยตัวเลือกดานในจะขึ้นอยูกับธีมจะสรางรูปแบบใดใหเลือกบาง - Order ลำดับการจัดเรียงในกรณีที่นำเพจนี้ไปสรางเปนตัวเลือกในเมนู แตทายที่สุดแลวผูใชยังเปนผูตัดสินใจ วาเพจใดจะขึ้นกอนหรือหลัง ! ในกรอบเมนู Publish คือสวนที่ใชกำหนดเงื่อนไขในการแสดงผล เชน 1 ในกรณีนี้กำหนดใหรูปแบบลิงกคือ %post_name% 2 รูปแบบของ URL ดานลางนี้จะขึ้นอยูกับรูปแบบ permalink ที่เลือก คาโดยปริยายของ WordPress คือ p=[page_id] v0.1~alpha-2012.11.07! สิทธิพงษ เหลาโกก
  • 17. - Save Draft คือบันทึกฉบับราง จะยังไมปรากฎบนหนาเว็บ - Preview แสดงตัวอยางการแกไข - Status สถานะของขอมูลที่สรางขึ้น มี 3 ตัวเลือกดวยกันคือ Draft, Pending Review และ Published แกไขไดที่ปุม Edit ดานขวา จะมีเมนูยอยขึ้นมาเปนตัวเลือกจากนั้นกดปุม OK เพื่อบันทึก หรือ Cancel เพื่อยกเลิกการแกไข - Visibility ใชกำหนดวาขอมูลที่สรางขึ้นจะมีการแสดงผลในรูปแบบใด - Public แสดงผลขอมูลทั้งหมด - Password protected แสดงผลบนหนาเพจ แตตองใสรหัสผานกอนแสดงเนื้อความดานใน - Private ไมแสดงบนหนาเว็บ ยกเวนผูสรางขอมูล - Published on สำหรับกำหนดวันที่และเวลาที่ตองการใหขอมูลแสดงผลบนหนาเว็บ สามารถตั้งเวลาไวลวง หนาได ! เมื่อกดบันทึกขอมูล (Publish) ในภาพที่ 4.3 จะมีกรอบสีเหลืองแจงขอมูลใหทราบวาบันทึกขอมูลเรียบรอย แลวและตัวอยาง URL ของเพจนนี้จะเปลี่ยนเปน http://localhost/wordpress/sample-page/lorem-ipsum- dolor/ The Loop ! บทบาทสำคัญของธีมก็คือการนำเอาขอมูลที่มีอยูมาแสดงผลในตำแหนงที่จัดวางไวดวยรูปแบบหรือหนาตาที่ ออกแบบมาไวเรียบรอยแลว หรือเพิ่มความสามารถในการแสดงผลขอมูล เชน เพิ่มชองทางการแชรไปยัง Social Network ตางๆ แสดงผลเพื่อคนพิการ หรือแปลงขอมูลที่กำลังแสดงอยูนี้เปนไฟลอื่นๆ ที่ผูใชตองการ (ตามตัวเลือกที่ นักพัฒนากำหนด) เปนตน เพื่อเปนการอำนวยความสะดวกใหกับนักพัฒนา WordPress จึงใหฟงกชันที่สามารถอาน ขอมูลออกมา โดยไมจำเปนตองใชคำสั่ง SQL เลย The Loop ในความหมายของ WordPress จึงหมายถึง กลุมของ โคดที่นำเอาขอมูล (Post, Tag, Commet) มาแสดงผล ไมวาจะเปนการแสดงผลเพียงรายการเดียวหรือตามจำนวนที่ ตองการก็ตามที่ผูใชกำหนดไว ตัวอยางที่ 4.1 The Loop ! โคดดานบนคือ The Loop หรือกลุมขอมูลที่ใชสำหรับแสดงผลขอมูลที่สนใจ เนื่องจากหากไปวางไวในไฟล index.php (ในกรณีที่ไฟลอื่นๆ ตามครบตามโครงสรางของธีมแลว) The Loop จะแสดงผล Post ออกมาโดยเรียง ตามวันที่อัพเดตจากใหมที่สุดไปหาเกาที่สุด ดวยจำนวนที่กำหนดไว หากแตถานำโคดนี้ไปวางไวที่ไฟล single.php ก็ จะแสดงขอมูลออกมาเพียงขอมูลเดียวเทานั้น และเชนเดียวกันหากนำโคดนี้ไปวางไวที่ไฟล search.php (ใชสำหรับ post ที่ไดจากการคนหา) ก็แสดง Post ที่มีขอมูลตรงกับที่ผูใชระบุในคำคนหาเขามา ! เพื่อใหเห็นภาพที่เขาใจไดงายยิ่งขึ้น จะอธิบาย The Loop ในกรณีที่วางไวหนาแรกของเพจ (index.php) 1 <?php if ( have_posts() ) : ?> 2 <section id=”my-content”> 3 <?php while( have_posts() ) : the_post() ?> 4 <article id=”post-id-<?php the_ID() ?>”> 5 <header> 6 <h1> 7 <a href=”<?php the_permalink() ?>” 8 title=”<?php the_title() ?>” 9 class=”my-permalink” id=”> 10 <?php the_title() ?> เพื่อแสดงขอมูล Post ลาสุดออกมา v0.1~alpha-2012.11.07! สิทธิพงษ เหลาโกก
  • 18. 11 </a> 12 </h1> 13 <small> 14 <?php the_date() ?> 15 at <?php the_time() ?> 16 </small> 17 </header> 18 19 <?php the_content(); ?> 20 21 <footer> 22 <?php if ( has_category() ) : ?> 23 Categories: <?php the_category() ?> 24 <?php endif; ?> 25 <?php if ( has_tag() ) : ?> 26 Tags: <?php the_tags() ?> 27 <?php endif; ?> 28 </footer> 29 </article> 30 <?php endwhile; ?> 31 </section> 32 <?php endif; 1 2 3 บรรทัดที่ คำอธิบาย 1 ใชตรวจสอบวามี post ที่ตองนำมาแสดงอยูหรือไม ดวยฟงกชัน have_posts() - true - มี - false - ไมมี 3 เขา while...loop เพื่อนำ post ออกมาแสดง โดยใช have_posts() ตรวจสอบวายังมี post ที่ตองนำ มาแสดงเหลืออยูอีกหรือไม หลังจากนั้นจะใชฟงกชัน the_post() ดึง post ถัดไป (หรือ post แรก) ออกมาแสดง หากไมใช the_post ภายใน loop นี้ ก็จะกลายเปน infinite loop v0.1~alpha-2012.11.07! สิทธิพงษ เหลาโกก
  • 19. บรรทัดที่ คำอธิบาย 4~30 สวนแสดงผลขอมูลโดยตำแหนงตางๆ นั้นจะขึ้นอยูกับการจัดวางของนักออกแบบ ซึ่งขอมูลที่แสดงนั้น จะไดมาจากฟงกชันตางๆ ไดแก - the_ID : สำหรับนำรหัสของขอมูลนั้นมาแสดง - the_permalink : แสดงลิงกของขอมูล - the_title : แสดงชื่อขอมูล - the_date, the_time : แสดงวันและเวลาที่สรางขอมูลนี้ตามลำดับดวยรูปแบบที่กำหนดไวแลว - the_content : แสดงเนื้อความของขอมูลปจจุบัน - has_category : ใชตรวจสอบวาขอมูลนี้ผูใชกำหนดกลุม (category) ใหหรือไม ซึ่ง WordPress จะ บังคับใหทุกขอมูลตองอยูในภายในกลุมใดกลุมหนึ่งอยางนอย 1 กลุม - the_category : แสดงรายการของกลุมที่ขอมูลนั้นถูกจัดไว ซึ่งเปนขอมูลที่จัดรูปแบบไวแลว (อยู ภายใน <ul> และมีลิงกไปยังกลุมขอมูลนั้นครอบขอมูล) - has_tag : ใชสำหรับตรวจสอบวาขอมูลดังกลาวมี tag กำกับอยูหรือไม - the_tags : แสดงรายการของปายกำกับออกมาทั้งหมดเชนเดียวกันกับ the_category ! ภายใน WordPress จะมีฟงกชันที่ทำหนาที่สำหรับแสดงผลขอมูล โดยทำหนาที่ครอบ Object ตางๆ เอาไว อีกที ซึ่ง WordPress จะเรียกฟงกชันเหลานี้วา Tags จากดานบน (บรรทัดที่ 4~30 ของตัวอยางที่ 4.1) จะมี Tags 2 กลุมดวยกันคือ Template Tags 3 ทำหนาที่แสดงผลขอมูล ไดแก the_ID, the_permalink, the_title, the_date, the_time, the_content, the_category, the_tags และ Conditional Tags สำหรับใชตรวจสอบเงื่อนไขตางๆ สนใจ ในที่นี้คือ has_category และ has_tag ! ลักษณะพิเศษของฟงกชันใน WordPress คือพารามิเตอรของฟงกชันสวนใหญจะเปนแบบ Optional เมื่อไม ระบุคาใหก็จะนำคาที่เปน Global ออกมาประมวลผลเลยทันที เชน the_ID จะนำหมายเลข ID ของ $post (Object ที่เก็บคา Post ปจจุบันออกมา) หรือ has_tag ในตัวอยางดานบนจะหมายถึงการตรวจสอบวา Post ที่กำลังแสดงผล นั้นมี Tag อยูหรือไม ซึ่งการใชงานในลักษณะนี้จะทำงานไดเพียงแคภายใน The Loop เทานั้น ดึงขอมูล post ออกมาแสดงดวยเงื่อนไขที่ตองการ ! การแสดงผลขอมูลนั้น ในบางกรณีนักพัฒนาจำเปนดึงขอมูลดวยเงื่อนไขพิเศษนอกเหนือจากที่ WordPress สรางใหโดยอัตโนมัติแลว นักพัฒนาก็ยังดึงขอมูลที่ตองการขึ้นมาแสดงไดตามเงื่อนไข ซึ่งการดึงขอมูลออกมาแสดงนั้น สามารถทำได 2 วิธีดวยกัน คือ 1. สราง Object ของคลาส WP_Query 2. ใชฟงกชัน query_posts ! ซึ่งทั้ง 2 วิธีนี้ทายที่สุดแลวก็จะใชเปนการใชงานผานคลาส WP_Query เหมือนกัน แตกตางกันที่ WP_Query นั้นจะสราง Instance ของ WP_Query ขึ้นมากี่ Instance ก็ไดแลวนำไป Iterate ดวย the_post เพื่อนำมาแสดง 3 Template Tags สวนใหญจะมี 2 ฟงกชันที่ทำหนาที่คลายกัน เชน the_ID จะมี get_the_ID ที่คืนหมายเลขของขอมูลนั้นออกมาเหมือนกัน แตตางกันตรง ที่ the_ID จะคืนคาออกมาในลักษณะของการ echo ดังนั้นจึงไมจำเปนตองใช echo นำหนา the_ID สวน get_the_ID นั้นจะคืนคาออกมาดวยการ return ทำใหตองใช echo นำหนาเพื่อแสดงผลขอมูล ดังนั้น get_the_ID จึงเหมาะกับการที่จะตองนำเอาขอมูลไปใชตอ สวน the_ID นั้นเหมาะสำหรับการนำเอา คาที่ไดไปใชงานเลยทันที v0.1~alpha-2012.11.07! สิทธิพงษ เหลาโกก
  • 20. ขอมูลภายหลังทีละ Instance แตสำหรับการใชงาน query_posts จะนำขอมูลที่ไดนั้นไปใสไวในตัวแปรแบบ Global ดังนั้นจะทำไดครั้งละ 1 เงื่อนไขเทานั้น ซึ่งหลังจากการใชงานทั้ง 2 วิธีนี้สิ่งที่จำเปนที่สุดคือตองใชฟงกชัน wp_reset_query เพื่อคืนคาในตัวแปร Global ตางๆ ใหเปนคา default และเพื่อไมใหสงผลกระทบตอการดึงขอมูล ในสวนอื่นๆ วิธีการการระบุเงื่อนไขสำหรับดึงขอมูลออกมาแสดงนั้นจะแบงเปน 2 แบบดวยกันคือ - ระบุเงื่อนไขดวยขอความแบบ Query String แบบเดียวกับใน URL - ระบุเงื่อนไขดวย Associative Array โดยที่คียของอารเรยจะเปนคาที่ WordPress กำหนดไวแลว ! ซึ่งการระบุเงื่อนไขทั้ง 2 นี้สามารถใชไดกับทั้ง WP_Query และ query_posts ตัวอยางที่ 1: แสดงขอมูลที่มีชนิด (Post Type) เปนสินคา (product) ขึ้นมาแบบสุม <?php $products = new WP_Query(“orderby=rand&post_type=product”); ตัวอยางที่ 2: ตองการดึงขอมูลที่มีชนิด (Post Type) เปนสินคา (product) ขึ้นมาแสดง โดยเรียงตามจำนวนยอดขาย (postmeta key = ns_product_sold) จากมากไปหานอย โดยยังมีสินคาอยูในคลัง (ns_product_amount ไมเปน 0) และยอดรีวิวโดยผูใชเฉลี่ย (ns_average_user_review) แลวมากกวาหรือเทากับ 3.5 ในกรณีที่มีขอมูลตรงตาม เงื่อนไขจำนวนมาก ใหแบงการแสดงผลออกเปนหนา หนาละ 5 รายการ <?php query_posts(array( ‘post_type‘ => ‘product’, ‘meta_key‘ => ‘ns_product_sold’, ‘orderby‘ => ‘meta_value_num’,, ‘order‘ => ‘desc’, ‘posts_per_page’ => 5, ‘meta_query‘ => array( ‘relate‘ => ‘AND’, array( ‘meta‘ => ‘ns_product_amount’, ‘value‘ => ‘0’, ‘compare’ => ‘>’ ), array( ‘meta‘ => ‘ns_average_user_review’, ‘value‘ => ‘3.5’, ‘compare’ => ‘>=’ ) ) จากทั้ง 3 ตัวอยางดานบน หากเลือกใชวิธีการสราง Instance จาก WP_Query ใหใช $products->have_posts() เพื่อตรวจสอบวามี post ที่ตรงตามเงื่อนไขที่ระบุหรือไม หลังจากนั้นจึงใช $products->the_post() เพื่อดึงขอมูล ออกมาหลังจากนั้นก็ใช Template Tags ไดตามปกติ v0.1~alpha-2012.11.07! สิทธิพงษ เหลาโกก
  • 21. บทที่ 5 Actions & Filters ! ลำดับการทำงานของฟงกชันที่พัฒนาขึ้นนั้นมีความสำคัญมาก การนำเอาฟงกชันที่พัฒนาขึ้นในธีมหรือ ปลั๊กอินไปแทรกสอดในแกน (Core) ของระบบ (WordPress) นั้นยอมไมใชเรื่องดีแนนอน เพราะเมื่อระบบหลักมีการ แกไขเพิ่มเติมเชนปรับเวอรชั่น ยอมสงผลกระทบกับโคดที่เราไดแกไขโดยตรงเขาไปไมมากก็นอย ดังนั้นเพื่อลดการ เชื่อมโยงกันระหวางสิ่งที่นักพัฒนาไดสรางขึ้นมาและระบบหลักของ WordPress (Loose Coupling) จึงมีกลไกที่ชวย อำนวยความสะดวกใหกับนักพัฒนามีอิสระที่จะกำหนดวาฟงกชันที่พัฒนาขึ้นนี้จะทำงานในตำแหนงหรือเงื่อนไขใด เรียกวา Action4 และ Filter5 ! Actions คือ ชื่อกลุมพฤติกรรมที่จะเกิดขึ้นระหวางการทำงานอยางใดอยางหนึ่งของ WordPress เชน ระหวางการสรางหนาเว็บเพจ ระหวางที่ผูใชลงชื่อเขาใชงาน หรือระหวางการคนหาขอมูลเปนตน ! Filters คือ ชื่อของตัวกรองขอมูลโดยรับขอมูลจาก WordPress และคืนคาขอมูลที่ประมวลผลเรียบรอยแลว ออกไป ! วิธีการใชงาน Actions และ Filters นั้นแบงเปน 2 วิธีคือ ใช Actions และ Filters ที่ WordPress สรางให อยูแลว และใช Actions หรือ Filters ที่สรางขึ้นมาเอง ซึ่งวิธีการใชงานจะคลายกันคือ ระบุ Actions หรือ Filters ที่ ตองการ จากนั้นจึงระบุฟงกชันที่สรางขึ้นเพื่อทำงานเมื่อมี Actions หรือ Filters นั้นเกิดขึ้น ผานฟงกชัน add_action หรือ add_filter พฤติกรรมนี้เรียกวา Hook Actions in Action ! สำหรับการทำงานของ Actions นั้นจะใชฟงกชัน add_action ซึ่งฟงกชันนี้ตองการพารามิเตอร - $tag (string - required) ชื่อ Actions ที่ตองการ hook - $function_to_add (string - required) ชื่อฟงกชันที่ตองการแนบไปกับการทำงานของ Actions - $priority (int - optional) ใชระบุน้ำหนักการทำงานของ $function_to_add คาโดยปริยายนั้นจะมีคา เปน 10 หากกำหนดคานอยลงไปกวานี้ $function_to_add จะถูกเรียกขึ้นมาประมวลผลกอน - $accepted_args (int - optional) ใชระบุจำนวนอารกิวเมนตที่ตองการคาโดยปริยายคือ 1 ตัวอยางที่ 1: ตองการกำหนดคาเริ่มตนตางๆ เชน หมายเลขเวอรชั่นของธีม คาคงที่ตางๆ หลังจากเปดใชธีม (Activate) <?php // functions.php add_action( ‘after_setup_theme’, ‘li_setup_theme’); 4 ตรวจสอบรายการ Actions ทั้งหมดไดจาก http://codex.wordpress.org/Plugin_API/Action_Reference โดยขอมูลในหนาเพจจะเรียงตามลำดับการ เกิด 5 ตรวจสอบรายการ Filters ทั้งหมดไดจาก http://codex.wordpress.org/Plugin_API/Filter_Reference v0.1~alpha-2012.11.07! สิทธิพงษ เหลาโกก
  • 22. function li_setup_theme() { if ( ! get_option( ‘li_theme_name’ ) ) update_option( ‘li_theme_name’, ‘Lorem ipsum’ ); if ( ! get_option( ‘li_theme_version’ ) ) update_option( ‘li_theme_version’, ‘0.1~alpha’ ); } ! โคดดานบนจะเปนการ hook เอา Actions ที่ชื่อวา ‘after_theme_setup’ ที่จะทำงานครั้งแรกครั้งเดียว หลังจากกด activate ธีม เขากับฟงกชันชื่อ li_setup_theme ภายในฟงกชัน li_setup_theme จะตรวจสอบวามี คา li_theme_name และ li_theme_version กำหนดคาไวแลวหรือยังดวยฟงกชัน get_option ตามดวยชื่อของ คา (หรือคีย) ที่ตองการ ในกรณีที่ยังไมมีการกำหนดคาไวในระบบฟงกชันจะคืนคาเปน null จากนั้นจึงใชฟงกชัน update_option เพื่อกำหนดคาให WordPress ตัวอยางที่ 2: ตองการเพิ่มจาวาสคริปตใหกับ WordPress <?php // functions.php add_action( ‘wp_enqueue_scripts’, ‘li_add_more_scripts’ ); function li_add_more_scripts() { wp_enqueue_script( ‘li-main-js’, get_template_direcoty_uri() . ‘/js/li-main.js’, array( ‘jquery’, ‘li-prepare’ ), ‘2.1’, true ); } ! โคดดานบนใชเพิ่มจาวาสคริปตใหกับ WordPress ดวยฟงกชัน wp_enqueue_script โดยกำหนด id ให สคริปตนี้วา li-main-js ระบุตำแหนงที่เก็บของไฟลจาวาสคริปตนี้ดวยการเรียกมาจากฟงกชัน get_template_directory_uri เพื่อรับคาไดเรคทอรี่ปจจุบันของธีม กำหนดเงื่อนไขใหสคริปตนี้นำเขามาในระบบให นำเขามาถัดจาก jquery (id ของ jQuery) และ li-prepare กำหนดเวอรชั่นของ li-main-js เปน 2.1 และใหใส สคริปตนี้ที่ดานลางสุดของเพจ ! ! ในกรณีที่ตองการสรางกลุมของ Actions นั้นก็สามารถทำไดเองเชนกัน ตัวอยางที่ 3: ตองแสดงคาจำนวนสินคาที่เหลืออยู จำนวนที่สินคาที่เหลือ และยอดรีวิวของลูกคาโดยเฉลี่ยไวทายสุด ของหนาแสดงรายละเอียดสินคา // single.php ... <?php do_action( ‘li_more_product_detials’ ); ?> ... v0.1~alpha-2012.11.07! สิทธิพงษ เหลาโกก
  • 23. <?php // functions.php add_action( ‘li_more_product_details’, ‘li_display_product_sold’, ); function li_display_product_sold() { global $post; if ( ! is_single( $post->ID ) ) return ; printf( ‘Product remain: %d’, get_post_meta( $post->ID, ‘ns_product_amount’, true ), ); } add_action( ‘li_more_product_details’, ‘li_average_user_review’ ); function li_average_user_review() { global $post; if ( ! is_single( $post->ID ) ) return ; printf( ‘Review: %d’, get_post_meta( $post->ID, ‘ns_average_user_review’, true ), ); } add_action( ‘li_more_product_details’, ‘li_display_product_remain’, 4 ); function li_display_product_remain() { global $post; if ( ! is_single( $post->ID ) ) return ; // do something } ! ขอดีของวิธีการนี้คือ ถึงแมจะมีการแกไขหรือลบฟงกชัน li_display_product_remain, li_display_product_sold หรือ li_average_user_review ก็ไมมีขอผิดพลาดเกิดขึ้นในไฟล single.php ลำดับการ ทำงานจะเปน li_display_product_remain เริ่มตนทำงานอันดับแรก เนื่องจากระบุลำดับความสำคัญไวที่ 4 (เปน คาอื่นที่นอยกวา 10 ก็ได) หลังจากนั้นคือ li_display_product_sold และ li_average_user_review เพราะทั้ง 2 นี้ไมไดกำหนดคาความสำคัญจึงใชลำดับการประกาศกอนหลังในการประกาศแทน Filters in Action ! เชนเดียวกันกับการใช Actions วิธีการใช Filters นั้นก็ตองแนบฟงกชันที่พัฒนาขึ้นเขาไปกับ Filters หลักของ WordPress หรือสราง Filters ขึ้นมาใชเองก็ไดเชนเดียวกัน การใชงานนั้นเริ่มตน hook เอา Filter ของ WordPress มาใชงานดวยฟงกชัน add_filter ตามดวยชื่อ Filters ที่ตองการและชื่อฟงกชันที่พัฒนาขึ้นมา แตการใช Filters นั้น จะแตกตางจาก Actions อยางหนึ่งคือฟงกชันที่ใชงานรวมกับ Filters นั้นจำเปนตองรับคาเขามา จากนั้นจึงนำคาที่ได มาประมวลผลแลวคืนออกไปให WordPress นำคานั้นสงใหฟงกชันอื่นประมวลผลตอหรือนำไปแสดงบนหนาเพจ v0.1~alpha-2012.11.07! สิทธิพงษ เหลาโกก
  • 24. ตัวอยางที่ 4: ตองการเปลี่ยนใหตัวหนังสือที่หัวเรื่อง (Title) เปนสีแดง จะไดวา <?php // functions.php add_filter( ‘the_title’, ‘li_change_title_color ); add_filter( ‘get_the_title’, ‘li_change_title_color’ ); function li_change_title_color( $the_title ) { return sprintf( ‘<span style=”color:red!important;”>%s</span>’, $the_title ); } ! จากตัวอยางที่ 4 นั้นจะเปนการ hook เอา Filters มา 2 ฟลดเตอรดวยกัน ไดแค the_title และ get_the_title เนื่องจากทั้ง 2 ฟงกชันนี้สามารถดึงเอาหัวเรื่อง (Title) ของขอมูลมาแสดงผลไดเชนเดียวกัน โดยใช ฟงกชัน li_change_title_color มาประมวลผล ซึ่ง WordPress จะใสคาหัวเรื่องของขอมูลนั้นมาใหอัตโนมัติ ฟงกชั่น ดานบนคือการนำเอา $the_title ที่ไดรับมาครอบดวย <span> และเปลี่ยนเปนสีแดงจากนั้นจึงคืนคาใหกับ WordPress ตัวอยางที่ 5: ตองการเพิ่มเมธอดของ XML-RPC เว็บเซอรวิส <?php // functions.php add_filter( ‘xmlrpc_methods’, ‘li_xmlrpc_methods_register ); function li_xmlrpc_methods_register( $methods ) { $methods[‘li.hello’] = ‘li_say_hello’; return $methods; } function li_say_hello() { $var = @$_POST[‘foo’]; return “hello {$var}”; } ! จากตัวอยางดานบนจะ hook เอา Filters ที่ชื่อวา xmlrpc_methods และแนบเอาฟงกชั่น li_xmlrpc_methods_register เอาไป เพื่อลงทะเบียนเมธอดตางๆ เขาไป ในที่นี้จะลงทะเบียน li.hello เขาไป โดย ใชฟงกชั่น li_say_hello เขามาทำงาน ซึ่งในฟงกชั่น li_say_hello นั้นจะรับคาตัวแปร foo ที่สงมาดวยวิธี POST และคือคาไปดวย hello และตอทายดวย คาที่สงมา v0.1~alpha-2012.11.07! สิทธิพงษ เหลาโกก
  • 25. อภิธานศัพท ID ! ตัวเลขสำหรับบงชี้ post, page, tag, category Post ! บทความ ที่ผูใชสรางขึ้นมา ซึ่งจะเพิ่มจำนวนขึ้นเรื่อยๆ Page ! หนาสำหรับแสดงขอมูลที่คอนขางคงที่ ไมคอยมีความเคลื่อนไหว เชน หนาเพจหรับแสดงขอมูลการติดตอ หนาเพจสำหรับแสดงแบบสอบถาม เปนตน Slug ! คำที่สามารถอธิบายขอมูลนั้น ซึ่ง slug ที่ดีจะเปนภาษาอังกฤษ ในกรณีที่เลือกรูปแบบ URL เปน clean url ซึ่ง slug นี้ WordPress จะสรางใหอัตโนมัติในโดยเอา title ของ post หรือ page นั้นมาใสให หากซ้ำกับที่มีอยูแลว จะตอทายดวยตัวเลข แตผูใชก็สามารถที่จะกำหนด slug นี้ขึ้นมาเองได Page Slug, Post Slug ! คำสั้นๆ ที่สามารถอธิบาย post หรือเพจนั้น Post Type ! ประเภทของ Post นั้น เชน post, page, attachment, revision นอกจากนั้นแลวนักพัฒนายังสามารถสราง Post Type ขึ้นมาไดเอง เชน store, product, album, movie เปนตน Custom Post Type ! ประเภทของ Post (Post Type) ของเอกสารที่นักพัฒนาสรางขึ้นมา เชน movie, product, book เปนตน นอกจากนั้นยังสามารถกำหนดคุณสมบัติตางๆ เชน จะรองรับภาพตัวแทนหรือไม สามารถกำหนดแผนปายและจัด กลุมไดหรือไม v0.1~alpha-2012.11.07! สิทธิพงษ เหลาโกก