يمكنك استخدام إضافة WP Discourse لنشر مشاركات WordPress على منصة Discourse الخاصة بك، بحيث يتمكن مجتمعك من مناقشة محتوى WordPress الخاص بك. قبل إعداد النشر، يجب أولاً تثبيت إضافة WP Discourse على WordPress و ربطها بمنصة Discourse. إذا كنت مستعدًا للبدء، ابدأ بمشاهدة هذا الفيديو القصير، أو اتبع التعليمات أدناه.
الخطوة التالية
بمجرد إعداد النشر، قد ترغب في الاطلاع على المواضيع التالية:
- استخدام Discourse لتعليقات WordPress
- تسجيل الدخول إلى Discourse باستخدام WordPress (DiscourseConnect)
التعليمات
إعدادات النشر
تأكد دائمًا من حفظ إعداداتك بعد تغييرها. انقر على زر «حفظ الخيارات» في أسفل الصفحة.
يجب أن تكون الإعدادات واضحة إلى حد كبير. إذا واجهت صعوبة في فهم أي منها، يرجى الرد على هذا الموضوع للحصول على توضيح إضافي.
الفئة الافتراضية في Discourse
تحدد الفئة الافتراضية التي سيتم نشر مشاركاتك فيها على Discourse. يمكن تجاوز هذه الإعداد لكل منشور على شاشة إنشاء منشور جديد في WordPress.
عرض الفئات الفرعية
يوضح ما إذا كنت تريد أن تكون الفئات الفرعية الخاصة بمنتداك متاحة كفئات يمكنك النشر إليها من WordPress. ستحتاج إلى حفظ هذه الإعداد قبل أن تصبح الفئات الفرعية متاحة في حقل إدخال «الفئة الافتراضية في Discourse».
فرض تحديث الفئة
يُستخدم عندما تضيف فئات جديدة إلى منتداك وتود أن تصبح متاحة على موقع WordPress الخاص بك. عند تفعيل هذا الإعداد وحفظ صفحة الخيارات، يتم إجراء مكالمة API واحدة إلى Discourse لاسترجاع فئات Discourse. بعد تفعيله، ستجد الإعداد معطلًا في المرة التالية التي تنتقل فيها إلى علامة التبويب «التعليقات».
السماح بالوسوم
قم بتفعيل هذا إذا كنت ترغب في إضافة وسوم إلى مواضيع Discourse التي يتم إنشاؤها عبر WordPress.
النشر كمواضيع غير مدرجة
سيؤدي هذا إلى جعل المنشورات المنشورة من WordPress غير مدرجة في Discourse. إذا قمت بتفعيل إعداد Webhook «مزامنة بيانات التعليقات»، فستصبح المنشورات غير المدرجة مرئية عند تلقي أول رد عليها في Discourse.
استخدام محتوى المنشور الكامل
يسمح لك بنشر منشورات WordPress كاملة بدلاً من مقتطفات إلى منتدى Discourse. لمنع ظهور زر «إظهار المنشور الكامل» تحت منشورك على Discourse، يجب إلغاء تحديد إعداد الموقع «تقطيع التضمين» في Discourse (الموجود في yourforum.com/admin/site_settings/category/posting).
طول المقتطف المخصص
إذا لم تقم بتحديد إعداد «استخدام محتوى المنشور الكامل»، فسيؤدي هذا الإعداد إلى إنشاء مقتطفات بهذا الطول ليتم نشرها على Discourse. يمكنك أيضًا إنشاء مقتطفات يدويًا عند إنشاء منشور WordPress عن طريق إضافة المقتطف إلى مربع البيانات الوصفية «المقتطف».
النشر التلقائي
يقوم هذا بالتحقق مسبقًا من مربع الاختيار «النشر على Discourse» الذي يظهر على شاشة إنشاء منشور جديد لأنواع المنشورات التي سيتم نشرها على Discourse. لا يزال بإمكانك إلغاء تحديد المربع عند إنشاء المنشور.
تتبع المواضيع المنشورة تلقائيًا
يتم تفعيل هذا الإعداد افتراضيًا. عند تفعيله، سيتم «مراقبة» مؤلف المنشور الذي يتم نشره على Discourse من WordPress تلقائيًا للموضوع (سيستقبل إشعارات Discourse حول كل رد جديد).
أنواع المنشورات المراد نشرها
يجب تحديد هذا الإعداد. الافتراضي هو post، ولكن يمكن أيضًا اختيار الصفحات وأنواع المنشورات المخصصة.
استبعاد المنشورات حسب الوسم
إذا أضفت وسوم WordPress إلى هذا الإعداد، فلن يتم نشر أي منشور WordPress يحتوي على أحد هذه الوسوم على Discourse.
عدم عرض حقل اسم المستخدم في Discourse
سيؤدي هذا إلى إخفاء حقل «اسم المستخدم في Discourse» في ملفات تعريف المستخدمين. يُستخدم اسم المستخدم في Discourse لتحديد مؤلف الموضوع عند نشر المنشورات على Discourse.
إمكانية تعديل اسم المستخدم في Discourse
يحدد ما إذا كان بإمكان غير المدراء تعديل اسم المستخدم الخاص بهم في Discourse في ملفهم الشخصي. يُستخدم اسم المستخدم في Discourse لتحديد مؤلف الموضوع عند نشر المنشورات على Discourse.
أعلام النشر المباشر لقاعدة البيانات
يُستخدم هذا الإعداد في بعض التكوينات التي تحتوي على بيئات WordPress متخصصة. لا تستخدم هذا الإعداد إلا إذا كنت تعرف ما يفعله.
سجلات النشر التفصيلية
سيؤدي تفعيل هذا الإعداد إلى تسجيل جميع المنشورات المنشورة على Discourse في سجلات WP Discourse، حتى لو نجحت. عادةً ما يتم تسجيل الأخطاء فقط.
تمكين النشر عبر XML-RPC
XML-RPC هو استدعاء إجراء عن بُعد يُستخدم غالبًا بواسطة برامج التدوين لإرسال المنشورات إلى WordPress. تتضمن التطبيقات التي تستخدم هذه العملية تطبيق التدوين الخاص بـ wordpress.com تطبيق التدوين.
افتراضيًا، لن تقوم إضافة WP Discourse بنشر المنشورات إلى Discourse التي يتم إنشاؤها عبر XML-RPC. والسبب في ذلك هو عدم وجود طريقة جيدة للإشارة إلى ما إذا كان المنشور المنشور عبر برنامج التدوين مخصصًا للنشر على Discourse.
إذا كنت ترغب في استخدام برنامج التدوين لإنشاء منشورات يتم نشرها مباشرة على Discourse، فأنت بحاجة إلى إضافة بعض الكود إلى ملف functions.php في قالبك الذي يتصل بفلتر wp_discourse_before_xmlrpc_publish. يمرر فلتر wp_discourse_before_xmlrpc_publish حجتين إلى الدوال المتصلة به. الحجة الأولى، $publish_to_discourse، هي قيمة منطقية (boolean) مضبوطة على false لتعطيل النشر عبر XML-RPC. والحجة الثانية هي كائن post.
لجعل جميع منشورات XML-RPC تُنشر تلقائيًا بواسطة Discourse، تحتاج إلى كتابة دالة ستعيد دائمًا true. استخدم كودًا مشابهًا للكود التالي:
تحذير: سيؤدي هذا إلى نشر جميع المنشورات المنشورة عبر XML-RPC على Discourse، بما في ذلك المنشورات القديمة التي يتم تعديلها في برنامج التدوين.
add_filter('wp_discourse_before_xmlrpc_publish', 'my_namespace_xmlrpc_publish', 10, 2 );
function my_namespace_xmlrpc_publish( $publish_to_discourse, $post ) {
return true;
}
تصفية منشورات XML-RPC حسب وسم المنشور
يتيح تطبيق التدوين الخاص بـ wordpress.com إضافة وسوم إلى المنشورات. يمكن استخدام الوسوم للتحكم في ما إذا كان سيتم نشر المنشور على Discourse أم لا. لنشر المنشورات التي تحتوي على وسم ‘discourse’ فقط، استخدم شيئًا مثل هذا:
add_filter('wp_discourse_before_xmlrpc_publish', 'my_namespace_xmlrpc_publish_by_tag', 10, 2 );
function my_namespace_xmlrpc_publish_by_tag( $publish_to_discourse, $post ) {
if ( has_tag( 'discourse', $post ) ) {
return true;
}
return false;
}
إذا كنت ترغب في استخدام هذه الطريقة ولكن لا تريد ظهور وسم discourse في منشوراتك المنشورة، فيمكنك إزالته بكود مشابه لهذا:
add_filter( 'term_links-post_tag', 'my_prefix_remove_discourse_tag' );
function my_prefix_remove_discourse_tag( $tags ) {
foreach( $tags as $key => $value ) {
if ( strpos( $value, 'discourse' ) ) {
unset( $tags[ $key ] );
}
}
return $tags;
}
تصفية منشورات XML-RPC حسب تاريخ المنشور
للسماح فقط بنشر المنشورات المنشورة بعد تاريخ معين على Discourse عبر XML-RPC، أضف كودًا مشابهًا لهذا إلى ملف functions.php الخاص بك. سيسمح هذا الكود بنشر جميع المنشورات المنشورة بعد 1 يناير 2016 على Discourse.
add_filter('wp_discourse_before_xmlrpc_publish', 'my_namespace_xmlrpc_publish_by_date', 10, 2 );
function my_namespace_xmlrpc_publish_by_date( $publish_to_discourse, $post ) {
if ( strtotime( $post->post_date ) > strtotime( '2016-01-01') ) {
return true;
}
return false;
}
قيد التنفيذ: إضافة فلتر إلى إضافة wp-discourse للسماح بنشر المنشورات الجديدة فقط (وليس المنشورات المعدلة) عبر XML-RPC.
تصفية الفئات المتاحة لنوع منشور مخصص
قبل عرض فئات Discourse في مربع البيانات الوصفية «النشر على Discourse» على صفحة admin/post-new في WordPress، يتم تطبيق فلتر WordPress 'wp_discourse_publish_categories' عليها. يتم تمرير مصفوفة فئات Discourse والمنشور الحالي كحجج. يمكن استخدام هذا في ملف functions.php في قالبك لتقييد الفئات المتاحة لنوع منشور معين.
إليك مثال ينشئ نوع منشور 'acme_product' ثم يعيد فئات Discourse ‘fun’ و ‘scratch’ لعرضها في مربع البيانات الوصفية «النشر على Discourse» لمنشورات هذا النوع.
// إنشاء نوع المنشور.
add_action( 'init', 'my_namespace_create_post_type' );
function my_namespace_create_post_type() {
register_post_type( 'acme_product',
array(
'labels' => array(
'name' => __( 'Products' ),
'singular_name' => __( 'Product' )
),
'public' => true,
'supports' => array( 'title', 'editor', 'comments', 'custom-fields' ),
'has_archive' => true,
'show_in_rest' => true,
)
);
}
// تصفية الفئات المتاحة لنوع المنشور 'acme_product'.
add_filter( 'wp_discourse_publish_categories', 'my_namespace_filter_categories', 10, 2 );
function my_namespace_filter_categories( $categories, $post ) {
if ( 'acme_product' === get_post_type( $post ) ) {
$output = [];
foreach ( $categories as $category ) {
if ( 'fun' === $category['name'] || 'scratch' === $category['name'] ) {
$output[] = $category;
}
}
return $output;
}
return $categories;
}
إذا كنت ترغب في تطبيق فئة محددة بدقة على أنواع منشورات معينة (أي 1:1)، فيجب عليك استخدام wpdc_publish_post_category بدلاً من ذلك.
function wpdc_change_post_category( $category, $post_id ) {
if ( 'acme_product' === get_post_type( $post ) ) {
$categories = WPDiscourse\Utilities\Utilities::get_discourse_categories();
$fun_category = array_search( 'fun' , array_column( $categories, 'name' ));
return $fun_category;
} else {
return $category;
}
}
add_filter( 'wpdc_publish_post_category', 'wpdc_change_post_category' );
عرض بيانات وصفية لموضوع Discourse متصل
عند إعداد النشر، يمكنك عرض بيانات وصفية حول موضوع Discourse باستخدام تخصيص القوالب.
أولاً، يجب عليك تحديد القالب الذي ترغب في تعديله. إذا كنت، على سبيل المثال، ترغب فقط في عرض بيانات وصفية للموضوع دون عرض الردود كتعليقات، فستحتاج إلى تعديل قالب no_replies.
بمجرد اختيار القالب، يمكنك تعديله لإضافة بيانات وصفية لموضوع Discourse. إليك مقتطف يقوم بذلك، مع بعض التعليقات التي تشرح ما يفعله الكود:
// التأكد من وجود wp-discourse باستخدام الطريقة المفضلة لديك،
// على سبيل المثال: https://wordpress.stackexchange.com/questions/127818/how-to-make-a-plugin-require-another-plugin
// استيراد أدوات الإضافة من إضافة wp-discourse
require_once ABSPATH . 'wp-content/plugins/wp-discourse/lib/plugin-utilities.php';
use WPDiscourse\Shared\PluginUtilities;
// تغليف قالب بيانات وصفية للموضوع في فئة لتتمكن من تضمين أدوات الإضافة بسهولة
class DiscourseTopicMetadata {
// تضمين أدوات إضافة WordPress في فئتك
use PluginUtilities;
public function __construct() {
// إضافة فلتر القالب عند تهيئة الفئة
add_filter( 'discourse_no_replies_html', array( $this, 'topic_metadata_html' ) );
}
function topic_metadata_html( $input ) {
// الحصول على الرابط الدائم لـ Discourse من بيانات وصفية المنشور
$discourse_permalink = get_post_meta( get_the_ID(), 'discourse_permalink', true );
// استخدام الرابط الدائم لـ Discourse للحصول على JSON للموضوع من Discourse، باستخدام طريقة المساعدة من أدوات الإضافة التي تتعامل مع التفويض نيابة عنك
$topic = $this->get_discourse_topic($discourse_permalink);
// إخراج علامات HTML الخاصة بك، بما في ذلك بيانات وصفية للموضوع ترغب في عرضها
ob_start();
?>
<div id="discourse-topic-meta">
<div class="views">
عدد المشاهدات
<?php echo $topic->views; ?>
</div>
<div class="replies">
عدد الردود
<?php echo $topic->reply_count; ?>
</div>
</div>
<?php
return ob_get_clean();
}
}
// إنشاء نسخة من الفئة لإضافة الفلتر
new DiscourseTopicMetadata();
لمزيد من التفاصيل حول بيانات وصفية الموضوع المتاحة في الاستجابة من get_discourse_topic، راجع Discourse API Docs.

