วิธีการอัพเดทตัวเลือกแบบอนุกรมโดยทางโปรแกรม?


15

ฉันต้องการอัปเดตตัวเลือกปลั๊กอินโดยอัตโนมัติ มีบางสิ่งที่ฉันซ้ำไปซ้ำมามากมาย

ด้วยwp-cliฉันรู้ว่าฉันสามารถอัปเดตตัวเลือกง่าย ๆ เช่นนี้:

php wp-cli.phar option update blog_public 1

อย่างไรก็ตามตัวเลือกปลั๊กอินบางตัวบันทึกตัวเลือกในสตริงที่ทำให้เป็นอนุกรม

ตัวอย่างของ option_value ต่อเนื่องใน wp_options:

a:9:{s:4:"from";s:21:"xx@xxx.com";s:8:"fromname";s:51:"xxx";s:4:"host";s:13:"smtp.xx.com";s:10:"smtpsecure";s:3:"ssl";s:4:"port";s:3:"465";s:8:"smtpauth";s:3:"yes";s:8:"username";s:21:"xx@xxx.com";s:8:"password";s:13:"xxx";s:10:"deactivate";s:0:"";}

จะอัพเดทตัวเลือกเหล่านั้นอย่างไร?

คำตอบ:


14

แก้ไขได้ด้วยตัวเองนี่คือวิธีทำ:

หากคุณต้องการอัพเดทตัวเลือกต่อเนื่องแบบเป็นโปรแกรม:

ดาวน์โหลด wp-cli จาก wp-cli.org

ค้นหาคำว่า "กุญแจ" สำหรับตัวเลือกที่คุณใช้ ในตัวอย่างนี้กุญแจคือ "wp_smtp_options"

หากคุณไม่ทราบรหัสให้ค้นหาในตาราง wp_options และลองคิดดู

ตัวอย่าง: select * from wp_options where option_name like '%smtp%'

ตอนนี้คุณรู้คีย์ของคุณแล้วให้ใช้คำสั่งนี้เพื่อบันทึกการกำหนดค่าของคุณไปยังไฟล์ json:

php wp-cli.phar option get wp_smtp_options --format=json > my_saved_config.txt

เมื่อใดก็ตามที่คุณต้องการให้เรียกคืนการกำหนดค่าให้ใช้คำสั่งนี้

php wp-cli.phar option update wp_smtp_options --format=json < my_saved_config.txt

หมายเหตุ:

  • ทำงานใน WAMPSERVER64
  • ทำงานร่วมกับอักขระ Unicode เช่นñáé
  • คุณสามารถมีไฟล์ json ของคุณพร้อมช่องว่างภายในและช่องว่างเพื่อความชัดเจน

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


1
ขอบคุณ - ทำงานได้ดีมาก หากใครพยายามเขียนสคริปต์โดยไม่ต้องใช้ไฟล์ภายนอกคุณสามารถใส่ json ในoption updateบรรทัดด้วยเครื่องหมายคำพูดเดี่ยว ดูการใช้งานของฉันที่บรรทัด 61 ได้ที่นี่: gist.github.com/squarecandy/cfdead55ca1d84496044
squarecandy

ดูคำตอบของฉันสำหรับ "หนึ่งซับ"
Laurent

13

WP-CLI เป็นคำตอบที่แน่นอนหลังจากอัปเดตเป็น 1.4.0 ซึ่งแนะนำคำสั่งถอนและแก้ไขสำหรับการเข้าถึงข้อมูลที่เป็นอนุกรมใน WordPress

คำสั่งถอนใช้รูปแบบนี้สำหรับการจับค่าที่ทำให้เป็นอนุกรม

wp option pluck <key> <key-name>

ตัวอย่างเช่นในตัวเลือก active_plugins คุณสามารถคว้ารายการแรกได้

wp option pluck active_plugins 0

คำสั่ง patch ใช้รูปแบบนี้สำหรับการแทรกการอัพเดตหรือการลบค่าที่เป็นอนุกรม (การกระทำ)

wp option patch <action> <key> <key-name> <value>

การลบ active_plugin แรกจะมีลักษณะเช่นนี้

wp option patch delete active_plugins 0

ถอนและแพทช์เดียวกันนี้ยังเพิ่มสำหรับคำสั่งอื่น ๆ เช่น postmeta คุณสามารถใช้ WP-CLI เพื่อทำ cool loop สำหรับการอัปเดตข้อมูลอนุกรม WordPress โดยทางโปรแกรม


2
นี่ควรเป็นคำตอบที่ยอมรับได้
Evan Mattson

6

นี่คือวิธีที่ฉันทำในสคริปต์ทุบตี:

wp option get wp_smtp_options --format=json | php -r '
$var = json_decode( fgets(STDIN) );
$var->from = "email@email.com";
$var->fromname = "me";
print json_encode($var);
' | wp option set wp_smtp_options --format=json

0

WP-CLIคำสั่งoptionไม่ใช้ WordPress' ตัวเลือก APIที่จะทำในงานของตน ให้ไว้เช่นกับคำสั่งย่อยupdate, การป้อนข้อมูลที่ถูกต้องarrayและคุณควรจะทำเช่นนี้กับ WP-CLI คุณควรใช้--formatพารามิเตอร์ที่นี่เพื่อให้แน่ใจว่าคุณได้รับเหมือนกันใช้jsonงานได้ดีสำหรับคำupdateสั่งย่อย หมายเหตุคำสั่งย่อยgetควรส่งคืนอ็อพชันที่ไม่ได้ระบุเนื่องจากตัวเลือก API ถูกใช้ซึ่งคุณสามารถบันทึกแก้ไขและ / หรือถ่ายโอน / ตั้งค่าบนการติดตั้งอื่น / ใหม่


สิ่งนี้ไม่ทำงาน: wp option get wp_smtp_options > savedconfiguration.txt wp option update wp_smtp_options < savedconfiguration.txt คำสั่งแรกบันทึกเป็นอาร์เรย์ แต่อันดับที่สองไม่ยอมรับอาร์เรย์ ฉันเดาว่าฉันควรทำให้มันเป็นอันดับแรกคุณรู้วิธีการทำอย่างไร
lalo

คุณลองใช้ประโยชน์จากformatพารามิเตอร์หรือไม่ @lalo edit: เพิ่งเห็นคุณคิดออก ..
นิโคไล

ใน wp-cli.org ไม่ได้บอกว่ามีตัวเลือกใดบ้างสำหรับformatพารามิเตอร์ ฉันสงสัยว่ามันเป็นไปได้หรือไม่โดยไม่ต้องใช้ไฟล์ระดับกลางอย่างที่ฉันเขียนไว้ในคำตอบของฉัน
lalo

คุณต้องดูที่แหล่งที่มาเพื่อรับภาพรวมที่สมบูรณ์ของformatพารามิเตอร์ซึ่งแตกต่างจากคำสั่ง (sub-) ถึง (sub-) คำสั่ง มันเป็นไปได้อย่างแน่นอนเช่นโดยการเขียน bash script และเก็บข้อมูลไว้ในตัวแปร @lalo
Nicolai

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