الصور لا تُنشر في Discourse على WP 5.3

أعتقد أن هذا يتعلق بالتغييرات التي طرأت على الكتل في تحديث الإصدار 5.3. يمكنك مشاهدة المنشور هنا: In Conversation with Anna Morgan - Discussions - Nature Photographers Network

للعلم، لدي أيضًا هذا المقطع لصور شبكة توزيع المحتوى (CDN):

add_filter( 'wp_discourse_excerpt', 'wpdc_custom_excerpt' );
function wpdc_custom_excerpt( $content ) {
    
    return apply_filters( 'as3cf_filter_post_local_to_s3', $content );
}

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

لقد صادفت هذا المنشور https://meta.discourse.org/t/wp-discourse-plug-in-being-odd/133287/10، لكنني أستخدم الإصدار 1.9.7، واسم المستخدم المستخدم في النشر هو حساب نشط.

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

![](upload://kw9YUV5qtquQf5xwatRof6S9RmK.jpeg)

لست متأكدًا مما إذا كان هذا مرتبطًا بالتغييرات في ووردبريس 5.3.

إذا كنت تتلقى تحذير “لقد اكتشفنا طلب API يستخدم طريقة مصادقة قديمة”، فإن هذا لن يتسبب في المشكلة التي تواجهها مع الصور. إصدارات WP Discourse 1.9.6 والإصدارات الأحدث لا ينبغي أن تتسبب في هذا التحذير. جميع طلبات API من الإضافة تستخدم الآن المصادقة القائمة على الرؤوس.

يبدو أن المشكلة تكمن في أن الماركداون الخاص برفع Discourse لا يتم تحليله عند تغليفه بوسوم HTML. على سبيل المثال، هذا ما أراه في منشور WordPress بعد تشغيل مهمة Discourse PullHotlinkedImages:

<small>نُشر في الأصل في:			https://scossar.com/figure-tags-cause-issues/
		</small><br>
<figure class="wp-block-image">![](upload://3hPHOMnM5v5srjlz5QWGmVxY4AL.jpeg)</figure>

تعديل المنشور لإزالة أي وسوم HTML تحيط برابط الماركداون يحل المشكلة، ولكن يجب العثور على حل مناسب لهذه القضية.

عذرًا على الإزعاج، لكن هل تعمل على هذا الأمر يا سايمون أم أن شخصًا ما تم تكليفه به؟

المشكلة هي أنه عند نشر مشاركات تحتوي على صور إلى Discourse، يبدو HTML المنشور في البداية شيئًا مثل هذا:

<figure><img src="https://example.com/wp-content/uploads/your-image.png" /></figure>

إذا كانت إعدادة الموقع “تنزيل الصور البعيدة إلى المحلي” مفعلة في Discourse، فإن رابط الصورة سيتعطل عندما يقوم Discourse بتنزيل المنشور من WordPress. وستحدث المشكلة في أي وقت يتم فيه تغليف وسم صورة يحتوي على عنوان URL بعيد بوسوم HTML.

أبسط الحلول لهذه المشكلة هو إما تعطيل إعدادة الموقع “تنزيل الصور البعيدة إلى المحلي”، أو عدم نشر محتوى كامل للمنشورات من WordPress إلى Discourse.

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

حل محتمل آخر هو تخصيص القالب المستخدم لنشر منشورات WordPress. يمكن استخراج الصور من المنشورات ثم نشرها مع مقتطف للمنشور. ومع قالب مخصص، يمكن هيكلة HTML الصورة بطريقة لا تتعارض مع معالج Markdown في Discourse.

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

سأفتقد النشر الكامل أيضًا.
لست متأكدًا بنسبة 100% مما تقترحه هنا…
كيف ستقوم باستخراج الصور؟ باستخدام تعبير نمطي (Regex)؟
يمكنني تخيل تعبير نمطي يستبدل وسوم الصور ببنية ماركداون صحيحة. هل هذا ما تقصده وهل سيعمل ذلك؟

لا. كنتُ سأميل إلى ذلك لو لم أكن قد جرّبتُ مثل هذه الأساليب من قبل. يوضح هذا المنشور على Stack Overflow المشكلة إلى حد ما: https://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454.

سأبحث في مدى صعوبة قيام الإضافة بتجميع نسخة HTML أساسية لمحتوى المنشور. أما الخيار الأخير فسيكون استخدام دوال DOMDocument لتحليل المحتوى. فال تعليقات التي تُرجعها منصة Discourse يتم تحليلها باستخدام هذه الدوال، ولم أتلقّ تقارير عن مشاكل متعلقة بذلك.

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

شكرًا لك على التوضيح.
سأطلب من كتابي ببساطة نشر المقال ثم النقر على “تحديث”، إذ يبدو أن النشر ثم تحديث المقال في WordPress يحل دائمًا مشكلة الصور في Discourse.

أفضل أن يقضي كتابي ثانية إضافية في كل مقال على أن تختفي خيار النشر الكامل :wink:

إذا كان إعداد الموقع “تنزيل الصور البعيدة إلى محلية” مفعّلًا في ديسكورش، ألا تختفي الصورة مجددًا خلال بضع دقائق من تحديث المنشور؟ إذا لم يكن الأمر كذلك، فسأبحث في السبب وراء حل هذه المشكلة.

لقد قمت بتفعيل هذا الإعداد، ولا تزال الصور تُعرض بشكل صحيح في جميع مقالاتي الحديثة حتى بعد أيام أو أسابيع. إليك مثال على مقال عمره شهر واجهت فيه مشكلة الصور.

أيضًا، تفحصت عناوين URLs للصور من جانب Discourse، وتبيّن أن الروابط هي نفسها المستخدمة في WordPress، مما يعني أن الصور لم يتم تحميلها إلى Discourse. هل يعود ذلك إلى أن الموقع والمنتدى يشتركان في نفس النطاق؟
(الموقع: https://monocycle.info، المنتدى: https://forum.monocycle/info)

ما زلت أحصل على صورة مصغرة كبيرة مكسورة بدلاً من الصورة عند تحديث موضوع Discourse. عند تعديل المنشور، أرى ما يلي بين < >:

img src="http://mysite.com/wp-content/uploads/2020/03/asha2.jpg" class="ss-hidden-pin-image" alt="Blog" data-pin-url="" data-pin-media="http://mysite.com/wp-content/uploads/2020/03/asha2.jpg" data-pin-description=""/

هل موقع WordPress الخاص بك يستخدم بروتوكول HTTP أم HTTPS؟

حاليًا هو http، رغم أنني أبحث في استخدام https.

لن تقوم المتصفحات بتحميل المحتوى من مصادر غير آمنة إذا كانت الصفحة تستخدم HTTPS.

إذا كنت تعتمد على عنصر HTML لتحميل الصورة، فلن يعمل ذلك حتى يبدأ موقعك الرئيسي باستخدام HTTPS.

لقد قمت للتو بدفع إصدار WP Discourse 2.0.2 إلى مستودع إضافات ووردبريس. من المفترض أن يصحح التحديث المشكلة المتعلقة بالصور التالفة التي كانت تحدث عند نشر المنشورات إلى Discourse باستخدام محرر الكتل.

يتم الآن استخراج الصور، ومعارض الصور، بالإضافة إلى مقاطع الفيديو من يوتيوب وفيميو من المنشورات وتنسيقها بطريقة يمكن لـ Discourse التعامل معها. يُرجى إخباري إذا واجهت أي مشاكل مع التحديث. إذا كانت هناك كتل ووردبريس لا تزال لا تُعرض بشكل صحيح على Discourse، فأخبرني - إذ يمكن الآن تحليل الكتل حسب اسمها، مما يجعل من الممكن حل أي مشاكل.

في الأسبوع القادم، سأضيف فلترًا يمكن ربطه لتحليل أي كتل غامضة للغاية لا يمكن للإضافة التعامل معها.

هناك بعض المشاكل هنا بعد التحديث.

في ووردبريس، أستخدم “محرر كلاسيكي” (tinymce).

كان لدي مقالات قديمة تحتوي على روابط فيديو داخل اختصارات [video]، واستخدمت أحدث مقالاتي (أقل من 3 سنوات) إضافة ARVE لتضمين الفيديوهات، التي تضع رابط الفيديو داخل اختصار [arve].
لذلك قمت بتصفية المنشورات من ووردبريس إلى Discourse باستخدام الكود التالي:

    $excerpt = preg_replace('/\[arve .*url="(.*?)" .*\/\]/is',"\n$1\n", $excerpt);
    $excerpt = preg_replace('/\[video .*mp4="(.*)"\]\[\/video\]/is',"\n$1\n", $excerpt);

كان يعمل بشكل مثالي، حيث كانت روابط الفيديوهات فقط تُمرر إلى Discourse، فتظهر مدمجة هناك.

لكن منذ تحديث WP-Discourse، لم تعد الفيديوهات تظهر على Discourse.
لقد جربت أيضًا لصق رابط يوتيوب مباشرة في محرر tinymce دون استخدام اختصار (تعلمت أن ووردبريس لا يتطلب اختصارًا لتضمين فيديو يوتيوب بطريقة ما… أو ربما يكون ذلك بسبب إحدى الإضافات الأخرى أو السمة الخاصة بي؟ :thinking: لكني أعتقد أن هذا لا يهم)، وحذفت دوال preg_replace الخاصة بي، ومع ذلك لا تزال الفيديوهات لا تظهر على Discourse.

إليك نصي على ووردبريس (نص عادي، وليس في تبويب WYSIWYG):

https://www.youtube.com/watch?v=e6MCkspqtxo

[arve url="https://www.youtube.com/watch?v=e6MCkspqtxo" /]

كيف يظهر على ووردبريس:

المنشور على Discourse:

كود HTML للمنشور على Discourse:

<p>Test vidéooo:</p>
<div data-mode="normal" data-provider="youtube">
<div></div>
</div>
<div data-mode="normal" data-provider="youtube">
<div></div>
</div>

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

هذا أمر غريب. كان أملِي من التغيير ألا يؤثر على المنشورات التي تُنشر باستخدام المحرر الكلاسيكي. سأحاول إعادة إنتاج المشكلة. هل يمكنك مشاركة الرمز الذي تظهره عند فتح المنشور في تبويب “نص” بالمحرر؟

مع إضافة WP ARVE

<p>اختبار فيديو:</p>
<div class="arve-wrapper aligncenter" data-mode="normal" data-provider="youtube" id="arve-e6MCkspqtxo-3" style="max-width:800px;" itemscope itemtype="http://schema.org/VideoObject">
<div class="arve-embed-container" style="padding-bottom:56.250000%"><iframe allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen class="arve-iframe fitvidsignore" frameborder="0" name sandbox="allow-scripts allow-same-origin allow-presentation allow-popups allow-popups-to-escape-sandbox" scrolling="no" src="https://www.youtube-nocookie.com/embed/e6MCkspqtxo?iv_load_policy=3&#038;modestbranding=1&#038;rel=0&#038;autohide=1&#038;playsinline=1&#038;autoplay=0" width="480" height="270"></iframe></div>
</div>
<div class="arve-wrapper aligncenter" data-mode="normal" data-provider="youtube" id="arve-e6MCkspqtxo-4" style="max-width:800px;" itemscope itemtype="http://schema.org/VideoObject"><div class="arve-embed-container" style="padding-bottom:56.250000%"><iframe allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen class="arve-iframe fitvidsignore" frameborder="0" name sandbox="allow-scripts allow-same-origin allow-presentation allow-popups allow-popups-to-escape-sandbox" scrolling="no" src="https://www.youtube-nocookie.com/embed/e6MCkspqtxo?iv_load_policy=3&#038;modestbranding=1&#038;rel=0&#038;autohide=1&#038;playsinline=1&#038;autoplay=0" width="480" height="270"></iframe></div></div>

بدون الإضافة، إذا كتبت ببساطة في WP:

https://www.youtube.com/watch?v=e6MCkspqtxo

يظهر محرر Discourse النتيجة التالية:

<p>اختبار فيديو:</p>
<div class="fitvids-video"><iframe title="Volkor X - Enclave" width="800" height="450" src="https://www.youtube.com/embed/e6MCkspqtxo?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></div>

يبدو أن WP لا تزال تستخدم مكتبة أخرى غير أصلية، ربما من القالب الخاص بي؟ :thinking:
أظن أن المشكلة من جهتي أكثر منها من جهتكم، ومع ذلك كان كل شيء يعمل بشكل جيد قبل التحديث… :sweat_smile: