استخدم WP Discourse لنشر المشاركات من Wordpress إلى Discourse

يمكنك استخدام إضافة WP Discourse لنشر مشاركات WordPress على منصة Discourse الخاصة بك، بحيث يتمكن مجتمعك من مناقشة محتوى WordPress الخاص بك. قبل إعداد النشر، يجب أولاً تثبيت إضافة WP Discourse على WordPress و ربطها بمنصة Discourse. إذا كنت مستعدًا للبدء، ابدأ بمشاهدة هذا الفيديو القصير، أو اتبع التعليمات أدناه.

الخطوة التالية

بمجرد إعداد النشر، قد ترغب في الاطلاع على المواضيع التالية:


التعليمات

إعدادات النشر

:warning: تأكد دائمًا من حفظ إعداداتك بعد تغييرها. انقر على زر «حفظ الخيارات» في أسفل الصفحة.

يجب أن تكون الإعدادات واضحة إلى حد كبير. إذا واجهت صعوبة في فهم أي منها، يرجى الرد على هذا الموضوع للحصول على توضيح إضافي.

الفئة الافتراضية في 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.

10 إعجابات

هل يمكن استيراد منشورات المدونة التي تم نشرها سابقًا؟ على سبيل المثال، منشورات المدونة من آخر 30 يومًا؟ فقط لملء تلك الفئة قليلاً. شكرًا.

إعجابَين (2)

لا يوجد خيار استيراد دفعة في الوقت الحالي. لا يزال بإمكانك تحقيق ذلك عن طريق تحرير كل منشور من المنشورات القديمة ونشرها على Discourse.

إعجابَين (2)

أقوم بإعداد مواقعي بحيث يسجل عدد قليل فقط من الأشخاص في ووردبريس (المؤلفون)، لكن ديسكورس مفتوح لأي شخص تقريبًا. يستخدم ديسكورس للمصادقة.

أود أن تعرض المواضيع التي تم إنشاؤها من المقالات اسم مستخدم ديسكورس بدلاً من “النظام” (أو أي شيء أقوم بتعيينه لـ اسم مستخدم النشر).

بمعنى آخر، تم تعيين اسم مستخدم النشر على “النظام”. ينشر جو بلو مقالًا جديدًا في ووردبريس. جو بلو موجود في ديسكورس (نظرًا لأن ديسكورس يتحكم في المصادقة، فإن جميع مستخدمي ووردبريس هم أيضًا مستخدمو ديسكورس). أود أن يظهر الموضوع على أنه تم نشره بواسطة جو بلو بدلاً من النظام. لاحقًا، في نفس المواقع، تنشر جين دو مقالًا، أود أن يظهر الموضوع في ديسكورس على أنه تم نشره بواسطة جين دو بدلاً من النظام.

هل هذا قابل للتنفيذ؟

لا أعرف. ولكن إذا قمت بالتحقق من علامة التبويب Publish (نشر) وخيارها الأخير Single User API Key Publication (نشر مفتاح واجهة برمجة تطبيقات مستخدم واحد) — فهذا شيء سأحاوله أولاً.

إذا كنت تستخدم DiscourseSSO (أو أي اتصال آخر كان أو ما زال…) فلا يمكن لأحد التسجيل في منتداك دون المرور عبر WordPress. لذا، إذا كان WordPress يتحكم في حسابات المحررين على Discourse، فكيف ستفعل ذلك دون المطالبة بالتسجيل أولاً في WordPress للجميع؟ أنا فضولي لأنني قد أستخدم شيئًا كهذا.

(و… أنا خارج الموضوع مرة أخرى :man_facepalming:)

لقد استخدمت إعداد عميل DiscourseConnect. يستخدم هذا نظام Discourse كنظام مصادقة، وينشئ المستخدم في ووردبريس إذا لم يكن موجودًا. من تعليمات المكون الإضافي.

“يتيح تمكين موقعك ليعمل كعميل DiscourseConnect مصادقة مستخدمي ووردبريس إما من خلال منتدى Discourse الخاص بك، أو موقع ووردبريس الخاص بك. إذا قام مستخدم Discourse بتسجيل الدخول إلى ووردبريس عبر رابط DiscourseConnect، فسيتم مصادقته بناءً على بيانات اعتماده في Discourse. إذا لم يكن هذا المستخدم موجودًا بالفعل في موقع ووردبريس الخاص بك، فسيتم إنشاء مستخدم جديد.”

سيتم تعيين المستخدمين في البداية كمشتركين في ووردبريس، وسأقوم بتعيينهم يدويًا كمؤلفين (حسب الحاجة). أخطط لإعداد الموقع بحيث يتمكن المستخدمون غير المسجلين من رؤية جميع المحتويات، وسيحتاجون حقًا إلى التسجيل في ووردبريس فقط إذا أرادوا نشر المقالات.

سيحتاج جميع المستخدمين في ووردبريس أولاً إلى التسجيل في Discourse، ثم سيقوم الموصل تلقائيًا بتسجيل دخولهم إلى ووردبريس، أو إنشاء حساب ثم تسجيل دخولهم.

نعم، ولكنه يتجاوز جميع الطرق الأخرى للمصادقة، ثم يجب على المستخدم العادي للمنتدى التسجيل في WordPress قبل الحصول على حق الوصول إلى Discourse.

أم أنني أسأت الفهم؟

من خلال ما رأيته، لا يحتاج مستخدم Discourse العادي أبدًا إلى الانتقال إلى موقع WP. إذا قرروا متابعة رابط من موقع Discourse، يتم تسجيلهم تلقائيًا في موقع WP.

أنت مرحب بك لإلقاء نظرة على الموقعين لترى ما أتحدث عنه. ضع في اعتبارك أنهما لم يكتملان بعد، ولكن هذا الجزء يعمل الآن.
Https://forum.oursail.boats هو Discourse
Https://www.oursail.boats هو موقع WP.

قم بإنشاء حساب على موقع WP. ستتمكن من رؤية الرسائل هناك والرد عليها.

ثم انتقل إلى موقع WP، وحدد عنصر القائمة تسجيل الدخول. سيتجاوز تسجيل دخول WP، وسيتصل بك بدلاً من ذلك بتسجيل دخول Discourse (اعتمادًا على إعداداتك). إذا اخترت خيار البقاء مسجلاً للدخول، فلن يطلب منك ذلك حتى. سيعود فورًا إلى موقع WP بعد تسجيل دخولك.

تحتاج فقط إلى التأكد من أن المستخدمين الذين ينشرون المقالات على Wordpress لديهم اسم مستخدم Discourse الخاص بهم مملوءًا في ملف تعريف المستخدم. إذا كان لدى المستخدم اسم مستخدم Discourse، فسيتم نشر المشاركات التي يقوم بها في Wordpress إلى Discourse باستخدام اسم المستخدم الخاص به.

يمكنك تحديث هذا يدويًا، أو تحديثه تلقائيًا باستخدام خطاف الويب Update Userdata (انظر إعدادات WP Discourse “Webhooks”).

3 إعجابات

قبل أن أقوم بتحرير 393 منشورًا منشورًا يدويًا على ووردبريس الخاص بي، أردت فقط التحقق مرة أخرى مما إذا كان هذا لا يزال هو الحال؟ أي، أنه لا يزال لا يوجد خيار استيراد مجمع؟ شكرًا!

لا يوجد خيار استيراد جماعي. ضع في اعتبارك أنه إذا قمت بنشر 393 مشاركة في Discourse، فسيكون لديك 393 نموذجًا للموضوع. أنصحك بالتفكير في استراتيجية أكثر استهدافًا. ما الذي ستناقشه مجتمعك بالفعل الآن؟

إعجابَين (2)

تخميني هو أنهم لن يفعلوا ذلك. يتم استخدام Discourse فقط لاستبدال التعليقات، لا شيء آخر. لذا، فهو ليس لـ Discourse، بل لـ WordPress.

كنت في وضع مماثل. نظرًا لأن معظم منشورات WordPress في العالم لا تحصل على أي نوع من التعليقات، أو أنها أكثر أو أقل مجرد ضوضاء، فلم تكن لدي مختلفة. ولكن بدلاً من العمل مع كل المحتوى، كنت أستخدم محتوى WP القديم الخاص بي لإيقاظ النشاط على Discourse. لم أقم بتوصيل جميع المنشورات دفعة واحدة، بل بشكل متقطع. مثل الآن هناك مواضيع نشطة حول ضربة الشمس لدى الكلاب وكم عدد السعرات الحرارية التي يجب أن تتناولها في المسار - منشورات قديمة، حصلت على حياة جديدة على Discourse.

لو كان هناك خيار لتوصيل كل شيء دفعة واحدة، لفعلت ذلك - دون فهم مثل هذه الإمكانات الضائعة. يمكنني حتى القول، أن دفن خيار الدفعة ستة أقدام تحت الأرض حتى لو كان بإمكانك ترميزه :wink:

إعجابَين (2)

أحاول فقط إدخال جميع التعليقات في Discourse قبل ترحيل موقع الويب من WordPress إلى Ghost حيث أن Ghost لا يقوم بالتعليقات (على الرغم من أنه يمكنك ربطه بـ Discourse للتعليقات).

لكن ما خطر ببالي الآن هو أنه إذا قمت أولاً بربط Ghost الجديد الخاص بي بـ Discourse الخاص بي قبل استيراد جميع منشورات WordPress الخاصة بي، فقد يؤدي ذلك إلى ذلك… ربما (/أذهب لتجربة ذلك…)

لا يقوم بترحيل التعليقات من WP إلى Discourse. إنه يعرض فقط منشورات Discourse في WordPress.

إذا فهمت بشكل صحيح…

إعجاب واحد (1)

لا جدوى من ربط منشورات Wordpress بمواضيع Discourse إذا كنت على وشك الانتقال إلى Ghost.

مرحباً بالجميع!

لقد أكملت للتو إعداد مجتمعي باستخدام Discourse! أقوم حاليًا باختبار المكون الإضافي WP Discourse على موقع الاختبار الخاص بي.

لدي قلق بشأن مشاكل تحسين محركات البحث المحتملة. على وجه التحديد، من خلال نشر نفس المحتوى من WP إلى Discourse، أنا قلق بشأن تكرار المحتوى وفقًا لمشاكل تحسين محركات البحث. هل يميز Discourse المحتوى في المنتدى كنسخة لأغراض تحسين محركات البحث؟

مرحباً فيكتور :slight_smile:

يجب أن تكون بخير من ناحية تحسين محركات البحث (SEO) بالإعدادات الافتراضية (لأنها نطاقات مختلفة)، ولكن يمكنك أيضًا تعيين عنوان URL الأساسي لموضوع Discourse ليكون عنوان URL لمنشور WordPress.

قم بتمكين إعداد موقع Discourse embed set canonical url، ثم سيكون الرابط الدائم لمنشور WP هو عنوان URL الأساسي لموضوع Discourse (أي، سيظهر في head من HTML لموضوع Discourse كرابط أساسي).

لمزيد من السياق حول هذا، انظر

إعجاب واحد (1)

شكراً @angus. أقدر ذلك حقًا. بالنسبة لي، من الأسلم التحكم في تحسين محركات البحث (SEO) بدلاً من تركه للصدفة!

إعجاب واحد (1)

أحاول تعيين فئات مختلفة لأنواع منشورات مخصصة مختلفة، الكود أدناه يحدد الفئة الصحيحة في مسؤول ووردبريس. ومع ذلك، عند النشر على Discourse، لا يتم تعيين الفئة هناك (وتكون افتراضية إلى غير مصنفة)…
هل ربما أفتقد شيئًا واضحًا؟

// WP Discourse set CPT forum categories for CPTS
 
add_filter( 'wp_discourse_publish_categories', 'radhr_filter_categories_policies', 10, 2 );
function radhr_filter_categories( $categories, $post ) {
	if ( 'policy' === get_post_type( $post ) ) {
		$output = [];
		foreach ( $categories as $category ) {
			if ( 'Policies' === $category['name']) {
				$output[] = $category;
			}
		}
		return $output;
	} 
	
	elseif ( 'guide' === get_post_type( $post ) ) {
		$output = [];
		foreach ( $categories as $category ) {
			if ( 'Guides' === $category['name']) {
				$output[] = $category;
			}
		}
		return $output;
	}
	
	elseif ( 'post' === get_post_type( $post ) ) {
		$output = [];
		foreach ( $categories as $category ) {
			if ( 'Blogs' === $category['name']) {
				$output[] = $category;
			}
		}
		return $output;
	}

	return $categories;
}

لقد قمت بافتراض معقول حول كيفية تحقيق هدفك، ولكن wp_discourse_publish_categories لن يعمل بشكل موثوق إذا كنت تقوم بالتصفية لفئة واحدة فقط باستخدام محرر gutenberg.

يجب عليك استخدام wpdc_publish_post_category بدلاً من ذلك:

سأقوم بتحديث المنشور الأصلي للإشارة إلى ذلك.

إعجاب واحد (1)