الأعلى: كيف يُنتج Discourse ما يُسمى بـ “بطاقة مصغرة” غير جذابة للغاية.
الأسفل: بطاقة تويتر كبيرة وصحيحة.
الحل:
يرجى تغيير…
<meta name="twitter:card" content="summary" />
إلى
<meta name="twitter:card" content="summary_large_image">
في النواة.
مرجع:
الأعلى: كيف يُنتج Discourse ما يُسمى بـ “بطاقة مصغرة” غير جذابة للغاية.
الأسفل: بطاقة تويتر كبيرة وصحيحة.
الحل:
يرجى تغيير…
<meta name="twitter:card" content="summary" />
إلى
<meta name="twitter:card" content="summary_large_image">
في النواة.
مرجع:
مرحبًا @Terrapop
لا أعتقد أن هذا حل. فبعض الصور تكون رديئة الجودة، والصور الرديئة مع summary_large_image تكون سيئة للغاية.
ربما يكون من الجيد توفير خيار يسمح للمستخدم بتغيير summary إلى summary_large_image.
في حالتي، سأختار ذلك، حيث أننا نضمن أن الصور المضافة إلى المواضيع التي نغرد بها في حسابنا تكون ذات أبعاد كافية. وعلى حد علمي، يعود تويتر تلقائيًا إلى النسخة الصغيرة إذا لم يتم توفير صورة ذات أبعاد كافية، حتى عند تحديد summary_large_image.
الأفضل من ذلك هو أن يتم التحقق من أحجام الصور من قبل النواة الأساسية، واستخدام summary أو summary_large_image تلقائيًا بناءً على الحد الأدنى من الأبعاد المطلوبة (300x157 على الأقل).
إذا كان ذلك غير ممكن على الإطلاق، فسأكون سعيدًا جدًا على الأقل بالحصول على خيار استخدام summary_large_image بدلاً من summary.
هل توجد طريقة لتجاوز سلوك def crawlable_meta_data باستخدام إضافة بسيطة؟
على وجه التحديد، نود تغيير:
elsif opts[:image].present?
result << tag(:meta, name: 'twitter:card', content: "summary")
result << tag(:meta, name: "twitter:image", content: opts[:image])
إلى
elsif opts[:image].present?
result << tag(:meta, name: 'twitter:card', content: "summary_large_image")
result << tag(:meta, name: "twitter:image", content: opts[:image])
لأننا نعتمد بشكل كبير على تويتر والبطاقات الكبيرة لتعزيز التفاعل.
أنا جديد نسبيًا في Ruby، لذا فإن أي تلميح في الاتجاه الصحيح سيكون مُقدَّرًا.
تحديث: إليك ملف plugin.rb لأولئك الذين يرغبون في تعديل النواة بسبب صغر حجم الصور على تويتر:
after_initialize do
reloadable_patch do |plugin|
ApplicationHelper.module_eval do
def crawlable_meta_data(opts = nil)
opts ||= {}
opts[:url] ||= "#{Discourse.base_url_no_prefix}#{request.fullpath}"
if opts[:image].blank?
twitter_summary_large_image_url = SiteSetting.site_twitter_summary_large_image_url
if twitter_summary_large_image_url.present?
opts[:twitter_summary_large_image] = twitter_summary_large_image_url
end
opts[:image] = SiteSetting.site_opengraph_image_url
end
# هل يتوفر العرض والارتفاع؟
# استخدم المخطط الصحيح لصورة opengraph/twitter
opts[:image] = get_absolute_image_url(opts[:image]) if opts[:image].present?
opts[:twitter_summary_large_image] =
get_absolute_image_url(opts[:twitter_summary_large_image]) if opts[:twitter_summary_large_image].present?
# أضف وسوم opengraph و twitter
result = []
result << tag(:meta, property: 'og:site_name', content: SiteSetting.title)
if opts[:twitter_summary_large_image].present?
result << tag(:meta, name: 'twitter:card', content: "summary_large_image")
result << tag(:meta, name: "twitter:image", content: opts[:twitter_summary_large_image])
elsif opts[:image].present?
result << tag(:meta, name: 'twitter:card', content: "summary_large_image")
result << tag(:meta, name: "twitter:image", content: opts[:image])
else
result << tag(:meta, name: 'twitter:card', content: "summary")
end
result << tag(:meta, property: "og:image", content: opts[:image]) if opts[:image].present?
[:url, :title, :description].each do |property|
if opts[property].present?
content = (property == :url ? opts[property] : gsub_emoji_to_unicode(opts[property]))
result << tag(:meta, { property: "og:#{property}", content: content }, nil, true)
result << tag(:meta, { name: "twitter:#{property}", content: content }, nil, true)
end
end
if opts[:read_time] && opts[:read_time] > 0 && opts[:like_count] && opts[:like_count] > 0
result << tag(:meta, name: 'twitter:label1', value: I18n.t("reading_time"))
result << tag(:meta, name: 'twitter:data1', value: "#{opts[:read_time]} mins 🕑")
result << tag(:meta, name: 'twitter:label2', value: I18n.t("likes"))
result << tag(:meta, name: 'twitter:data2', value: "#{opts[:like_count]} ❤")
end
if opts[:published_time]
result << tag(:meta, property: 'article:published_time', content: opts[:published_time])
end
if opts[:ignore_canonical]
result << tag(:meta, property: 'og:ignore_canonical', content: true)
end
result.join("\n")
end
end
end
end
ولكن سيكون من الأفضل إذا توفرت خيار مستقبلي لهذا الغرض، وإذا قامت النواة بتقييم الحد الأدنى لحجم صور تويتر لاتخاذ قرار بين summary_large_image أو summary (للصور الصغيرة جدًا) في حال اختار المسؤول إعدادًا جديدًا: “تمكين صور ملخص تويتر الكبيرة”.
أود أن أعرف ما إذا كان من الممكن تغيير السلوك الحالي لإظهار summary_large_image دائمًا إلى summary — لقد صادفت هذا المنشور، لكنه يبدو أنه يطلب العكس — لذا أفترض أن شخصًا ما قد قام بتطبيق ذلك… ومع ذلك، هل من الممكن عكس ذلك؟ هل هناك خيار؟ حاولت البحث في إعدادات المسؤول ولم أتمكن من العثور عليه.
لكل من يرغب في ذلك (للاستخدام دائمًا summary_large_image) - لقد أخذت كود @Terrapop وصنعته كإضافة (plugin) يمكنك تضمينها:
- https://github.com/CubeCoders/discourse-twitter-large-card
ما أود حقًا فعله هو شيء مشابه لبطاقة Github التي سترونها مرفقة بهذا المنشور، وهي طريقة لإنشاء بطاقات ديناميكية تلقائيًا لموضوع معين. حاليًا، ستكون البطاقة هي أول صورة ذات حجم مناسب في المنشور. لذا، إذا أنشأت منشورًا يبدأ بصورة، فسيتم استخدامه في النهاية.