WordPress

คำถาม & คำตอบสำหรับนักพัฒนา WordPress และผู้ดูแลระบบ

3
เพิ่มชื่อคลาสเพื่อโพสต์ภาพขนาดย่อ
ฉันใช้รูปขนาดย่อโพสต์เพื่อเชื่อมโยงไปยังหน้า เป็นไปได้หรือไม่ที่จะเพิ่มชื่อคลาสลงในรูปภาพขนาดย่อของโพสต์ <li><a href="<?php the_permalink(); ?>" ><?php the_post_thumbnail(); ?></a></li>

2
การรีเซ็ตข้อมูลโพสต์เป็นลูปก่อนหน้าในลูปซ้อนกัน
ฉันพยายามใช้ลูปซ้อนกับโพสต์ไปยังปลั๊กอินโพสต์ ลูปทั้งสองทำงาน แต่ปัญหาเกิดขึ้นหลังจากวนซ้ำที่สอง ($ issue) ฉันต้องการเข้าถึงลูปการประกาศ $ อีกครั้ง แต่ข้อมูลยังคงเป็นข้อมูล $ Issue wp_reset_query() จะรีเซ็ตกลับไปที่ลูปหลักใน single.php ซึ่งฉันไม่ต้องการ ฉันสามารถใช้get_posts()แทน WP_Query ใหม่ get_template_part()แต่ฉันต้องการที่จะสามารถที่จะใช้ ฉันจะรีเซ็ตข้อมูลของฉันกลับไปที่ลูปสิ่งพิมพ์เพื่อให้ 'ชื่อสิ่งพิมพ์' ที่สองส่งคืนสิ่งพิมพ์ไม่ใช่ปัญหาชื่อได้อย่างไร นี่คือรหัสของฉันภายใน single.php: $publication = new WP_Query( array( 'connected_type' => 'publication_to_post', 'connected_items' => $post->ID, 'fields' => 'ids', 'posts_per_page' => 1, ) ); if ( $publication->have_posts() ) { while ( …
21 wp-query  loop  reset 

2
การเพิ่มสไตล์ชีทที่กำหนดเองไปที่ wp-admin
ฉันมีปัญหาในการทำให้สไตล์ชีทที่กำหนดเองของฉันทำงานในพื้นที่ WP-ADMIN plugins_url('style.css', __FILE__) );ฉันต้องสร้างโฟลเดอร์ในปลั๊กอินของฉันชื่อ css หรือฉันจะคัดลอก.cssไปยังwp-admin/cssไดเรกทอรีหรือไม่ ฉันลองทั้งสองอย่างดูเหมือนจะไม่เหมาะกับฉัน และค่าใดที่ควรแทนที่ด้วย__FILE__? ขอโทษฉันยังใหม่กับสิ่งเหล่านี้ /*ADDS STYLESHEET ON WP-ADMIN*/ add_action( 'admin_enqueue_scripts', 'safely_add_stylesheet_to_admin' ); function safely_add_stylesheet_to_admin() { wp_enqueue_style( 'prefix-style', plugins_url('style.css', __FILE__) ); } /*ADDS MY CUSTOM NAVIGATION BAR ON WP-ADMIN*/ add_action('admin_head', 'custom_nav'); function custom_nav(){ include('custom_nav.html'); }
21 wp-admin  css 

3
ฉันจะแสดงข้อมูลจากแบบฟอร์มแรงโน้มถ่วงในแม่แบบของฉันได้อย่างไร [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ WordPress Development Stack Exchange ปิดให้บริการใน5 ปีที่ผ่านมา คำนำ ฉันได้ติดตั้งฟอร์มแรงโน้มถ่วงสร้างแบบฟอร์มแล้วและผู้ใช้กำลังส่งข้อมูลไปยังเว็บไซต์ของฉัน สิ่งที่ฉันต้องการทำคือการแสดงข้อมูลที่ผู้ใช้กำลังส่งไปยังเว็บไซต์ของฉันในหน้าใดหน้าหนึ่งของฉัน ฉันรู้ว่ามีปลั๊กอินของไดเรกทอรีฟอร์มแรงโน้มถ่วง แต่นี่เป็นเพียงการนำเสนอข้อมูลที่แน่นอน คำถาม มีรูปแบบแรงโน้มถ่วงที่สามารถทำสิ่งนี้ได้หรือไม่? (รหัสเทียม) : <?php gforms_get_field( $form_id, $entry_id, 'user_name_field' ); ?>


4
จำกัด การเปลี่ยนเส้นทางหน้าเป็น 404
มีวิธีแสดงหน้า 404 หรือไม่หากผู้ใช้ที่ล็อกอินปัจจุบันไม่มีช่องว่างด้านขวาเพื่อดูหน้า? ฉันกำลังมองหาวิธี PHP สิ่งที่ชอบ if( !current_user_can('administrator') ) { show_404(); exit(); } ฉันคิดว่าจะใช้การเปลี่ยนเส้นทาง แต่ฉันต้องการเก็บ URL ไว้เหมือนเดิม

3
ฉันจะเพิ่มฟิลด์ในโปรไฟล์ผู้ใช้ได้อย่างไร ตัวอย่างเช่นประเทศอายุเป็นต้น
ฉันไม่ค่อยดีกับคอมพิวเตอร์ / รหัส ฯลฯ ฉันใช้ปลั๊กอินที่ทำให้แบบฟอร์มการลงทะเบียนน่าเบื่อและในรูปแบบนั้นฉันได้เพิ่มประเทศกลุ่มอายุเพศและอื่น ๆ ฉันคลิกตัวเลือกที่จะเพิ่มผู้ลงทะเบียนลงในผู้ใช้ wordpress thingy แต่เมื่อฉันลองใช้จะมีเพียงชื่อผู้ใช้และอีเมลแสดงในส่วนผู้ใช้ในส่วนแบ็กเอนด์ .. มีวิธีให้ฟิลด์อื่นแสดงในส่วนผู้ใช้หรือไม่ ฉันต้องการให้พวกเขาแสดงเพื่อใช้ในเชิงสถิติ
21 users 

1
Apply_filters ('the_content', $ content) vs do_shortcode ($ content)
ให้บอกว่าฉันมีตัวเลือกชุดรูปแบบหรือพื้นที่ข้อความ postmeta ที่กำหนดเอง ตอนนี้ฉันต้องการเรียกใช้รหัสย่อหลายข้อความทั่วไปรูปภาพ ฯลฯ อะไรจะเป็นแนวปฏิบัติที่ดีที่สุดและทำไม ตัวเลือกที่ 1: $content = //my text area data; echo apply_filters('the_content', $content); ตัวเลือก 2: $content = //my text area data; echo do_shortcode($content); โปรดอธิบายให้ฉันฟังว่าจะใช้วิธีใดดีที่สุดและทำไม แก้ไข ให้ฉันอธิบายสถานการณ์โดยละเอียด ฉันพัฒนาธีมสำหรับลูกค้าตามความต้องการของพวกเขา บางครั้งฉันต้องเพิ่มเมตาโพสต์ในโพสต์ / หน้า / ประเภทโพสต์ที่กำหนดเองเพื่อให้พวกเขาสามารถเพิ่มรหัสย่อ (ตัวเลื่อนรูปแบบการติดต่อ ฯลฯ ) หรือเพียงแค่ข้อความธรรมดา มันเป็นข้อความที่ยื่น เพื่อให้การทำงานรหัสที่ฉันใช้ตัวเลือกที่ 1 do_shortcodeตอนนี้ผมได้ยินจากคนที่ว่านี้เป็นวิธีที่ผิดและฉันควรใช้ แต่พวกเขาไม่ได้ให้คำอธิบายแก่ฉันว่าทำไมมันถึงผิด นั่นเป็นเหตุผลที่ฉันถาม กระบวนการทั้งหมดนี้สามารถทำได้ในตัวแก้ไขข้อความเริ่มต้นของ wp แต่ฉันต้องสร้างตัวเลือกเหล่านั้นสำหรับการใช้งานเฉพาะเทมเพลตนั่นคือสิ่งที่ลูกค้าของฉันต้องการ

1
ฉันจะอัปเดตไปยังไซต์บนสำเนาการพัฒนา แต่จากนั้นย้ายการอัปเดตกลับโดยไม่แทนที่ฐานข้อมูลที่มีการพัฒนาของไซต์สดได้
ฉันพยายามที่จะอธิบายในชื่อเรื่องให้ได้มากที่สุดและฉันรู้ว่าคำถามนี้ถูกถามมาก่อนในรูปแบบต่าง ๆ แต่ฉันไม่สามารถหาคำตอบที่ดีได้และมันคือการจินตนาการว่าไม่มีใครแก้ปัญหานี้ได้ มันง่ายเมื่อไซต์ WP ใช้งานจริงถ้าไม่ใช่แบบคงที่มันจะทำการอัปเดตฐานข้อมูลโดยเพิ่มโพสต์ใหม่คำสั่งซื้อ woocommerce ใหม่บัญชีผู้ใช้ใหม่ ฯลฯ ' ถ้าฉันต้องการทำการเปลี่ยนแปลงที่สำคัญบางอย่างและอัปเดตในไซต์วิธีที่ง่ายที่สุดและง่ายที่สุดคือการคัดลอกไปยังการติดตั้งในท้องถิ่นหรือโดเมนการพัฒนาอื่นและทำการเปลี่ยนแปลงทั้งหมดที่นั่น เมื่อการเปลี่ยนแปลงทั้งหมดเสร็จสิ้นฉันต้องการคัดลอกกลับไปยังไซต์สด หากการเปลี่ยนแปลงนั้นมีเฉพาะไฟล์เช่นชุดรูปแบบและ css นั่นค่อนข้างง่าย อย่างไรก็ตามหากการเปลี่ยนแปลงนั้นเกี่ยวข้องกับการเปลี่ยนแปลงในฐานข้อมูลเช่นการเพิ่มปลั๊กอินใหม่และการเพิ่มเนื้อหาที่เชื่อมต่อ / เกี่ยวข้องกับปลั๊กอินเหล่านี้ดังนั้นฉันจะไม่สามารถคัดลอกไซต์กลับมาได้อีกต่อไปเพราะจะเป็นการแทนที่การเปลี่ยนแปลงใหม่ ๆ ฐานข้อมูลของเว็บไซต์ โพสต์ใหม่ทั้งหมดคำสั่งซื้อใหม่การอัพโหลดรูปภาพใหม่ทั้งหมดจะถูกลบ ตอนนี้ฉันรู้แล้วว่าสถานการณ์กรณีและปัญหาที่แตกต่างกันมีวิธีแก้ไขปัญหาที่แตกต่างกัน ตัวอย่างเช่นหากการเปลี่ยนแปลงเพียงอย่างเดียวที่เกิดขึ้นกับไซต์สดคือโพสต์ใหม่ฉันสามารถส่งออกและนำเข้าโพสต์ไปยังไซต์ dev แล้วย้ายทั้งไซต์ไป เหมือนกันกับของอื่น ๆ แต่ไม่ใช่ของทุกอย่าง และปัญหาอื่น ๆ ของเรื่องนี้ก็คือฟังก์ชั่นการส่งออกและนำเข้าใน WordPress เป็นสุดซึ้ง มันเป็นพื้นฐานและคุณมีตัวเลือกน้อยมากในการเลือกและส่งออกเฉพาะรายการ ฉันอาจลองใช้ปลั๊กอิน "นำเข้า / ส่งออกขั้นสูง" ทุกครั้งที่มีอยู่และยังไม่มีวิธีแก้ไขปัญหานี้ ดังนั้นในเธรดอื่นบางคนชี้ให้เห็นปลั๊กอินนี้โดยทั่วไปจะติดตั้งและทำงานบนธีมบนไซต์สดในขณะที่ผู้ใช้ทั่วไปยังคงเห็นธีมที่มีอยู่ แต่ก็ยังไม่สามารถแก้ไขการเปลี่ยนแปลงได้ทุกประเภท เพราะถ้าคุณต้องการเปลี่ยนแปลงเนื้อหาสมมติว่าส่วนท้ายหรือเมนู nav มันเป็นสิ่งที่จะยังคงสะท้อนอยู่ในชุดรูปแบบ / ไซต์ที่สามารถดูได้ที่มีอยู่และอาจดูโอเคกับชุดทดสอบใหม่ แต่ไม่ใช่รายการสด ไม่มีวิธีในการพัฒนา "สาขา" ของไซต์บนไซต์ …

1
ด้วย Rest V2 (WP4.7) วิธีใดที่จะ จำกัด กริยา RESTFUL ที่แน่นอน
ฉันตั้งใจที่จะ จำกัด คำกริยา RESTUL ต่อประเภทโพสต์ที่กำหนดเอง ตัวอย่างเช่นเนื่องจากโพสต์ประเภทคำศัพท์ที่กำหนดเองฉันอยากจะบอกว่า: เมทริกซ์การอนุญาต +-------+---+----------+ |index | X | GET | |show | O | GET | |create | X | POST | |update | X | PATCH/PUT| |delete | X | DELETE | +-------+---+----------+ ดูเหมือนว่า V2 จะไม่ให้ระดับการควบคุมนั้น ฉันผ่านแหล่งที่มาและจากสิ่งที่ฉันเห็นไม่มีตะขอ / ตัวกรองใด ๆ ให้แตะเพื่อเปลี่ยนการอนุญาต โซลูชันปัจจุบันของฉันมีดังต่อไปนี้ มันประนีประนอมของชั้นเรียนที่คุณสามารถโหลดในเมทริกซ์ของประเภทโพสต์ที่กำหนดเองกับการกระทำที่ได้รับอนุญาต สิ่งนี้สามารถเรียกได้ในrest_prepare_vocabularyตัวกรองทำลายการตอบสนองหากสิทธิ์ไม่เข้าแถว ปัญหา …

4
ฉันจะลบภาพที่ไม่ได้ใช้ทั้งหมดออกจากไดเรกทอรีอัพโหลดได้อย่างไร
ฉันกำลังพยายามล้างโฟลเดอร์ที่อัปโหลดเนื่องจากตอนนี้พวกเขาเริ่มที่จะใช้พื้นที่มากเกินไปในเซิร์ฟเวอร์ของฉัน ฉันได้ลองใช้ปลั๊กอินเพื่อให้บรรลุจุดประสงค์นี้เช่น DNUI และ Cleanup Images แต่ปลั๊กอินเหล่านี้ไม่สามารถใช้งานได้หรือในกรณีของ DNUI (ซึ่งได้รับการอัปเดตล่าสุดและใช้งานได้) ไม่บรรลุผลตามที่ฉันต้องการ นี่เป็นเพราะเว็บไซต์ของฉันใช้ Woocommerce และธีมซึ่งทั้งคู่ใช้รูปภาพภายในสถานที่อื่น ๆ ไม่ใช่แค่โพสต์หรือหน้าเช่นหัวกระดาษท้ายกระดาษและแกลเลอรี่ ดูเหมือนว่า WC ใช้มันเป็นของตัวเองในปลั๊กอิน Lightbox เรียกว่าพริตตี้ภาพถ่ายซึ่งเป็นภาพที่มีรายละเอียดว่า "ไม่ได้ใช้" โดย DNUI จะถูกเรียกจาก ฉันรู้ว่ามันเป็นการถามสักหน่อย แต่ฉันสงสัยว่าใครจะชี้ฉันในทิศทางที่ถูกต้องได้ไหม? ฉันไม่ได้เป็นนักพัฒนาดังนั้นอาจไม่ควรโพสต์ที่นี่ แต่ฉันสามารถทำงานกับเวลาและความมุ่งมั่นได้ ฉันเคยเห็นสคริปท์ในเว็บไซต์นี้ที่ได้ผลลัพธ์เช่นเดียวกับปลั๊กอิน DNUI แต่ไม่มีอะไรที่คำนึงถึงการใช้อิมเมจอื่น ๆ (ถ้าเป็นไปได้?) ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมมาก

1
จะล้างกฎการเขียนซ้ำบนไซต์ที่เชื่อถือได้ได้อย่างไร
สมมติว่าคุณมีปลั๊กอินที่จำเป็นต้องล้างกฎการเขียนซ้ำ คุณทำทุกอย่างถูกต้องด้วยการเปิดใช้งานฮุคและเพิ่มการล้างสายเพื่อให้ทุกอย่างราบรื่นและเข้ากันได้ แล้ววันหนึ่งที่ใครบางคนพยายามที่จะเรียกใช้มันในหลายไซต์ แทนที่จะเป็นสถานการณ์ง่าย ๆ เช่น: สร้างเว็บไซต์ WordPress แล้ว ติดตั้งและเปิดใช้งานปลั๊กอินแล้ว ตอนนี้คุณมีสถานการณ์ฝันร้ายเช่น: ติดตั้งปลั๊กอินแล้วและเปิดใช้งานเครือข่าย มีการสร้างไซต์ WordPress ใหม่ (หรือร้อย) ในเว็บไซต์หลายไซต์ ในทางทฤษฎีมันควรจะใช้ได้ใช่มั้ย ในทางปฏิบัติมันผิดพลาดในรูปแบบที่น่าตื่นเต้น: $wp_rewrite รัฐอาจมาจากเว็บไซต์ที่ไม่ถูกต้อง switch_to_blog() ไม่ติดตามสถานะการเขียนซ้ำเช่นกัน ส่วน "ภายหลัง" อาจเกิดขึ้นในบล็อกที่แตกต่างกันโดยสิ้นเชิง ปลั๊กอินอื่น ๆทั้งหมดที่คุณควรเล่นได้ดีอาจไม่เปิดใช้งานอย่างสม่ำเสมอในไซต์ต่างๆ ตัวอย่างเช่นคุณสามารถมองเห็นปัญหานี้วิธีการที่พยายามที่จะทำมันขวาพัดออกไป Permalinks บนเว็บไซต์หลักทุกครั้งที่เว็บไซต์ใหม่จะถูกสร้างขึ้น ดังนั้นวิธีที่จะไปเกี่ยวกับปลั๊กอินเชื่อถือล้างเขียนกฎใน MultiSite การ : เมื่อมีการสร้างเว็บไซต์ใหม่สำหรับเว็บไซต์หรือไม่ เมื่อไซต์ที่มีอยู่ถูกเปิดใช้งานจากไม่ได้ใช้งานสำหรับไซต์หรือไม่ เมื่อมีการเปิดใช้งานเครือข่ายปลั๊กอินสำหรับทุกไซต์หรือไม่ เมื่อปลั๊กอินถูกปิดการใช้งานเครือข่ายสำหรับทุกเว็บไซต์? อาจเป็นไปได้ในสถานการณ์อื่น ๆ ที่เกี่ยวข้องกับการเขียนบริบทโลกที่เปลี่ยนแปลงไป?

2
การใช้งาน Javascript เมื่อเพิ่มวิดเจ็ตใน Backend
ฉันมีวิดเจ็ตที่มีตัวควบคุมจาวาสคริปต์แนบมาด้วย หากวิดเจ็ตปรากฏขึ้นเมื่อโหลดหน้าผู้ดูแลระบบวิดเจ็ตตัวควบคุมจะทำงานอย่างถูกต้อง เมื่อฉันเพิ่มวิดเจ็ตใหม่มันไม่ทำงานอย่างถูกต้องฉันได้รับมาร์กอัป แต่ไม่มีเหตุการณ์จาวาสคริปต์ที่จะมีผล ถ้าฉันบันทึกวิดเจ็ตใหม่เมื่อรีโหลดแบบฟอร์มตัวควบคุมจะถูกสร้างขึ้นอย่างถูกต้องและตอนนี้ทำงานได้ การรีเฟรชหน้ายังช่วยแก้ไขปัญหา แต่สำหรับวิดเจ็ตที่มีอยู่เท่านั้น วิดเจ็ตใหม่ยังคงมีปัญหานี้อยู่ โดยเฉพาะฉันกำลังเรียกใช้เลือกในอินพุตที่เลือกที่จุดเหล่านี้: เอกสารพร้อม ajaxComplete ฉันตรวจสอบแล้วว่ารหัสของฉันทำงานในแต่ละกิจกรรมตามต้องการ แต่ผลลัพธ์ไม่เป็นไปตามที่คาดไว้ นี่คือปลั๊กอินทดสอบที่แสดงถึงปัญหา: https://gist.github.com/Tarendai/8466299 คุณจะเห็นว่าฉันมีเคาน์เตอร์ที่เพิ่มขึ้นทุกองค์ประกอบที่เลือกพบว่ามันสามารถแปลงได้ หมายเหตุ: เมื่อหน้าวิดเจ็ตโหลดฉันสามารถเห็นตัวนับเพิ่มขึ้นในคอนโซล JS ตามที่คาดไว้ เมื่อฉันเพิ่มวิดเจ็ตใหม่รหัสจะถูกรัน แต่มันล้มเหลวในการค้นหาองค์ประกอบที่เลือกใด ๆ ที่มันสามารถทำงานได้ตามที่แสดงโดย found.length ที่ 0 ซึ่งไม่ควรเป็นเช่นนี้เพราะวิดเจ็ตใหม่ทุกประเภทนั้นควร มีองค์ประกอบที่เลือก อิลิเมนต์ที่เลือกมีคลาสที่จะระบุคลาสนี้จะถูกลบออกเมื่อมีการใช้ไลบรารีเลือกเพื่อป้องกันการทำซ้ำและการประมวลผลซ้ำบนวิดเจ็ตที่มีอยู่ ก่อนที่จะใช้ selectize ฉันใช้ Select2 ซึ่งมีปัญหาเดียวกัน การแสดงความคิดเห็นรหัส AJAX ฉันคาดหวังว่าวิดเจ็ตใหม่จะมีอินพุตเลือกแบบมาตรฐาน พวกเขาไม่ได้. ฉันไม่รู้ว่าทำไมในกรณีนี้ ดังนั้นฉันจะทำให้ตัวเลือกควบคุมทำงานโดยไม่บอกผู้ใช้ให้รีเฟรช / คลิกบันทึกก่อนทำการเปลี่ยนแปลงได้อย่างไร

3
เพิ่มปุ่ม TinyMCE 4 แบบกำหนดเองที่ใช้งานได้ตั้งแต่ WordPress 3.9-beta1
มันเป็นวิธีการที่เป็นไปได้ที่จะเพิ่มปุ่มที่กำหนดเองกับ TinyMCE บรรณาธิการภาพรุ่นที่ 4 ? ขณะนี้ฉันพบคำถาม & คำตอบเล็กน้อยกับหัวข้อนี้ แต่ไม่ใช่คำตอบหรือวิธีการ แต่ฉันไม่สามารถหาบทช่วยสอน, เอกสารประกอบ, ถาม & ตอบสำหรับหัวข้อเพื่อเพิ่มปุ่มที่กำหนดเองใน TinyMCE เวอร์ชัน 4 รวมอยู่ใน WordPress ตั้งแต่รุ่น 3.9-beta1 เป้าหมาย

3
รหัสนี้จะทำงานกี่ครั้ง? (หรือยายรวยแค่ไหน?)
ตัวอย่างสมมุติฐาน แต่การบังคับใช้ในโลกแห่งความเป็นจริง (สำหรับใครบางคนกำลังเรียนรู้เหมือนฉัน) รับรหัสนี้: <?php function send_money_to_grandma() { internetofThings("send grandma","$1"); } add_action('init','send_money_to_grandma'); add_action('init','send_money_to_grandma'); ตกลงตอนนี้ฉันเปิดไซต์ WP ของฉันและเข้าสู่ระบบฉันสำรวจสองสามหน้าใน Admin การกระทำ 'init' นั้นยิงได้ถึง100 ครั้งก่อนที่แบตเตอรี่แล็ปท็อปของฉันจะตาย คำถามแรก: เราส่งเงินให้คุณยายเท่าไหร่? มันคือ $ 1, $ 2, $ 100 หรือ $ 200 (หรืออย่างอื่น) หากคุณสามารถอธิบายคำตอบของคุณที่จะยอดเยี่ยม คำถามที่สอง: หากเราต้องการให้แน่ใจว่าเราส่งยายเพียง $ 1 วิธีที่ดีที่สุดในการทำเช่นนั้นคืออะไร ตัวแปรทั่วโลก (สัญญาณ) ที่ได้รับการตั้งค่า 'จริง' ครั้งแรกที่เราส่ง $ 1? หรือมีการทดสอบอื่น ๆ เพื่อดูว่ามีการกระทำเกิดขึ้นแล้วและป้องกันไม่ให้ทำการยิงหลายครั้งหรือไม่? …

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