لا ينتج Discourse بطاقات Twitter كبيرة وأكثر جاذبية

الأعلى: كيف يُنتج Discourse ما يُسمى بـ “بطاقة مصغرة” غير جذابة للغاية.

الأسفل: بطاقة تويتر كبيرة وصحيحة.

الحل:

يرجى تغيير…

<meta name="twitter:card" content="summary" />

إلى

<meta name="twitter:card" content="summary_large_image">

في النواة.

مرجع:

3 إعجابات

مرحبًا @Terrapop

لا أعتقد أن هذا حل. فبعض الصور تكون رديئة الجودة، والصور الرديئة مع summary_large_image تكون سيئة للغاية.

ربما يكون من الجيد توفير خيار يسمح للمستخدم بتغيير summary إلى summary_large_image.

3 إعجابات

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

الأفضل من ذلك هو أن يتم التحقق من أحجام الصور من قبل النواة الأساسية، واستخدام summary أو summary_large_image تلقائيًا بناءً على الحد الأدنى من الأبعاد المطلوبة (300x157 على الأقل).

إذا كان ذلك غير ممكن على الإطلاق، فسأكون سعيدًا جدًا على الأقل بالحصول على خيار استخدام summary_large_image بدلاً من summary.

إعجابَين (2)

هل توجد طريقة لتجاوز سلوك 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 (للصور الصغيرة جدًا) في حال اختار المسؤول إعدادًا جديدًا: “تمكين صور ملخص تويتر الكبيرة”.

6 إعجابات

أود أن أعرف ما إذا كان من الممكن تغيير السلوك الحالي لإظهار summary_large_image دائمًا إلى summary — لقد صادفت هذا المنشور، لكنه يبدو أنه يطلب العكس — لذا أفترض أن شخصًا ما قد قام بتطبيق ذلك… ومع ذلك، هل من الممكن عكس ذلك؟ هل هناك خيار؟ حاولت البحث في إعدادات المسؤول ولم أتمكن من العثور عليه.

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

لكل من يرغب في ذلك (للاستخدام دائمًا summary_large_image) - لقد أخذت كود @Terrapop وصنعته كإضافة (plugin) يمكنك تضمينها:

- https://github.com/CubeCoders/discourse-twitter-large-card

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

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