تخصيص القالب لـ WP Discourse

حالة الاستخدام: توجد روابط يوتيوب في منشوراتي على ووردبريس. أريد أن يظهر فيديو يوتيوب تلقائيًا في منشور discourse المقابل بعد نشر منشور ووردبريس.

المشكلة: يبدو أن الأمر لا يعمل لأنه بعد المزامنة، يكون HTML الخاص بمنشور discourse كالتالي:

<p>https://www.youtube.com/watch?v=alJEZwwtQ3U</p>

سيظهر فيديو يوتيوب بنجاح فقط إذا قمت بإزالة <p></p>.

فكيف يمكنني إزالة <p></p>؟ آمل ألا أحتاج إلى إزالة وسوم <p></p> يدويًا حيث قد يكون لدي آلاف المنشورات.

غير متأكد مما إذا كان بإمكاني إزالة وسوم <p></p> مباشرة في ملف functions.php.

لقد اتبعت برنامجك التعليمي للتخصيص. هذا هو الكود الموجود في functions.php:

// يضيف الصورة المميزة إلى المنشور الذي يُنشر على Discourse.
function my_namespace_publish_format( $input ) {
    ob_start();
    ?>
    {excerpt} **<-----هل يمكنني إزالة وسوم p هنا؟**
    <?php
    $output = ob_get_clean();
    
    // ملاحظة: تم إزالة استدعاء apply_filters() الذي كان موجودًا في الدالة الأصلية.
    return $output; 
}

add_filter( 'discourse_publish_format_html', 'my_namespace_publish_format' );

اعتمادًا على طريقة نشر مقاطع الفيديو الخاصة بك، قد تتمكن من استخدام شيء مثل هذا:

add_filter( 'discourse_publish_format_html', 'my_namespace_publish_format', 10, 2 );
function my_namespace_publish_format( $input, $post_id ) {
	$post_content = apply_filters( 'the_content', get_post( $post_id )->post_content );
	$videos = get_media_embedded_in_content( $post_content );
	$video_string = '';
	foreach( $videos as $video ) {
	    $video_string .= $video . '<br>';
    }
    ob_start();

    echo '<small>تم النشر الأصلي على {blogurl}</small><br><br>';
    echo $video_string;
    echo '{excerpt}';
    $output = ob_get_clean();

    return $output;
}

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

أخبرني إذا لم تنجح هذه الطريقة على موقعك.

ما أود تحقيقه هو عرض مقاطع فيديو YouTube عندما يضغط المستخدمون على زر “إظهار المنشور الكامل” في Discourse لتوسيع منشور WordPress. لكنني لست متأكدًا مما إذا كان ذلك ممكنًا.

مرحبًا سيمون

شكرًا لك على الرد. أقدر مساعدتك كثيرًا.

لكن يبدو أن الأمر لا يعمل.

كان المخرجات:

<small>تم النشر في الأصل على http://staging.a1.sg/matrix/</small><br><br><iframe title="GCE O-Level 
A-Maths: Matrix &amp; its Inverse" width="525" height="394" 
src="https://www.youtube.com/embed/alJEZwwtQ3U?feature=oembed" frameborder="0" 
allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen>. 
</iframe><br><p><iframe title="GCE O-Level A-Maths: Matrix &amp; its Inverse" width="525" 
height="394" src="https://www.youtube.com/embed/alJEZwwtQ3U?feature=oembed" frameborder="0" 
allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen>. 
</iframe></p>

لقد أضفت أيضًا كودًا إضافيًا في ملف functions.php بعد تجربة الحل المقترح أعلاه للتأكد من بقاء رابط يوتيوب كنص عادي.

remove_shortcode( 'embed' );
remove_filter( 'the_content', [ $GLOBALS['wp_embed'], 'autoembed' ], 8 );
remove_filter( 'the_content', [ $GLOBALS['wp_embed'], 'run_shortcode' ], 8 );
remove_action( 'edit_form_advanced', [ $GLOBALS['wp_embed'], 'maybe_run_ajax_cache' ] );

لكن المخرجات (كما هو موضح أدناه) تحتوي على وسوم

أيضًا. وكما ذُكر سابقًا، فإن وسوم

في منشورات discourse هي التي تسبب المشكلة.

<small>تم النشر في الأصل على http://staging.a1.sg/matrix/</small><br><br>. 
<p>https://www.youtube.com/watch?v=alJEZwwtQ3U</p>

أي أنه إذا قمت بإزالة وسوم p، فسيتحول الرابط تلقائيًا إلى مضمن في discourse. لكن هذه العملية لا تزال يدوية.

أو هل توجد طريقة لإنشاء منشورات دفعة واحدة في Discourse؟ باستخدام بيانات من Google Sheets.

بهذه الطريقة، يمكنني الاستغناء عن WordPress.

المكافئ في WordPress هو wpallimport.com

يبدو أن المخرجات من مثال الكود الأول الخاص بك قريبة مما كنت أتوقعه. أعتقد أن المشكلة فيه هي أنك تحتاج إلى إضافة https://www.youtube.com/embed إلى إعداد موقع Discourse allowed iframes. سيسمح ذلك لعنصر iframe الموجود في تنسيق المنشور بالظهور كمشغل فيديو على Discourse.

يعمل بشكل رائع!!! شكرًا لك!!!

لكن هناك تضمينان (embeds) بدلاً من واحد.

المخرجات أدناه. هل هناك خطأ في الكود الذي اقترحته لي؟

<small>نُشر في الأصل على http://staging.a1.sg/beautiful/</small><br><br><iframe src="https://www.youtube.com/embed/alJEZwwtQ3U" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe><br><p><iframe src="https://www.youtube.com/embed/alJEZwwtQ3U" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>

add_filter( 'discourse_publish_format_html', 'my_namespace_publish_format', 10, 2 );
function my_namespace_publish_format( $input, $post_id ) {
	$post_content = apply_filters( 'the_content', get_post( $post_id )->post_content );
	$videos = get_media_embedded_in_content( $post_content );
	$video_string = '';
	foreach( $videos as $video ) {
	    $video_string .= $video . '<br>';
    }
    ob_start();

    echo '<small>نُشر في الأصل على {blogurl}</small><br><br>';
    echo $video_string;
    echo '{excerpt}';
    $output = ob_get_clean();

    return $output;

هل يمكنك تجربة نشر مشاركة دون استخدام القالب المخصص الآن؟ قد يكون كل ما كان مطلوبًا هو إضافة https://www.youtube.com/embed إلى إعداد موقع Discourse الخاص بـ allowed iframes.

أي محرر تستخدم في موقع WordPress الخاص بك، هل هو محرر Classic القديم أم محرر Block الجديد؟ أيضًا، هل تنشر المشاركة الكاملة إلى Discourse أم مقتطفًا منها فقط؟

يمكن تحقيق ذلك من خلال كتابة سكريبت صغير لنشر المشاركات من ملف CSV.

  1. إنه يعمل. شكرًا لك يا سيمون. هل توجد طريقة لإزالة الرابط العائد إلى ووردبريس؟ كما هو موضح في لقطة الشاشة أدناه.

  1. هل يمكنك التكرم بإرشادي نحو اتجاه أو دروس حول نوع السكربت الذي يجب كتابته؟

أظن أن أسرع طريقة هي إخفائه باستخدام CSS.

لمنع ظهور رابط نطاق ووردبريس الخاص بك أسفل عنوان الموضوع، قم بإلغاء تحديد خيار “إضافة روابط مميزة” في صفحة إعدادات WP Discourse Publishing. ولإزالة الرابط المميز من المنشورات التي تم نشرها بالفعل، يمكن إما إخفاؤه باستخدام CSS، أو إزالته من قاعدة بيانات موقع Discourse الخاص بك. أنا بعيد عن العمل خلال الأيام القليلة القادمة، لكن يمكنني التعامل مع ذلك لك عندما أعود إلى العمل يوم الأربعاء.

إذا كنت تستطيع الانتظار حتى يوم الأربعاء، فيمكنني مساعدتك في هذا الأمر. وإذا كنت بحاجة إلى القيام بذلك قبل ذلك، فيمكنك محاولة إنشاء موضوع جديد في فئة Support الخاصة بنا تسأل فيه عن كيفية إنشاء مواضيع عبر واجهة برمجة التطبيقات (API) من ملف CSV.