إنشاء مكون إضافي لبرنامج WordPress يستخدم واجهات برمجة تطبيقات الخدمة ، "من الحساء إلى المكسرات"
نشرت: 2022-03-10يوفر عدد كبير بشكل متزايد من واجهات برمجة التطبيقات المتاحة للجمهور خدمات قوية لتوسيع وظائف تطبيقاتنا. WordPress عبارة عن نظام إدارة محتوى ديناميكي ومرن بشكل لا يصدق يدعم كل شيء من المدونات الشخصية الصغيرة إلى مواقع التجارة الإلكترونية الرئيسية وكل شيء بينهما. جزء مما يجعل WordPress متعدد الاستخدامات هو نظام المكونات الإضافية القوي ، مما يجعل من السهل للغاية إضافة وظائف.
سنتعرف على كيفية إنشاء GitHub Pipeline ، وهو مكون إضافي يسمح لك بعرض البيانات من GitHub API على صفحات WordPress باستخدام الرموز القصيرة. سأقدم أمثلة محددة ومقتطفات التعليمات البرمجية ، لكن ضع في اعتبارك التقنية الموضحة هنا مخططًا لكيفية استهلاك أي واجهة برمجة تطبيقات خدمة مع مكون إضافي.
مزيد من القراءة على SmashingMag:
- أساسيات WordPress: كيفية إنشاء برنامج WordPress الإضافي
- كيفية نشر إضافات WordPress باستخدام GitHub باستخدام العابرين
- ثلاث طرق لإضافة الحقول القابلة للتكوين إلى البرنامج المساعد الخاص بك
سنبدأ من البداية ، ولكن يُفترض وجود درجة من الإلمام بـ WordPress وتطوير المكونات الإضافية ، ولن نقضي وقتًا في مواضيع المبتدئين ، مثل تثبيت WordPress أو Composer.
انك سوف تحتاج:
- بيئة PHP ، مع تثبيت جديد لـ WordPress ؛
- حساب GitHub (أو موفر واجهة برمجة تطبيقات آخر إذا كنت تريد الارتجال) ؛
- الملحن (موصى به).
اختيار API
الخطوة الأولى في كتابة هذا النوع من المكونات الإضافية هي اختيار API. في هذا البرنامج التعليمي ، سنستخدم GitHub API. إذا كنت تفكر في استخدام واجهة برمجة تطبيقات أخرى ، ففكر في بعض العوامل المهمة التي يمكن أن تؤثر على مدى مكافأة مشروعك.
من أول الأشياء التي ألقي نظرة عليها هي دقة وجودة وثائق API. إذا كانت قليلة أو قديمة ، فاستعد لقضاء بعض الوقت في غربلة شفرة المصدر للإجابة على أسئلتك الخاصة. أيضًا ، ضع في اعتبارك مدى نضج واجهة برمجة التطبيقات ومدى مسؤولية الموفر عن إصدارها. ليس هناك ما هو أسوأ من استثمار الوقت في إنشاء شيء رائع ، فقط من أجل تعطله بسبب التغييرات التي تطرأ على واجهة برمجة التطبيقات الأولية. ابحث عن نظام تعيين الإصدار في عناوين URL الخاصة بنقطة النهاية.
// good https://api.stable.com/v1/user/ // danger https://api.dodgy.com/user/
مع المخاطرة بتوضيح ما هو واضح ، فإن البرمجة مقابل واجهة برمجة تطبيقات تابعة لجهة خارجية تتضمن علاقة ثقة ، ولا يتم إنشاء جميع واجهات برمجة التطبيقات على قدم المساواة.
التسوق لشراء مكتبة
غالبًا ما توزع العلامات التجارية المؤسسة المكتبات أو حزم SDK لتسهيل العمل مع واجهة برمجة التطبيقات الخاصة بهم. إذا لم يكن الأمر كذلك ، تذكر أن تبحث عما إذا كان شخص آخر قد كتب مكتبة بالفعل قبل أن تذهب وتعيد اختراع العجلة. يعد Google و GitHub مكانين رائعين لبدء البحث. يعد عدد النجوم أو الشوكات على GitHub مؤشرًا جيدًا على مدى فعالية المكتبة. يعتبر عمر أحدث الالتزامات و / أو عدد المشكلات المفتوحة مؤشرًا على مدى نشاط الحفاظ عليها. في حالتي ، كنت محظوظًا لأنني وجدت PHP GitHub API الرائعة ، بواسطة KNP Labs.
الكتابة بنفسك مع الإسراف في الكلام
إذا لم تكن هناك مكتبة مرضية لمزودك ، فلا يزال يتعين عليك عدم البدء من نقطة الصفر لأن أدوات مثل Guzzle تجعل العمل مع طلبات HTTP أسهل بكثير. يلف Guzzle مكتبة CURL الخاصة بـ PHP ويزيل العديد من المشكلات المرتبطة عادةً بتكوين الطلبات وتقديمها يدويًا. حتى إذا كنت تقدم طلبًا واحدًا أو طلبين فقط ، فما زلت أوصي باستخدامه لأنه سيجعل شفرتك أكثر قوة ، وتثبيته مع Composer هو قطعة من الكعكة.
إعداد البرنامج المساعد
سنبدأ بالهيكل الأساسي لمكوِّن إضافي لبرنامج WordPress ، وهو دليل يحتوي على ملفين. يعد اختيار اسم مجلد وصفي وفريد أمرًا مهمًا لتجنب التعارض مع المكونات الإضافية الأخرى. إذا كان اسم المكون الإضافي عامًا إلى حد ما ، ففكر في إضافة بادئة فريدة.
github-api/ readme.txt github-api.php
يحتوي الملف readme.txt
على البيانات الوصفية للمكوِّن الإضافي الذي سيظهر على wordpress.org
إذا قررت نشره هناك. اقرأ عن نشر مكونات WordPress الإضافية في الوثائق ، أو تحقق من النموذج الشامل readme.txt.
يحتوي ملف PHP أيضًا على بعض البيانات الوصفية في الرأس والتي سيتم استخدامها لعرض معلومات حول المكون الإضافي الخاص بك في لوحة المعلومات. ابدأ برأس يشبه هذا:
<?php /** Plugin Name: GitHub API description: >- Add GitHub project information using shortcode Version: 1.0 Author: Your Name License: GPLv2 or later Text Domain: github-api */
لأسباب أمنية ، من المستحسن أيضًا رفض الوصول المباشر إلى الملف ، مثل هذا:
defined( 'ABSPATH' ) or die( 'No script kiddies please!' );
في هذه المرحلة ، لن يفعل المكون الإضافي أي شيء ، ولكن عند نسخ الملفات إلى wp-content/plugins
، يجب أن يظهر في قائمة المكونات الإضافية ويجب أن تكون قادرًا على تنشيطه.

بعد ذلك ، سنرغب في تضمين المكتبة التي ستتعامل مع طلبات واجهة برمجة التطبيقات. في مثال الكود التالي ، نقوم بتضمين واجهة برمجة تطبيقات PHP GitHub الخاصة بـ KNP Labs ، ولكن يمكنك تضمين أي تبعية عن طريق استبدال knplabs/github-api
بالحزمة التي تستخدمها.
$ cd wp-content/plugins/github-api $ composer require knplabs/github-api
الآن ، يجب أن تبدو بنية ملفك كما يلي:
github-api/ composer.json composer.lock github-api.php readme.txt vendor/
الآن بعد أن أصبحت الملفات في مكانها الصحيح ، نحتاج إلى طلب vendor/autoload.php
الذي تم إنشاؤه عند تثبيته.
require_once 'vendor/autoload.php';
إذا تم إعداد كل شيء بشكل صحيح ، فيجب أن تكون قادرًا على إنشاء مثيل لفصل من المكتبة دون حدوث خطأ فادح.
$testing = new \Github\Client();
لكن هذه مجرد طريقة سريعة لاختبار مدى توفر تبعياتك. أوصي بتحديد فصل جديد يوسع المكتبة.
class MyGithub extends \Github\Client {};
هذا ليس بالغ الأهمية ، لكنه يجعل شفرتك أكثر مرونة من ناحيتين. الطريقة الأكثر وضوحًا هي أنه يمكنك تغيير أو إضافة وظائف جديدة إذا احتجت إلى ذلك. ولكنه أيضًا يجعل الحياة أسهل إذا أردت تبديل المكتبات في المستقبل ، لأنه سيتعين عليك إجراء التغييرات في مكان واحد فقط ، بدلاً من كل التعليمات البرمجية الخاصة بك.
رموز ووردبريس القصيرة
حان الوقت الآن لإعداد أول رمز قصير لدينا ، وهو مقتطف خاص يسمح لك بإنشاء محتوى عن طريق وضعه في منشور أو صفحة. إذا كنت جديدًا تمامًا على الرموز القصيرة أو كنت تريد فهمًا أعمق لكيفية عملها ، فراجع وثائق الرموز القصيرة الرسمية. في المثال الخاص بي ، سأقوم بعرض قائمة بمشكلات GitHub أينما وضع المؤلف هذا الرمز القصير: [github_issues]
كما فعلنا من قبل ، لنبدأ بمثال بسيط للتأكد من تسجيل الرمز القصير بشكل صحيح قبل أن نعمل على إجراء استدعاء API.
function github_issues_func( $atts ) { return "Hello world!"; } add_shortcode( "github_issues", "github_issues_func" );
الآن ، إذا قمت بنشر صفحة تحتوي على [github_issues]
، يجب أن ترى "Hello world" عند زيارة الصفحة. الآن وقد نجح هذا الأمر ، فلنقم بإعداد استدعاء API.
في القسم السابق ، قمنا بإعداد التحميل التلقائي لمكتبة GitHub الخاصة بنا وحددنا الفصل الدراسي الخاص بنا لتوسيعه. الآن ، يمكننا البدء في استخدامه لإجراء مكالمات API. لذلك ، سنضيفه إلى وظيفة رد الاتصال الخاصة بالرمز القصير. كدليل على المفهوم ، دعنا نجلب جميع المشكلات في مستودع GitHub Pipeline. التوثيق لهذه الطريقة متاح.
function github_issues_func( $atts ) { // Instantiate our class $gh = new MyGithub(); // Make the API call to get issues, passing in the GitHub owner and repository $issues = $gh->api('issue')->all('TransitScreen', 'wp-github-pipeline'); // Handle the case when there are no issues if ( empty($issues) ) return "<strong>" . __("No issues to show", 'githup-api') . "</strong>"; // We're going to return a string. First, we open a list. $return = "<ul>"; // Loop over the returned issues foreach( $issues as $issue ) { // Add a list item for each issue to the string // (Feel free to get fancier here) // Maybe make each one a link to the issue issuing $issue['url] ) $return .= "<li>{$issue['title']}</li>"; } // Don't forget to close the list $return .= "</ul>"; return $return; } add_shortcode( 'github_issues', 'github_issues_func' );
الآن يجب أن تكون قادرًا على عرض نفس الصفحة التي استخدمناها أعلاه لاختبار الرمز القصير ، وهذه المرة سترى قائمة غير مرتبة بالمشكلات. لكن انتظر! قبل المضي قدمًا ، دعنا نجري تحسينًا واحدًا حتى يسهل اختبار الكود الخاص بنا. (أنت تختبر ، أليس كذلك؟!) بدلاً من استخدام new
في وظيفتنا لإنشاء مثيل لفئة مكتبة GitHub ، دعنا نمررها كمعامل وننشئها فقط إذا كان علينا ذلك.
function github_issues_func( $atts, $gh=null ) { // Conditionally instantiate our class $gh = ( $gh ) ? $gh : new MyGithub(); …
يشبه هذا التعديل نمط حقن التبعية ، مما يجعل اختبار وظيفتنا أسهل بكثير. يعد اختبار وحدة WordPress خارج نطاق هذا البرنامج التعليمي ، ولكن من السهل أن نرى كيف أن هذا الإصدار الجديد يجعل من السهل علينا تمرير بيانات API "وهمية" إلى الوظيفة حتى تعرف تأكيدات الاختبار لدينا بالضبط ما يمكن توقعه.
ما حققناه حتى الآن جيد وجيد لمشروع داخلي سيتم استخدامه فقط في مستودع واحد ، ولكن سيكون أكثر فائدة إذا تمكن المستخدمون من تكوين المستودع لجلب المشكلات منه. لنقم بإعداد ذلك.
أولاً ، سنستخدم خطاف WordPress لتسجيل صفحة الإعدادات الجديدة ، وستحدد وظيفة رد الاتصال تسميات القائمة وعناوينها. سنستخدم نفس النهج التزايدي لجعله يعمل.
// Register the menu. add_action( "admin_menu", "gh_plugin_menu_func" ); function gh_plugin_menu_func() { add_submenu_page( "options-general.php", // Which menu parent "GitHub", // Page title "GitHub", // Menu title "manage_options", // Minimum capability (manage_options is an easy way to target administrators) "github", // Menu slug "gh_plugin_options" // Callback that prints the markup ); } // Print the markup for the page function gh_plugin_options() { if ( !current_user_can( "manage_options" ) ) { wp_die( __( "You do not have sufficient permissions to access this page." ) ); } echo "Hello world!"; }
الآن يجب أن تكون قادرًا على تسجيل الدخول إلى لوحة القيادة ورؤية قائمة GitHub الجديدة ضمن "الإعدادات" ثم النقر فوقها لرؤية صفحة إعدادات فارغة مع "Hello world!"


بعد ذلك ، سنستبدل Hello word
بالترميز الفعلي للنموذج. سأعطيك مثالًا مجردة يمكنك من تصفيفه بالقليل أو بقدر ما تريد.
?> <form method="post" action="<?php echo admin_url( 'admin-post.php'); ?>"> <input type="hidden" name="action" value="update_github_settings" /> <h3><?php _e("GitHub Repository Info", "github-api"); ?></h3> <p> <label><?php _e("GitHub Organization:", "github-api"); ?></label> <input class="" type="text" name="gh_org" value="<?php echo get_option('gh_org'); ?>" /> </p> <p> <label><?php _e("GitHub repository (slug):", "github-api"); ?></label> <input class="" type="text" name="gh_repo" value="<?php echo get_option('gh_repo'); ?>" /> </p> <input class="button button-primary" type="submit" value="<?php _e("Save", "github-api"); ?>" /> </form> <?php
تتطابق فئات CSS التي قمت بتضمينها مع تلك المستخدمة من قبل نواة WordPress ، وهي طريقة رائعة للحصول على صفحة الخيارات المخصصة الخاصة بك لتبدو لائقة دون أي جهد إضافي.

هناك شيئان مهمان لفهم هذا النموذج. أولاً ، يجب أن تكون نقطة النهاية التي ترسل إليها /wp-admin/admin-post.php
. يمكنك ترميز هذا المسار بشكل ثابت ، ولكن إذا تم تثبيت موقع الويب في دليل فرعي ، فلن يعمل. لذلك ، نستخدم admin_url()
المدمج لإنشائه ديناميكيًا.
ثانيًا ، لاحظ الإدخال المخفي مع action
الاسم. هذا الحقل هو كيف يعرف WordPress ما يجب فعله مع طلب النشر الذي يتم إرساله بواسطة النموذج. تتوافق value
مع اسم خطاف الإجراء الذي سنستخدمه لتعيين وظيفة رد الاتصال. سيكون اسم الإجراء الذي سنربطه هو هذه القيمة ، مسبوقة بمنشور admin post
. لذلك ، في حالتنا ، نحتاج إلى إضافة هذا:
add_action( 'admin_post_update_github_settings', 'github_handle_save' );
أجد أن هذا أحد الجوانب الأكثر غرابة والأقل بديهية لإنشاء قوائم إدارة مخصصة ، ولكن بمجرد أن تعتاد عليها ، سيكون الأمر غير مؤلم إلى حد كبير. كما قد تكون خمنت ، فإن المعلمة الثانية لـ add_action()
هي اسم وظيفة رد الاتصال التي ستحفظ القيم في قاعدة البيانات بالفعل.
function github_handle_save() { // Get the options that were sent $org = (!empty($_POST["gh_org"])) ? $_POST["gh_org"] : NULL; $repo = (!empty($_POST["gh_repo"])) ? $_POST["gh_repo"] : NULL; // Validation would go here // Update the values update_option( "gh_repo", $repo, TRUE ); update_option("gh_org", $org, TRUE); // Redirect back to settings page // The ?page=github corresponds to the "slug" // set in the fourth parameter of add_submenu_page() above. $redirect_url = get_bloginfo("url") . "/wp-admin/options-general.php?page=github&status=success"; header("Location: ".$redirect_url); exit; }
هذا المثال ضئيل للغاية أيضًا. في إعداد الإنتاج ، قد ترغب على الأرجح في إضافة بعض التحقق من الصحة. أيضًا ، في هذا المثال ، نعيد تلقائيًا status=success
إلى عنوان URL. ترميز النموذج لا يستخدمه بالفعل حتى الآن. لإظهار رسالة نجاح بشكل مشروط ، أضف شيئًا مثل ما يلي أعلاه النموذج في gh_plugin_options()
:
if ( isset($_GET['status']) && $_GET['status']=='success') { ?> <div class="updated notice is-dismissible"> <p><?php _e("Settings updated!", "github-api"); ?></p> <button type="button" class="notice-dismiss"> <span class="screen-reader-text"><?php _e("Dismiss this notice.", "github-api"); ?></span> </button> </div> <?php }
إذا قمت بإضافة التحقق من الصحة ، فاستخدم نفس النمط لتمرير حالات ورسائل مختلفة بحيث يعرف المستخدم ما إذا كان قد فشل إرسال النموذج وسببه.
الآن يجب أن تكون قادرًا على حفظ قيم المالك والمستودع الجديدة. اختبره عن طريق إدخال المالك والمستودع لأي مشروع عام على GitHub. الخطوة الأخيرة هي العودة إلى وظيفة رد الاتصال بالرمز القصير github_issues_func()
واستبدال قيم المالك والمستودع المشفرة.
… $issues = $gh->api("issue")->all(get_option("gh_org"), get_option("gh_repo")); …
بمجرد أن يصبح هذا في مكانه ، قم بإعادة زيارة الصفحة حيث قمت بإضافة الرمز القصير. يجب أن تشاهد الآن مشكلات من أي مشروع تحدده.
جولة إضافية: مصادقة OAuth 2.0
النهج الذي استخدمناه أعلاه يعمل بشكل رائع مع المستودعات العامة ، ولكن ماذا لو أردنا استخدام هذا المكون الإضافي مع مستودع خاص يتطلب المصادقة؟ تقوم GitHub API بالمصادقة باستخدام بروتوكول OAuth 2.0 ، وهو ما ستواجهه في العمل مع واجهات برمجة التطبيقات الأكثر شيوعًا هذه الأيام. يسير سير عمل OAuth 2.0 الأساسي على النحو التالي:
- تقوم بتسجيل تطبيق (يسمى أحيانًا "العميل") مع الموفر وتتلقى معرفًا فريدًا ومفتاحًا سريًا.
- يقدم تطبيقك طلبًا إلى نقطة نهاية مصادقة الموفر ، ويمرر بيانات الاعتماد أعلاه بالإضافة إلى عنوان URL لإعادة التوجيه الذي يستخدمه الموفر لإعادة توجيه الطلب إلى نقطة نهاية التطبيق الخاص بك.
- ثم يُطلب من المستخدم قبول طلبك للوصول. إذا فعلوا ذلك ، يستخدم الموفر عنوان URL الذي أرسلته مع الطلب لإعادة توجيه المستخدم مرة أخرى إلى التطبيق الخاص بك ، إلى جانب رمز مؤقت.
- يلتقط تطبيقك هذا الرمز ثم يقدم طلبًا ثانيًا ، ويمرر هذا الرمز مرة أخرى إلى المزود. يستجيب الموفر برمز وصول يستخدمه تطبيقك بعد ذلك للمصادقة مع الموفر.
سنبدأ بتسجيل تطبيق على GitHub. كما هو الحال مع واجهات برمجة التطبيقات الأكثر شيوعًا ، يقع هذا القسم في منطقة المطورين بالموقع.

أهم شيء هنا هو عنوان URL لمعاودة الاتصال. يجب أن يتطابق عنوان URL لإعادة التوجيه الذي تم تمريره في الخطوة الثالثة مع ما تقوم بإدخاله هنا أو تضمينه. لذلك ، أثناء التطوير ، عادةً ما أدخل الصفحة الرئيسية للموقع. بهذه الطريقة ، يمكن لتطبيقي إعادة التوجيه إلى أي مسار.
بعد ذلك ، سنضيف نموذجًا ثانيًا إلى صفحة الإعدادات الخاصة بنا ، في gh_plugin_options()
، لإرسال معرف العميل الخاص بالتطبيق والسر.
<form method="post" action="<?php echo admin_url( 'admin-post.php'); ?>"> <input type="hidden" name="action" value="oauth_submit" /> <h3>Oauth 2.0</h3> <p> <label><?php _e("GitHub Application Client ID:", "github-api"); ?></label> <input class="" type="text" name="client_id" value="<?php echo get_option('client_id')?>" /> </p> <p> <label><?php _e("GitHub Application Client Secret:", "github-api"); ?></label> <input class="" type="password" name="client_secret" value="<?php echo get_option('client_secret')?>" /> </p> <input class="button button-primary" type="submit" value="<?php _e("Authorize", "github-api"); ?>" /> </form>
لتسهيل الحياة ، سأستخدم GitHub Provider for OAuth 2.0 Client من The League of Extraordinary Packages. لذلك ، أولاً ، دعنا نستخدم Composer مرة أخرى لإضافة التبعية:
composer require league/oauth2-github
لاحظ أن مكتبة GitHub من KNP Labs تحتوي أيضًا على دعم OAuth 2.0 مدمج. لذلك ، في المثال الخاص بي ، هذا زائد إلى حد ما. لكنني أردت تقديم هذه المكتبة لأنها تنتمي إلى مجموعة من مكتبات عملاء OAuth 2.0 الخاصة بالمزود والتي تمتد جميعها إلى نفس الإطار الذي تحتفظ به League of Extraordinary Packages. يمكنك عرض قائمة كاملة بالموفرين المدعومين أو قراءة التعليمات حول كيفية توسيع إطار العمل لدعم مزود جديد.
دعونا ننشئ وظيفة لطلب وحفظ الرمز المميز عندما يرسل المستخدم النموذج. نظرًا لأن GitHub هو أحد الموفرين المدعومين بالفعل ، يمكنني نسخ المثال في وثائقه مع تعديلين فقط.
function handle_oauth() { // If the form was just submitted, save the values // (Step 1 above) if ( isset($_POST["client_id"]) && isset($_POST["client_secret"]) ) { update_option( "client_id", $_POST["client_id"], TRUE ); update_option("client_secret", $_POST["client_secret"], TRUE); } // Get the saved application info $client_id = get_option("client_id"); $client_secret = get_option("client_secret"); if ($client_id && $client_secret) { $provider = new League\OAuth2\Client\Provider\Github([ "clientId" => $client_id, "clientSecret" => $client_secret, "redirectUri" => admin_url("options-general.php?page=github"), ]); } // If this is a form submission, start the workflow // (Step 2) if (!isset($_GET["code"]) && $_SERVER["REQUEST_METHOD"] === "POST") { // If we don't have an authorization code, then get one $authUrl = $provider->getAuthorizationUrl(); $_SESSION["oauth2state"] = $provider->getState(); header("Location: ".$authUrl); exit; // Check given state against previously stored one to mitigate CSRF attack // (Step 3 just happened and the user was redirected back) } elseif (empty($_GET["state"]) || ($_GET["state"] !== $_SESSION["oauth2state"])) { unset($_SESSION["oauth2state"]); exit("Invalid state"); } else { // Try to get an access token (using the authorization code grant) // (Step 4) $token = $provider->getAccessToken("authorization_code", [ "code" => $_GET["code"] ]); // Save the token for future use update_option( "github_token", $token->getToken(), TRUE ); } }
وكما فعلنا مع النموذج الآخر ، نحتاج إلى إضافة خطاف الإجراء بحيث يتم استدعاء الوظيفة عند حفظ النموذج.
add_action( "admin_post_oauth_submit", "handle_oauth" );
يجب أن يؤدي حفظ النموذج الآن إلى إرسالك إلى صفحة التفويض الخاصة بموفر واجهة برمجة التطبيقات. بعد التفويض ، يمكن لتطبيقك استخدام الرمز المميز المحفوظ لطلب البيانات من المستودعات الخاصة التي يمكنك الوصول إليها. المكتبة التي أستخدمها بواسطة KNP Labs لديها طريقة سهلة لهذا الغرض.
$gh = new MyGithub(); $gh->authenticate( get_option("github_token"), NULL, Github\Client::AUTH_HTTP_TOKEN);
ستختلف المكتبات على وجه التحديد في كيفية تعاملها مع المصادقة ، ولكن بطريقة أو بأخرى ، سوف تقوم بتمرير الرمز المميز ، والذي سيقوم بعد ذلك بتقديم طلبات مصادقة نيابة عن المستخدم.
خاتمة
لقد غطينا الكثير من الأمور ، وحاولت الاحتفاظ بالأمثلة بأدنى حد ممكن حتى يظل سير العمل الإجمالي واضحًا. كود المصدر الكامل من هذا البرنامج التعليمي متاح. آمل أن يكون لديك الآن فهم واضح للأجزاء المتحركة المتضمنة في إنشاء مكون إضافي لبرنامج WordPress يستهلك واجهات برمجة تطبيقات خدمة الطرف الثالث ، ونأمل أن تكون مصدر إلهام لكتابة مكون WordPress API الإضافي الخاص بك.
ملاحظات نهائية
- WordPress Codex (التوثيق)
- GitHub API (وثائق)
- OAuth 2.0 (وثائق)
- الملحن (التوثيق)
- رابطة الحزم غير العادية
- وثائق الإسراف في الشراب