คำถามติดแท็ก plugin-development

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

6
ที่ไหนเมื่อใดและจะล้างกฎการเขียนซ้ำอย่างถูกต้องภายในขอบเขตของปลั๊กอินอย่างไร
ฉันมีปัญหาแปลก ๆ นิดหน่อยกับกฎการเขียนซ้ำไม่ได้ล้างอย่างถูกต้อง ผมได้ลองใช้และflush_rewrite_rules();flush_rewrite_rules(true); ฉันยังได้ลอง$wp_rewriteใช้โลกาภิวัตน์$wp_rewrite->flush_rules();และ$wp_rewrite->flush_rules(true); ไม่ปรากฏว่ากำลังล้างกฎการเขียนซ้ำอย่างถูกต้อง การเรียกเหล่านั้นเป็นการล้างกฎการเขียนซ้ำเมื่อถูกเรียก ฉันจะรู้สิ่งนี้ได้อย่างไร การใช้โซลูชันสำหรับการดีบักการเขียนกฎการลบทิ้ง ขณะนี้ฉันได้เขียนกฎใหม่อีกครั้งเมื่อเปิดใช้งานปลั๊กอินและปิดใช้งานปลั๊กอิน ไม่มีปัญหา ฉันมีหน้าการตั้งค่าการจัดการปลั๊กอินสำหรับผู้ใช้เพื่อกำหนดค่าปลั๊กอิน การตั้งค่าบางอย่างปรับโครงสร้าง permalink ดังนั้นกฎการเขียนใหม่จะต้องล้างในหน้าการตั้งค่าการบริหารปลั๊กอิน "บันทึกการตั้งค่า" (ใช้มาตรฐานupdate_option();) เพื่อบันทึกการตั้งค่า ฉันต้องการที่จะทราบว่าประเภทโพสต์ที่กำหนดเองถูกสร้างขึ้นเพื่อให้ตรงกับการตั้งค่าที่ผู้ใช้ระบุทั้งนี้ขึ้นอยู่กับการตั้งค่าที่ระบุ ดังนั้นกฎการเขียนใหม่จะต้องถูกลบทิ้งทันทีหลังจากบันทึกการตั้งค่า นี่คือสิ่งที่ทำงานไม่เหมาะสม โซลูชันลิงก์ด้านบนสำหรับการดีบักกฎการเขียน@toschoซ้ำที่แสดงโดยแสดงว่ากำลังล้างกฎการเขียนซ้ำจำนวนมาก อย่างไรก็ตามเมื่อไปที่ไอเท็มเอกพจน์ชนิดโพสต์ที่กำหนดเองหรือแม้กระทั่งการเก็บถาวรชนิดโพสต์ที่กำหนดเองสำหรับเรื่องนั้นแต่ละข้อผิดพลาดกลับเป็น 404 ประเภทโพสต์ที่กำหนดเองมีการลงทะเบียนอย่างถูกต้องและเหมาะสม ฉันรู้แน่นอนว่าไม่ใช่ปัญหา ติดตามการตั้งค่าหน้าการจัดการปลั๊กอินทันที มีการสร้างประเภทโพสต์ที่กำหนดเองโครงสร้าง Permalink และกฎการเขียนซ้ำทั้งหมดจะพยายามล้างออก ประเภทโพสต์ที่กำหนดเองนั้นจะถูกโหลดเสมอและโหลดinitเหมือนปกติ ด้วยเหตุผลบางอย่างกฎการเขียนซ้ำไม่ได้ล้างข้อมูลอย่างถูกต้องเพราะอย่างที่ฉันพูดก่อนหน้าการไปที่ส่วนเอกพจน์หรือไฟล์เก็บถาวรของประเภทโพสต์ที่กำหนดเองจะแสดงข้อผิดพลาด 404 ตอนนี้ส่วนที่แปลกประหลาดถ้าทั้งหมดที่ฉันทำคือเพียงไปที่หน้าการตั้งค่าการจัดการ permalinks แล้วกลับไปที่ส่วนหน้าเพื่อดูส่วนเอกพจน์หรือเก็บถาวรของประเภทโพสต์ที่กำหนดเองพวกเขาทำงานได้อย่างน่าอัศจรรย์ หน้าการตั้งค่าการจัดการ permalinks ทำอะไรที่ฉันไม่ได้ทำเพื่อให้กฎการเขียนซ้ำล้างอย่างเหมาะสมและของฉันไม่ได้ ฉันหมายถึงในฐานะวิธีการชั่วคราวฉันเปลี่ยนเส้นทางผู้ใช้ไปยังหน้าการตั้งค่าการจัดการ Permalinks หลังจากบันทึกหน้าการตั้งค่าการดูแลระบบปลั๊กอิน แต่นี่ไม่ใช่วิธีแก้ปัญหาในอุดมคติ ฉันต้องการกฎการเขียนซ้ำเพียงแค่ล้างอย่างถูกต้องภายในรหัสปลั๊กอินของฉัน มีบางจุดใน WordPress ที่ล้างกฎการเขียนใหม่เพียงแค่ไม่ล้างกฎทั้งหมดอีกต่อไปหรือไม่ admin_menu - หน้าการตั้งค่าปลั๊กอินถูกเพิ่มในการจัดการ …

3
รับเส้นทางไปยังปลั๊กอินอื่น
ในการรับเส้นทางไปยังปลั๊กอินคุณสามารถใช้plugin_dir_path(__FILE__)- แต่ต้องมีการเรียกจากภายในปลั๊กอิน วิธีที่คุณสามารถเชื่อถือได้เส้นทางปลั๊กอิน B (คนpluginb/pluginb.php) จากภายในปลั๊กอิน? แก้ไข:มันสันนิษฐานว่าคุณรู้ว่าตัวบุ้งของปลั๊กอินที่คุณอยู่หลัง (จริง ๆ แล้วคุณสามารถได้รับจากget_plugins()) แต่ฉันต้องการให้มันทำงานโดยทั่วไป

2
ทำไม enable_plugin ไม่ทำงานใน register_activation_hook
ฉันพยายามเปิดใช้งานปลั๊กอินที่สองโดยอัตโนมัติในขณะที่เปิดใช้งานปลั๊กอินแรก register_activation_hook(__FILE__, 'example_activation' ); function example_activation() { include_once(ABSPATH .'/wp-admin/includes/plugin.php'); activate_plugin('hello.php'); } มันไม่ทำงานภายใน register_activation_hook .. มันใช้งานได้ถ้าฉันใช้มันโดยตรงเช่น: include_once(ABSPATH .'/wp-admin/includes/plugin.php'); activate_plugin('hello.php'); ฉันจะแก้ไขได้อย่างไร ขอบคุณที่ช่วยเหลือ สารละลาย: ฉันกำลังใช้สิ่งนี้ด้วยตัวเองตอนนี้: // When this plugin activate, activate another plugin too. register_activation_hook(__FILE__, function(){ $dependent = 'hello.php'; if( is_plugin_inactive($dependent) ){ add_action('update_option_active_plugins', function($dependent){ /* for some reason, activate_plugin($dependent); is not working */ …

2
กำลังมองหาไดอะแกรมระบบ WordPress
ฉันกำลังมองหาการออกแบบระบบแผนภูมิ / ไดอะแกรมของ WordPress ฉันพบเฉพาะไดอะแกรมลำดับชั้นของเทมเพลต แต่เป็นเพียงส่วนหนึ่งของระบบ แหล่งที่มา: http://upload.wikimedia.org/wikipedia/commons/3/3d/Wordpress_Template_Hierarchy.png

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

2
WP_Query จำนวนหน่วยความจำที่ไม่มีสาระรั่วไหล
ทุกครั้งที่ฉันเรียก WP_Query () ในฟังก์ชั่นด้านล่าง Wordpress มีหน่วยความจำรั่ว 8 เมกะไบต์ และเนื่องจากฉันเรียกฟังก์ชั่นนี้มากมายสิ่งต่าง ๆ ขนดกค่อนข้างเร็ว ... :( ฉันได้ลองตั้งค่า $ queryObject ที่เกิดขึ้นแล้วเช่นเดียวกับการเรียก wp_cache_flush () เป็นระยะ ๆ แต่ดูเหมือนจะไม่มีผลอะไรเลย function get_post_ids_in_taxonomies($taxonomies, &$terms=array()) { $post_ids = array(); $query = gen_query_get_posts_in_taxonomies($taxonomies, $terms); // var_dump($query); //Perform the query $queryObject = new WP_Query($query); //*****THE 8 MEGABYTES IS LEAKED HERE***** //For all …

6
ฉันจะเพิ่มตัวเลือกในรายการเทมเพลทของหน้าจากปลั๊กอินได้อย่างไร
ฉันดูรอบสองสามชั่วโมงที่ผ่านมาเพื่อสร้างแม่แบบหน้ากำหนดเองจากภายในปลั๊กอิน แต่ยังไม่มีโชคใด ๆ สิ่งที่ฉันพยายามทำโดยเฉพาะคือเพิ่มตัวเลือกในรายการของเทมเพลตหน้าที่มีอยู่เมื่อแก้ไขหน้าและไม่ใช้วิธีอื่นเช่นif( is_page( 'page-slug' ) ) { /* etc */ } มีตัวแปรทั่วโลกที่ฉันสามารถแก้ไขการทำเช่นนี้? แก้ไข: ฉันใช้รหัสนี้ในขณะนี้ตามลิงค์ @ m0r7if3r แสดงความคิดเห็นให้ฉันปัญหาคือมันจะเรียกใช้ฟังก์ชั่นนี้เมื่อดูหน้า แต่ไม่ใช่เมื่อแก้ไขหน้า (เพื่อเติมรายการแบบเลื่อนลงด้วยเทมเพลตหน้า) : class JW_SiteGrader { private static $instance; private function __construct() { add_action( 'template_redirect', array( &$this, 'sitegrader_template_redirect' ), 20 ); } public static function getInstance() { // Return the class …

2
ในส่วนผู้ดูแลระบบของ WordPress ฉันจะเชื่อมโยงไปยังหน้าเมนูย่อยที่สร้างขึ้นสำหรับปลั๊กอินได้อย่างไร
ดังนั้นฉันกำลังพยายามสร้างปลั๊กอิน WordPress และฉันได้สร้างหน้าเมนูบางส่วนโดยใช้ฟังก์ชั่นที่มีให้: add_submenu_page('my_plugin_menu', 'Edit record page', 'Edit record page', 'manage_options', 'edit_record_page', array(&$this, 'display_edit_record_page'); และเมื่อฉันไปที่หน้าฉันสังเกตเห็นบนแถบที่อยู่บนเบราว์เซอร์มันอ่านสิ่งนี้: http://mydomain.com/wp/wp-admin/admin.php?page=edit_record_page สิ่งที่ฉันต้องการจะทำคือการสามารถเชื่อมโยงหน้านี้ แต่ฉันพบว่าฉันต้อง hardcode ลิงก์สำหรับการขาดวิธีที่ดีกว่าในการทำมันและฉันกำลังทำงานบนไซต์ dev ดังนั้นฉันจึงสงสัยว่าฉันจะสร้างลิงค์ที่ฉันเห็นบนเบราว์เซอร์ของฉันได้อย่างไรเมื่อฉันคัดลอกโค้ดปลั๊กอินนี้ไปยังเซิร์ฟเวอร์ที่ใช้งานจริงมันจะทำงานได้ กล่าวคือมีฟังก์ชั่น WordPress ที่จะสร้างส่วนลิงก์ของหน้าเมนูย่อยที่สร้างขึ้น page=edit_record_page นอกจากนี้หากฉันต้องการผนวกสตริงข้อความค้นหาไปยังลิงก์ไปยังลิงก์นั้นง่ายกว่าการเพิ่มด้วยตนเองเช่น: http://mydomain.com/wp/wp-admin/admin.php?page=edit_record_page&rec_id=1 หรือว่ามีฟังก์ชั่น WordPress ที่เหมาะสมสำหรับการทำเช่นนั้น?

1
ฉันจะบันทึกอาร์เรย์เลือกหลายรายการด้วยการตั้งค่า API สำหรับหน้าตัวเลือกปลั๊กอินได้อย่างไร
ฉันคิดว่านี่อาจเป็นปัญหากับ PHP ของฉันมากกว่าที่จะใช้การตั้งค่า API แต่ฉันไม่สามารถรับ Wordpress เพื่อบันทึกอาร์เรย์ของข้อมูลสำหรับกล่องแบบเลือกได้หลายแบบ กล่องแบบเลือกได้หลายรูปแบบสอดคล้องกับเขตข้อมูลเมตาแบบกำหนดเองและตัวเลือกที่เลือกคือประเภทโพสต์ที่กำหนดเองที่จะแสดงเขตข้อมูลเมตานั้น นี่คือรหัสที่แสดง: case 'select2': echo "<select id='$id' style='width:15em;height:10em;' class='select$field_class' name='" . $buddha_option_name . "[$id]' multiple>"; foreach($choices as $item) { $item = explode("|",$item); $item[0] = esc_html($item[0], 'buddha_textdomain'); $selected = ($options[$id]==$item[1]) ? 'selected="selected"' : ''; echo "<option value='$item[1]' $selected>$item[0]</option>"; } echo "</select>"; echo ($desc != …

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

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

5
ฉันจะอัปเดตปลั๊กอิน wordpress จากที่เก็บ Git (github) ได้อย่างไร
มีวิธีใดที่จะอัปเดตปลั๊กอินที่ติดตั้งบนเว็บไซต์หลายแห่งจาก repo github อย่างง่ายดาย ฉันรู้ว่าฉันสามารถทำได้จากบรรทัดคำสั่งของแต่ละเซิร์ฟเวอร์โดยใช้ git pull แต่มีวิธีการทำจากผู้ดูแลระบบ wordpress คล้ายกับวิธีการปรับปรุงปลั๊กอิน?

4
หยุดปลั๊กอินในกระบวนการเปิดใช้งานเมื่อไม่ตรงกับรุ่น WP ที่แน่นอนจากนั้นแสดงข้อความแสดงข้อผิดพลาดใน admin_notices action hook
ฉันมีปลั๊กอินที่ฉันไม่ต้องการเปิดใช้งานหากไม่ตรงกับหมายเลขรุ่น WP ที่แน่นอนจากนั้นแสดงข้อความแสดงข้อผิดพลาดใน admin_notices action hook เท่าที่ฉันได้วิจัยรหัสด้านล่างเป็นสิ่งที่ดีที่สุดที่ฉันสามารถบรรลุเป้าหมายนี้: $wp_version = get_bloginfo('version'); if ( $wp_version < 4.5 ) { add_action( 'admin_init', 'deactivate_plugin_now' ); add_action( 'admin_notices', 'errormsg' ) ); } public function deactivate_plugin_now() { if ( is_plugin_active('myplugin/myplugin.php') ) { deactivate_plugins('myplugin/myplugin.php'); } } public function errormsg () { $class = 'notice notice-error'; $message = …

3
แนวทางปฏิบัติที่ดีที่สุดสำหรับการอ้างอิงไดเรกทอรีปลั๊กอิน
ปลั๊กอินของฉันใช้รหัสต่อไปนี้เพื่ออ้างอิงไฟล์ แต่ฉันอ่านแล้วWP_PLUGIN_DIRจะไม่ทำงานหากผู้ใช้เปลี่ยนชื่อโฟลเดอร์ปลั๊กอินเริ่มต้น ฉันต้องการแทนที่/location-specific-menu-items/ด้วยการอ้างอิงไปยังโฟลเดอร์ปลั๊กอินปัจจุบัน $gi = geoip_open(WP_PLUGIN_DIR ."/location-specific-menu-items/GeoIP.dat", GEOIP_STANDARD); ฉันจะเขียนสิ่งนี้ใหม่เพื่อให้ทำงานได้โดยไม่คำนึงถึงชื่อของไดเรกทอรีปลั๊กอิน WP และโฟลเดอร์ปลั๊กอินที่ระบุได้อย่างไร แก้ไข: นี่คือวิธีแก้ปัญหาการทำงานขั้นสุดท้ายของฉันหลังจากที่ทุกคนป้อนข้อมูล ขอบคุณมาก! $GeoIPv4_file = plugin_dir_path( __FILE__ ) . 'data/GeoIPv4.dat'; $GeoIPv6_file = plugin_dir_path( __FILE__ ) . 'data/GeoIPv6.dat'; if (!filter_var($ip_address, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) === FALSE) { if ( is_readable ( $GeoIPv4_file ) ) { $gi = geoip_open( $GeoIPv4_file, GEOIP_STANDARD ); $user_country …

2
วิธีที่ดีที่สุดในการ flush_rewrite_rules สำหรับประเภทโพสต์ที่กำหนดเองในปลั๊กอิน mu-plugins?
ฉันกำลังเขียนปลั๊กอินที่สร้างประเภทโพสต์ที่กำหนดเอง (เหนือสิ่งอื่นใด) มันเป็นปลั๊กอิน MultiSite การและอาศัยอยู่ในไดเรกทอรีMU-ปลั๊กอิน แนวปฏิบัติที่ดีที่สุดสำหรับการจัดการflush_rewrite_rules ()ในสถานการณ์นี้คืออะไร สำหรับปลั๊กอิน 'ปกติ' ที่คุณต้องทำในฮุคการเปิดใช้งานซึ่งเป็นไปไม่ได้สำหรับปลั๊กอินที่ต้องใช้เนื่องจากตะขอเหล่านั้นไม่พร้อมใช้งาน เนื่องจากสิ่งนี้น่าจะเป็นเหตุการณ์ "ครั้งเดียว" หลังจากลงทะเบียนประเภทโพสต์ที่กำหนดเองมันจะทำให้การทำอะไรเช่นนี้ในชั้นเรียนของฉันที่ลงทะเบียน CPT: private function check_flush_my_CPT() { global $wp_rewrite; if ( !get_option('my_plugin_firstrun') ) { $wp_rewrite->init(); $wp_rewrite->flush_rules(true); update_option('my_plugin_firstrun', 'yes'); } } public function register_my_CPT() { // do all the CPT setup steps for the $args array... register_post_type('my_CPT', $args); $this->check_flush_my_CPT(); } …

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