طول المقتطف المخصص لا يعمل معي

أحاول تقليل عدد الكلمات التي تظهر في “الملخص” عند نشر مقال في ووردبريس. لكن بدلاً من ذلك، لا أرى كلمة واحدة :slight_smile:


إعجابَين (2)

هل تستخدم محرر الكتل، أم محرر كلاسيكي قديم لنشر المنشور؟

هل يمكنك مشاركة رابط للمنشور؟ قد يعطي ذلك بعض الأدلة حول ما يحدث بشكل خاطئ.

ماذا يحدث إذا حاولت إضافة مقتطف يدويًا إلى المنشور:

شكراً على ردك. ما زلنا نستخدم المحرر الكلاسيكي.
يحدث لنا هذا حاليًا لجميع المقالات، ولكن هذه هي الروابط:

لا أعرف ما إذا كنت أفهم تمامًا كيفية إضافة مقتطف يدويًا.

لم نستخدم “مقتطف” للمنشورات في ووردبريس منذ بضع سنوات، لم أفهم الأمر على الفور.

ولكن يبدو أنه عندما أقوم بملء “يدويًا” في ووردبريس، يعمل كل شيء بشكل جيد.

هل هناك أي حل لإرسال أول X كلمات إلى Discourse دون الحاجة إلى ملء “مقتطف” يدويًا؟

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

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

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

هل تستخدم اختصارات في منشوراتك؟

لإشارتي الخاصة، يبدو أن المشكلة هنا: wp-discourse/lib/discourse-publish.php at main · discourse/wp-discourse · GitHub. أفترض أن شيئًا ما يسير بشكل خاطئ فيما يتعلق بالاستدعاء إلى $excerpt = apply_filters( 'the_content', $raw );

3 إعجابات

نعم، نحن نستخدم shortcodes. سأحاول تعطيلها مؤقتًا وأرى ما سيحدث. شكرًا على التوجيهات. سأعلمكم بما نجده.

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

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

إعجابَين (2)

بعد بضع ساعات :). لقد وجدت بالفعل الجاني، هل المكون الإضافي Lnk.Bio – Plugin WordPressu | WordPress.org Česko يقوم بذلك أي أفكار حول كيفية إصلاحه؟

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

يحتوي المكون الإضافي LnkBio على وظيفة ترتبط بالإجراء 'wp_insert_post'. تستدعي هذه الوظيفة unset($post->post_content) على كائن WordPress $post. من الناحية النظرية، لا ينبغي أن يؤدي هذا إلى إلغاء تعيين السمة post_content للمنشور خارج وظيفة LnkBio، ولكن عندما أقوم باختبار ذلك محليًا (محاكاة استدعاءات واجهة برمجة التطبيقات للمكون الإضافي LnkBio)، فإن الاستدعاء إلى unset($post->post_content) يقوم بإلغاء تعيين محتوى المنشور للمكون الإضافي WP Discourse هنا: wp-discourse/lib/discourse-publish.php at main · discourse/wp-discourse · GitHub.

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

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

أسهل حل هو التبديل إلى استخدام محرر الكتل.

خيار آخر هو الاتصال بـ LnkBio وإخبارهم بالمشكلة. يمكنهم إصلاح ذلك من خلال إيجاد طريقة أكثر أمانًا لتحليل محتوى المنشور لطلب واجهة برمجة التطبيقات الخاصة بهم:

function lnkbio_api_sync($post_id, $post, $update) {
	unset($post->post_content);
	if ($post->post_status === 'publish') {
		if (!get_option('lnkbio_id') || !get_option('lnkbio_secret')) {
			return;
		}
		// يتم تعيين عنوان URL إلى `example.com` للاختبار بدون حساب lnkbio
		wp_remote_post(
			'http://example.com',
			[
				'blocking' => false,
				'body' => [
					'ACTION' 	=> 'WP_sync',
					'post_id' 	=> $post_id,
					'post'    	=> json_encode($post),
					'id'		=> get_option('lnkbio_id'),
					'secret' 	=> get_option('lnkbio_secret'),
					'permalink' => get_permalink($post),
					'is_pub'	=> true,
					'image'		=> get_the_post_thumbnail_url($post_id, 'full'),
					'group_id' 	=> get_option('lnkbio_group'),
				]
			]
		);
	}
}

تعديل: يمكنك أيضًا تعديل كود المكون الإضافي LnkBio لإزالة الاستدعاء إلى unset($post->post_content); ثم إيجاد طريقة لتعيين القيم المناسبة للكائن $post المستخدم هنا:

'post' => json_encode($post)

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

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

مرحباً،

هذا هو مسؤول صيانة إضافة Lnk.Bio Wordpress.

تستخدم الدالة lnkbio_api_sync فقط الدالة unset على المتغير المحلي $post ولا ينبغي أن تؤثر على أي كود خارج الدالة.

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

أي تغيير نقوم به على $post هو محلي لتلك الدالة فقط، إلا إذا كان كود Discourse يستخدم بطريقة ما المتغيرات العامة؟

هل لديك تثبيت Discourse في بيئة اختبار يمكنك مشاركة بيانات اعتماد API الخاصة به حتى نتمكن من اختبار إضافة Discourse محليًا وكيف تتفاعل مع الكود الخاص بنا؟

شكراً مقدماً.

إعجابَين (2)

نعم، هذا ما كنت أعتقده.
يستخدم المكون الإضافي WP Discourse global $post في ثلاثة أماكن:

لست متأكدًا مما إذا كان هذا يمكن أن يؤثر على ما يحدث. أنا أيضًا لا أرى طريقة جيدة لتجنب استخدام global $post في تلك الملفات.

هذا مثير للاهتمام: Global Variables « WordPress Codex

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

أعتقد أننا ربما وجدنا حالة استثنائية.

لا. أنا فقط أقدم دعمًا مجانيًا هنا. أعرف أنه يمكنك التسجيل للحصول على تجربة مجانية على Discourse pricing | Discourse - Civilized Discussion. اختر إما خطة Standard أو Business. يستغرق الأمر بضع دقائق فقط لإعداد موقع وتشغيله.

إعجابَين (2)

شكرًا، نقدر الملاحظات.

لقد سجلنا للحصول على النسخة التجريبية كما اقترحت وتمكنا من إعادة إنتاج المشكلة.
لقد اكتشفنا أنه حتى إعادة تسمية $post إلى $local_post أو ما شابه ذلك لا يحل المشكلة. الحل الوحيد الذي وجدناه هو استخدام json_encode ثم json_decode للمحتوى، لإنشاء كائن منفصل تمامًا. هذا قبيح جدًا.

ومع ذلك، فقد نشرنا تحديثًا لحل عدم التوافق هذا، على الرغم من أن التصميم السابق كان صحيحًا بنسبة 100٪ من وجهة نظر الكود.

إليك التصحيح الذي تم نشره بالفعل

-       unset($post->post_content);
+       $json = json_encode($post);
+       $local_post = json_decode($json);
+       unset($local_post->post_content);
        if ($post->post_status === 'publish') {
                if (!get_option('lnkbio_id') || !get_option('lnkbio_secret')) {
                        return;
@@ -138,7 +140,7 @@ function lnkbio_api_sync($post_id, $post, $update) {
                                'body' => [
                                        'ACTION'        => 'WP_sync',
                                        'post_id'       => $post_id,
-                                       'post'          => json_encode($post),
+                                       'post'          => json_encode($local_post),
                                        'id'            => get_option('lnkbio_id'),
                                        'secret'        => get_option('lnkbio_secret'),
                                        'permalink' => get_permalink($post),
إعجاب واحد (1)

شكرا لك على القيام بذلك!

بدا صحيحًا بالنسبة لي. لقد فوجئت بما كان يحدث. أنا آسف إذا بدوت قاسياً بعض الشيء في مشاركتي الأولى حول المشكلة. كنت أفكر فيها لبضع ساعات بحلول ذلك الوقت.

4 إعجابات

لم تكن قاسياً على الإطلاق، كانت لديك رؤى رائعة.

بعد العمل عليها قليلاً، وجدنا حلاً أفضل وأكثر أناقة باستخدام الدالة clone.

تم نشر هذا بالفعل في إضافة Lnk.Bio المحدثة والرقعة هي ببساطة

diff --git a/lnk.bio.php b/lnk.bio.php
index 65759fc..cc0c0d2 100644
--- a/lnk.bio.php
+++ b/lnk.bio.php
@@ -126,8 +126,7 @@ function lnkbio_api_post(string $url, array $data) {
 }

 function lnkbio_api_sync($post_id, $post, $update) {
-       $json = json_encode($post);
-       $local_post = json_decode($json);
+       $local_post = clone($post);
        unset($local_post->post_content);
        if ($post->post_status === 'publish') {
                if (!get_option('lnkbio_id') || !get_option('lnkbio_secret')) {
4 إعجابات

شكراً لكما كثيراً، لديّ إعجاب واحترام لكيفية اكتشافكما للمشكلة وحلها بهذه السرعة. هل تخططان لدمج هذا التحسين رسمياً في تحديث إضافة Link.Bio؟ إذا كان الأمر كذلك، فمتى تقريباً؟

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

يبدو أن تحديث المكون الإضافي Lnk.Bio قد تم بالفعل ويعمل بشكل جيد (لقد كنت مرتبكًا بعض الشيء لأن إصدار المكون الإضافي لم يتغير). شكرًا

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