จะเพิ่ม Custom Blog Options ในแบบฟอร์มการตั้งค่าบล็อกใหม่ได้อย่างไร


17

ดูเหมือนจะเป็นข้อกำหนดที่เรียบง่าย แต่ฉันกำลังดิ้นรน:

  1. ฉันต้องการเพิ่มฟิลด์ตัวเลือกที่จะ "เพิ่มเว็บไซต์ใหม่"
    ตัวเลือกข้อความแบบธรรมดานั้นใช้ได้ ฉันจะทำสิ่งนี้ได้อย่างไร

  2. ฉันต้องบันทึกตัวเลือกบล็อกที่กำหนดเองนี้เมื่อสร้างเว็บไซต์

    ฉันรู้ว่าฉันสามารถใช้ตะขอ 'wpmu_new_blog' ซึ่งส่งผ่าน$metaตัวแปรพร้อมตัวเลือกที่ให้มา แต่ฉันสงสัยว่ามีวิธีที่จะทำสิ่งนี้ทั้งหมดในขั้นตอนเดียวดังนั้นฉันไม่ต้องทำการค้นหา DB อีกครั้งหรือแย่กว่านั้น แทนที่ / แทนที่กระบวนการสร้างไซต์ทั้งหมดหรือไม่

หมายเหตุ:

ฉันใช้ WP 3.3.1 พร้อมการตั้งค่า MultiSite ฉันกำลังเขียนปลั๊กอินที่แสดงไซต์ทั้งหมดที่ตรงกับค่าฟิลด์ที่กำหนดเองที่ระบุ (ลองเรียกมันว่า "type")

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

คำตอบ:


9

เข้าร่วมสองคำตอบ (*) ฉันได้ทำปลั๊กอินเพื่อเพิ่มตัวเลือกเมตาที่กำหนดเองเมื่อลงทะเบียนไซต์ใหม่ (ส่วนหน้าและส่วนหลัง) และแสดงค่าในคอลัมน์ในหน้าจอเว็บไซต์

หมวดหมู่ Multisite

ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่ ...

(*) การอ้างอิงรหัส

1 - WordPress + Multisite: วิธีเพิ่มตัวเลือกบล็อกที่กำหนดเองเพื่อเพิ่มฟอร์มไซต์ใหม่ใน Network Admin? โดย @dennisg

2 - หลายไซต์: วิธีเพิ่มตัวเลือกบล็อกที่กำหนดเองไปยังแบบฟอร์มการตั้งค่าบล็อกใหม่ได้อย่างไร โดย @tbuteler

add_action('wpmu_new_blog', 'add_new_blog_field');รวมจากสองคำตอบ

ฉันใช้รหัสคอลัมน์ ID ในเว็บไซต์หลายไซต์แล้วและยังเพิ่มคอลัมน์หมวดหมู่ในปลั๊กอิน

[อัพเดต]

พยายามทำให้คอลัมน์หมวดหมู่สามารถเรียงลำดับได้ แต่ดูเหมือนจะไม่สามารถแก้ไขได้ ...

ดูคำถาม / คำตอบนี้: ตัวกรอง 'คำขอ' และ 'parse_query' ไม่เริ่มทำงานใน sites.php หรือ link-manager.php

[อัพเดต 2]

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


+1 นี่มันเยี่ยมมากเลย! ฉันตั้งตาคอยที่จะลองทำสิ่งนี้ :)
ไบรอันลูกไม้ตี้

8

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

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

นี่คือรหัสคร่าวๆที่คุณจะต้องเริ่มต้น หวังว่ามันจะพาคุณไปในทิศทางที่ถูกต้อง:

// Add text field on blog signup form
add_action('signup_blogform', 'add_extra_field_on_blog_signup');
function add_extra_field_on_blog_signup() { ?>
    <label>An extra field</label>
    <input type="text" name="extra_field" value="" />
<?php
}

// Append the submitted value of our custom input into the meta array that is stored while the user doesn't activate
add_filter('add_signup_meta', 'append_extra_field_as_meta');
function append_extra_field_as_meta($meta) {
    if(isset($_REQUEST['extra_field'])) {
        $meta['extra_field'] = $_REQUEST['extra_field'];
    }
    return $meta;
}

// When the new site is finally created (user has followed the activation link provided via e-mail), add a row to the options table with the value he submitted during signup
add_action('wpmu_new_blog', 'process_extra_field_on_blog_signup', 10, 6);
function process_extra_field_on_blog_signup($blog_id, $user_id, $domain, $path, $site_id, $meta) {
    update_blog_option($blog_id, 'extra_field', $meta['extra_field']);
}

โปรดทราบ:

  1. หากคุณต้องการกรองอินพุตผ่านปลั๊กอินฉันขอแนะนำอย่างยิ่งให้ใช้อินพุตที่เลือกเพื่อล็อคตัวเลือกที่มีให้
  2. เนื่องจากต้องมีบางฟิลด์และผ่านการตรวจสอบในระหว่างการลงทะเบียน (ตัวอักษรขั้นต่ำ, ตัวอักษรที่ไม่อนุญาตสำหรับชื่อไซต์, บัญชีดำ, ฯลฯ ) ฉันขอแนะนำให้ตรวจสอบฟิลด์เพิ่มเติมของคุณใน $ _REQUEST โกลบอลเมื่อใส่ค่าของอินพุต ฟังก์ชั่นเพื่อให้ผู้ใช้ไม่สูญเสียข้อมูลของเขาในกรณีที่เขาถูกส่งกลับไปแก้ไขค่าของเขตข้อมูลเริ่มต้นของ WordPress;
  3. คุณสามารถแทนที่ความคิดของฟังก์ชั่นสุดท้ายด้วยสิ่งที่เหมาะกับปลั๊กอินของคุณได้ดีที่สุด แต่ตอนนี้ค่าของฟิลด์จะพร้อมใช้งานจากภายในฟังก์ชั่นสุดท้ายซึ่งจะช่วยคุณได้

ในบันทึกสุดท้ายหากคุณต้องการประมวลผลค่า 'extra_field' ทั้งหมดจากบล็อกที่มีอยู่ทั้งหมดในภายหลังฉันขอแนะนำให้เก็บข้อมูลไว้ในตารางเดียว อาจจะใช้update_site_optionแทนupdate_blog_optionฟังก์ชั่นสุดท้ายนั้นทำให้สูญเสีย blog_id ซึ่งไม่จำเป็นในกรณีนั้น

อย่างไรก็ตามแจ้งให้เราทราบว่ามันไปและโชคดี!


คำตอบที่เป็นประโยชน์ที่ยอดเยี่ยมข้อมูลมากมายที่ฉันสามารถนำไปใช้ประโยชน์ได้ที่นี่ :) ฉันได้รับรางวัลคำตอบที่ดีที่สุดสำหรับ brasofilo เพียงเพราะคุณได้รับความโปรดปรานแล้วและทั้งคู่ก็เป็นคำตอบที่ยอดเยี่ยม
Brian Lacy

คำตอบที่ยอดเยี่ยมที่นี่ขอบคุณ มีความคิดใดที่ทำให้ฟิลด์พิเศษของฉันถูกเพิ่มลงในตัวเลือกไซต์หากฉันไม่ปล่อยให้ update_blog_option () ทำงาน ฉันสะท้อนค่าภายใน process_extra_field_on_blog_signup () และ exit () และใช้งานได้มีการเพิ่ม extra_filed ให้กับตัวเลือก แต่เมื่อฉันปล่อยให้มันรันโดยไม่มี exit () ดังนั้น extra_field จะไม่ถูกเพิ่มใน wp_xx_options
Thatryan

@thatryan มันแปลก ... มีบางอย่างที่ลบค่าออกจากฐานข้อมูล (ไม่น่าจะเป็นไปได้) หรือพวกมันไม่ได้ถูกเพิ่มเลย ลองใช้การทดสอบเพิ่มเติมและอย่าลังเลที่จะโพสต์คำถามหากคุณมีปัญหาในการหาคำตอบ โปรดทราบว่าคำตอบนี้อาจใช้กับ WordPress 3.5 หรือเก่ากว่าดังนั้นพวกเขาจึงอาจเปลี่ยนแปลงบางอย่างในเวอร์ชันที่ใหม่กว่า ...
Tomas Buteler

-1

หากคุณดูรหัส site-new.php คุณจะได้รับคำตอบแล้ว - และนั่นก็ไม่ใช่!

ไม่มีเงื่อนไขการตรวจสอบเพื่อดูว่ามีอะไรที่สามารถเพิ่มลงในแบบฟอร์ม อย่างไรก็ตามฉันได้ศึกษาไฟล์และเชื่อว่าคุณจะต้องเพิ่มฟิลด์อินพุตนี้ใน site-new.php ด้วยตนเองและส่งค่าเป็นเมตาในอาร์เรย์ไปยังฟังก์ชัน wpmu_create_blog ที่คุณจะพบที่ไหนสักแห่งใกล้ 77 ไม่ทดสอบ แต่อ่าน ในสิ่งที่ฟังก์ชั่นมันอาจเป็นสิ่งที่คุณกำลังมองหา

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