From 34d69dec2a1dbdb29ae8199d0b87fb9a39b74aeb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 31 Aug 2026 23:00:06 +0000 Subject: [PATCH] chore: sync funkycommerce-headless from monorepo Source: coded-letter/coded-letter-monorepo@47e086c8cc6dd1cbbdbfa426f90ca34ba3123a17 --- .monorepo-source.json | 2 +- assets/storefront-ui-strings/en.json | 151 ++++++++++++++++++++++++++- assets/storefront-ui-strings/ja.json | 151 ++++++++++++++++++++++++++- assets/storefront-ui-strings/pl.json | 151 ++++++++++++++++++++++++++- functions.php | 2 +- inc/control-center-schema.php | 19 +++- inc/control-center.php | 6 ++ inc/navigation-commerce.php | 2 + package-lock.json | 4 +- package.json | 2 +- readme.txt | 8 +- style.css | 2 +- 12 files changed, 489 insertions(+), 11 deletions(-) diff --git a/.monorepo-source.json b/.monorepo-source.json index f558cdc..19dd882 100644 --- a/.monorepo-source.json +++ b/.monorepo-source.json @@ -1,7 +1,7 @@ { "productId": "funkycommerce-headless", "repository": "coded-letter/superfunky-theme", - "source": "coded-letter/coded-letter-monorepo@d3df02900ae9d6ca232dad2f5098e430012f2418", + "source": "coded-letter/coded-letter-monorepo@47e086c8cc6dd1cbbdbfa426f90ca34ba3123a17", "sourcePath": "workspace/backend/wordpress/themes/free/funkycommerce-headless", "installSlug": "funkycommerce-headless", "kind": "theme", diff --git a/assets/storefront-ui-strings/en.json b/assets/storefront-ui-strings/en.json index 279e346..7a3c789 100644 --- a/assets/storefront-ui-strings/en.json +++ b/assets/storefront-ui-strings/en.json @@ -673,5 +673,154 @@ "community.product.field.sku": "SKU", "community.product.field.stock": "Stock quantity", "community.product.field.category": "Category", - "community.product.submit": "List product" + "community.product.submit": "List product", + "navigation.back_to_top": "Back to top", + "nav.shop": "Shop", + "nav.blog": "Blog", + "inquiry.error": "The inquiry could not be sent. Please try again.", + "inquiry.success": "Your inquiry has been sent. We'll follow up by email shortly.", + "inquiry.field.name": "Name", + "inquiry.field.email": "Email", + "inquiry.field.message": "Message", + "inquiry.sending": "Sending…", + "review.summary_count": "Reviews: {count}", + "review.read_more": "Read more", + "review.hide": "Hide", + "review.awaiting_moderation": "Awaiting moderation", + "review.field.name": "Name", + "review.field.email": "Email", + "review.field.reply_placeholder": "Write a reply…", + "review.field.rating": "Rating", + "review.field.rating_aria": "Rating out of 5", + "review.field.star_aria": "{count} stars", + "review.field.comment": "Comment", + "review.post_reply": "Post reply", + "review.cancel": "Cancel", + "review.reply": "Reply", + "review.form_title": "Leave a review", + "review.form_note": "Submissions are held for moderation and only appear once approved.", + "review.error.required": "All fields are required.", + "review.error.invalid_email": "Please enter a valid email address.", + "review.success": "Your submission has been recorded and awaits approval.", + "review.submitting": "Submitting…", + "review.submit": "Submit", + "review.discussion_layout": "Discussion layout", + "review.section_heading": "Customer reviews", + "review.form_title_product": "Review this product", + "product.in_stock": "In stock", + "product.out_of_stock": "Out of stock", + "product.price_unavailable": "Price unavailable", + "product.quantity": "Quantity", + "product.link_unavailable": "Product link unavailable", + "product.details_heading": "Product details", + "product.attributes_heading": "Product attributes", + "product.meta.sku": "SKU", + "product.meta.categories": "Categories", + "product.meta.brands": "Brands", + "product.meta.tags": "Tags", + "product.related": "Related products", + "product.upsells": "You may also like", + "product.cross_sells": "Frequently bought together", + "loading.product_archive": "Loading product archive", + "loading.post_archive": "Loading {taxonomy} archive", + "loading.product_brands": "Loading product brands", + "error.product_brands_unavailable": "Product brands unavailable", + "archive.taxonomy.category": "Category", + "archive.taxonomy.tag": "Tag", + "archive.taxonomy.brand": "Brand", + "archive.collection_unavailable": "This collection is temporarily unavailable.", + "archive.collection_not_found": "This collection is unavailable.", + "archive.product_not_found": "Product {taxonomy} not found", + "archive.no_products_category": "No products found in this category.", + "archive.no_products_tag": "No products found with this tag.", + "archive.no_products_brand": "No products found for this brand.", + "archive.product_description": "Browse products in the {name} {taxonomy}.", + "archive.all_brands": "All brands", + "archive.all_products": "All products", + "archive.product_taxonomy_aria": "Product {taxonomy} archives", + "archive.products_title": "{title} products", + "archive.no_products": "No products yet", + "archive.browse_shop": "Browse the shop", + "archive.post_taxonomy_unavailable": "{taxonomy} unavailable", + "archive.post_taxonomy_not_found": "{taxonomy} not found", + "archive.post_tag_description": "Browse every published post tagged #{name}.", + "archive.post_category_description": "Explore published stories filed under {name}.", + "archive.all_posts": "All posts", + "archive.post_taxonomy_aria": "{taxonomy} archives", + "archive.tagged_title": "Tagged #{name}", + "archive.posts_title": "{name} posts", + "archive.no_posts": "No published posts are connected to this {taxonomy}.", + "archive.has_more_posts": "This archive contains more posts than this page currently shows.", + "archive.back_to_blog": "Back to blog", + "archive.back_to_shop": "Back to shop", + "archive.product_brands_title": "Product brands", + "archive.product_brands_kicker": "Shop by maker", + "archive.product_brands_description": "Browse every brand with products available in the catalog.", + "archive.brand_product_count": "Products: {count}", + "archive.no_brands": "No product brands yet", + "archive.no_brands_message": "No non-empty product brands are currently published.", + "archive.browse_products": "Browse products", + "archive.entry_count": "Public entries: {count}", + "comment.section_heading": "Comments", + "comment.discussion_heading": "Discussion", + "comment.form_title": "Join the discussion", + "comment.form_note": "Comments are held for moderation and only appear once approved.", + "comment.recent": "Recent comments", + "comment.no_approved": "No approved comments matched this section.", + "comment.on_post": "On “{title}”", + "review.no_approved": "No approved product reviews matched this section.", + "loading.comments": "Loading comments", + "loading.authors": "Loading authors", + "loading.community_tags": "Loading community tags", + "loading.community_authors": "Loading community authors", + "loading.community_tag": "Loading community tag", + "error.authors_unavailable": "Authors unavailable", + "error.community_tags_unavailable": "Community tags unavailable", + "error.community_authors_unavailable": "Community authors unavailable", + "error.community_tag_unavailable": "Community tag unavailable", + "archive.authors_title": "Authors", + "archive.authors_kicker": "Journal contributors", + "archive.authors_description": "Meet every author with published {language} stories.", + "archive.author_article_count": "Articles: {count}", + "archive.no_authors": "No authors yet", + "archive.no_authors_message": "No {language} authors have published stories yet.", + "archive.browse_stories": "Browse stories", + "archive.community": "Community", + "archive.back_to_community": "Back to community", + "archive.community_tags_title": "Community tags", + "archive.community_tags_kicker": "Explore by topic", + "archive.community_tags_description": "Browse every tag used by published {language} community posts.", + "archive.tag_post_count": "Posts: {count}", + "archive.no_community_tags": "No community tags yet", + "archive.no_community_tags_message": "No tags are assigned to published community posts.", + "archive.browse_community_posts": "Browse community posts", + "archive.community_authors_title": "Community authors", + "archive.community_authors_kicker": "Creators and collaborators", + "archive.community_authors_description": "Discover public creators and collaborators who publish community content.", + "archive.no_community_authors": "No community authors yet", + "archive.no_community_authors_message": "No public creators or collaborators are currently available.", + "archive.browse_community_tags": "Browse all community tags", + "archive.community_tag_title": "#{name} — Community tag", + "archive.community_tag_kicker": "Community tag", + "archive.community_tag_description": "Browse {count} published community posts tagged #{name}.", + "archive.community_tag_summary": "Posts: {posts} · Public profiles: {profiles}", + "product.not_found": "Product not found", + "product.not_found_message": "The store has no published product matching “{identifier}”.", + "product.information_aria": "Product information", + "post.not_found": "Post not found", + "post.not_found_message": "The site has no published post at “{uri}”.", + "loading.author": "Loading author", + "archive.author_description": "Published {language} articles by {name}.", + "rating.load_error": "The rating could not be loaded.", + "rating.storage_error": "Secure rating storage is unavailable.", + "rating.save_error": "The rating could not be saved.", + "rating.aria": "Standalone rating", + "rating.not_rated": "Not rated yet", + "rating.average": "{average} out of 5", + "rating.count": "Ratings: {count}", + "rating.legend": "Rate this content from one to five stars", + "rating.star_aria": "{count} stars", + "rating.saving": "Saving…", + "rating.saved_hint": "Your rating is saved. Choose another star to update it.", + "rating.choose": "Choose a star" } diff --git a/assets/storefront-ui-strings/ja.json b/assets/storefront-ui-strings/ja.json index 80ea73d..fd0b97c 100644 --- a/assets/storefront-ui-strings/ja.json +++ b/assets/storefront-ui-strings/ja.json @@ -673,5 +673,154 @@ "community.product.field.sku": "SKU", "community.product.field.stock": "在庫数", "community.product.field.category": "カテゴリー", - "community.product.submit": "商品を出品する" + "community.product.submit": "商品を出品する", + "navigation.back_to_top": "ページ上部へ", + "nav.shop": "ショップ", + "nav.blog": "ブログ", + "inquiry.error": "お問い合わせを送信できませんでした。もう一度お試しください。", + "inquiry.success": "お問い合わせを送信しました。まもなくメールでご連絡します。", + "inquiry.field.name": "お名前", + "inquiry.field.email": "メールアドレス", + "inquiry.field.message": "メッセージ", + "inquiry.sending": "送信中…", + "review.summary_count": "レビュー数: {count}", + "review.read_more": "続きを読む", + "review.hide": "閉じる", + "review.awaiting_moderation": "承認待ち", + "review.field.name": "お名前", + "review.field.email": "メールアドレス", + "review.field.reply_placeholder": "返信を書く…", + "review.field.rating": "評価", + "review.field.rating_aria": "5段階評価", + "review.field.star_aria": "{count}つ星", + "review.field.comment": "コメント", + "review.post_reply": "返信を投稿", + "review.cancel": "キャンセル", + "review.reply": "返信", + "review.form_title": "レビューを投稿", + "review.form_note": "投稿は承認後に公開されます。", + "review.error.required": "すべての項目を入力してください。", + "review.error.invalid_email": "有効なメールアドレスを入力してください。", + "review.success": "投稿を受け付けました。承認をお待ちください。", + "review.submitting": "送信中…", + "review.submit": "送信", + "review.discussion_layout": "ディスカッションのレイアウト", + "review.section_heading": "カスタマーレビュー", + "review.form_title_product": "この商品をレビュー", + "product.in_stock": "在庫あり", + "product.out_of_stock": "在庫切れ", + "product.price_unavailable": "価格情報なし", + "product.quantity": "数量", + "product.link_unavailable": "商品リンクを利用できません", + "product.details_heading": "商品詳細", + "product.attributes_heading": "商品属性", + "product.meta.sku": "SKU", + "product.meta.categories": "カテゴリー", + "product.meta.brands": "ブランド", + "product.meta.tags": "タグ", + "product.related": "関連商品", + "product.upsells": "おすすめ商品", + "product.cross_sells": "よく一緒に購入される商品", + "loading.product_archive": "商品アーカイブを読み込み中", + "loading.post_archive": "{taxonomy}アーカイブを読み込み中", + "loading.product_brands": "商品ブランドを読み込み中", + "error.product_brands_unavailable": "商品ブランドを利用できません", + "archive.taxonomy.category": "カテゴリー", + "archive.taxonomy.tag": "タグ", + "archive.taxonomy.brand": "ブランド", + "archive.collection_unavailable": "このコレクションは一時的に利用できません。", + "archive.collection_not_found": "このコレクションは利用できません。", + "archive.product_not_found": "商品{taxonomy}が見つかりません", + "archive.no_products_category": "このカテゴリーに商品はありません。", + "archive.no_products_tag": "このタグの商品はありません。", + "archive.no_products_brand": "このブランドの商品はありません。", + "archive.product_description": "{name}の{taxonomy}の商品を見る。", + "archive.all_brands": "すべてのブランド", + "archive.all_products": "すべての商品", + "archive.product_taxonomy_aria": "商品{taxonomy}アーカイブ", + "archive.products_title": "{title}の商品", + "archive.no_products": "商品はまだありません", + "archive.browse_shop": "ショップを見る", + "archive.post_taxonomy_unavailable": "{taxonomy}を利用できません", + "archive.post_taxonomy_not_found": "{taxonomy}が見つかりません", + "archive.post_tag_description": "#{name}タグの公開記事を見る。", + "archive.post_category_description": "{name}カテゴリーの公開記事を見る。", + "archive.all_posts": "すべての記事", + "archive.post_taxonomy_aria": "{taxonomy}アーカイブ", + "archive.tagged_title": "#{name}タグ", + "archive.posts_title": "{name}の記事", + "archive.no_posts": "この{taxonomy}に公開記事はありません。", + "archive.has_more_posts": "このアーカイブには現在のページに表示されていない記事があります。", + "archive.back_to_blog": "ブログに戻る", + "archive.back_to_shop": "ショップに戻る", + "archive.product_brands_title": "商品ブランド", + "archive.product_brands_kicker": "メーカーから探す", + "archive.product_brands_description": "カタログで購入できるすべてのブランドを見る。", + "archive.brand_product_count": "商品数: {count}", + "archive.no_brands": "商品ブランドはまだありません", + "archive.no_brands_message": "商品を含むブランドは現在公開されていません。", + "archive.browse_products": "商品を見る", + "archive.entry_count": "公開項目数: {count}", + "comment.section_heading": "コメント", + "comment.discussion_heading": "ディスカッション", + "comment.form_title": "ディスカッションに参加", + "comment.form_note": "コメントは承認後に公開されます。", + "comment.recent": "最近のコメント", + "comment.no_approved": "このセクションに一致する承認済みコメントはありません。", + "comment.on_post": "「{title}」へのコメント", + "review.no_approved": "このセクションに一致する承認済み商品レビューはありません。", + "loading.comments": "コメントを読み込み中", + "loading.authors": "著者を読み込み中", + "loading.community_tags": "コミュニティタグを読み込み中", + "loading.community_authors": "コミュニティ著者を読み込み中", + "loading.community_tag": "コミュニティタグを読み込み中", + "error.authors_unavailable": "著者を利用できません", + "error.community_tags_unavailable": "コミュニティタグを利用できません", + "error.community_authors_unavailable": "コミュニティ著者を利用できません", + "error.community_tag_unavailable": "コミュニティタグを利用できません", + "archive.authors_title": "著者", + "archive.authors_kicker": "ブログ投稿者", + "archive.authors_description": "{language}の記事を公開しているすべての著者を見る。", + "archive.author_article_count": "記事数: {count}", + "archive.no_authors": "著者はまだいません", + "archive.no_authors_message": "{language}の記事を公開した著者はまだいません。", + "archive.browse_stories": "記事を見る", + "archive.community": "コミュニティ", + "archive.back_to_community": "コミュニティに戻る", + "archive.community_tags_title": "コミュニティタグ", + "archive.community_tags_kicker": "トピックから探す", + "archive.community_tags_description": "{language}の公開コミュニティ投稿で使用されているすべてのタグを見る。", + "archive.tag_post_count": "投稿数: {count}", + "archive.no_community_tags": "コミュニティタグはまだありません", + "archive.no_community_tags_message": "公開コミュニティ投稿にタグが設定されていません。", + "archive.browse_community_posts": "コミュニティ投稿を見る", + "archive.community_authors_title": "コミュニティ著者", + "archive.community_authors_kicker": "クリエイターと協力者", + "archive.community_authors_description": "コミュニティコンテンツを公開するクリエイターと協力者を見る。", + "archive.no_community_authors": "コミュニティ著者はまだいません", + "archive.no_community_authors_message": "公開中のクリエイターまたは協力者はいません。", + "archive.browse_community_tags": "すべてのコミュニティタグを見る", + "archive.community_tag_title": "#{name} — コミュニティタグ", + "archive.community_tag_kicker": "コミュニティタグ", + "archive.community_tag_description": "#{name}タグの公開コミュニティ投稿{count}件を見る。", + "archive.community_tag_summary": "投稿: {posts} · 公開プロフィール: {profiles}", + "product.not_found": "商品が見つかりません", + "product.not_found_message": "「{identifier}」に一致する公開商品はありません。", + "product.information_aria": "商品情報", + "post.not_found": "記事が見つかりません", + "post.not_found_message": "「{uri}」に公開記事はありません。", + "loading.author": "著者を読み込み中", + "archive.author_description": "{name}による{language}の記事。", + "rating.load_error": "評価を読み込めませんでした。", + "rating.storage_error": "安全な評価ストレージを利用できません。", + "rating.save_error": "評価を保存できませんでした。", + "rating.aria": "コンテンツ評価", + "rating.not_rated": "まだ評価されていません", + "rating.average": "5点中{average}", + "rating.count": "評価数: {count}", + "rating.legend": "1つ星から5つ星で評価", + "rating.star_aria": "{count}つ星", + "rating.saving": "保存中…", + "rating.saved_hint": "評価を保存しました。別の星を選ぶと更新できます。", + "rating.choose": "星を選択" } diff --git a/assets/storefront-ui-strings/pl.json b/assets/storefront-ui-strings/pl.json index 706526b..d618e08 100644 --- a/assets/storefront-ui-strings/pl.json +++ b/assets/storefront-ui-strings/pl.json @@ -673,5 +673,154 @@ "community.product.field.sku": "SKU", "community.product.field.stock": "Stan magazynowy", "community.product.field.category": "Kategoria", - "community.product.submit": "Wystaw produkt" + "community.product.submit": "Wystaw produkt", + "navigation.back_to_top": "Wróć na górę", + "nav.shop": "Sklep", + "nav.blog": "Blog", + "inquiry.error": "Nie udało się wysłać zapytania. Spróbuj ponownie.", + "inquiry.success": "Zapytanie zostało wysłane. Wkrótce odpowiemy e-mailem.", + "inquiry.field.name": "Imię i nazwisko", + "inquiry.field.email": "E-mail", + "inquiry.field.message": "Wiadomość", + "inquiry.sending": "Wysyłanie…", + "review.summary_count": "Liczba opinii: {count}", + "review.read_more": "Czytaj więcej", + "review.hide": "Ukryj", + "review.awaiting_moderation": "Oczekuje na moderację", + "review.field.name": "Imię i nazwisko", + "review.field.email": "E-mail", + "review.field.reply_placeholder": "Napisz odpowiedź…", + "review.field.rating": "Ocena", + "review.field.rating_aria": "Ocena w skali do 5", + "review.field.star_aria": "Liczba gwiazdek: {count}", + "review.field.comment": "Komentarz", + "review.post_reply": "Opublikuj odpowiedź", + "review.cancel": "Anuluj", + "review.reply": "Odpowiedz", + "review.form_title": "Dodaj opinię", + "review.form_note": "Zgłoszenia są moderowane i pojawią się po zatwierdzeniu.", + "review.error.required": "Wszystkie pola są wymagane.", + "review.error.invalid_email": "Podaj prawidłowy adres e-mail.", + "review.success": "Zgłoszenie zostało zapisane i oczekuje na zatwierdzenie.", + "review.submitting": "Wysyłanie…", + "review.submit": "Wyślij", + "review.discussion_layout": "Układ dyskusji", + "review.section_heading": "Opinie klientów", + "review.form_title_product": "Oceń ten produkt", + "product.in_stock": "Dostępny", + "product.out_of_stock": "Brak w magazynie", + "product.price_unavailable": "Cena niedostępna", + "product.quantity": "Ilość", + "product.link_unavailable": "Link do produktu jest niedostępny", + "product.details_heading": "Szczegóły produktu", + "product.attributes_heading": "Atrybuty produktu", + "product.meta.sku": "SKU", + "product.meta.categories": "Kategorie", + "product.meta.brands": "Marki", + "product.meta.tags": "Tagi", + "product.related": "Produkty powiązane", + "product.upsells": "Może Ci się również spodobać", + "product.cross_sells": "Często kupowane razem", + "loading.product_archive": "Ładowanie archiwum produktów", + "loading.post_archive": "Ładowanie archiwum: {taxonomy}", + "loading.product_brands": "Ładowanie marek produktów", + "error.product_brands_unavailable": "Marki produktów są niedostępne", + "archive.taxonomy.category": "Kategoria", + "archive.taxonomy.tag": "Tag", + "archive.taxonomy.brand": "Marka", + "archive.collection_unavailable": "Ta kolekcja jest chwilowo niedostępna.", + "archive.collection_not_found": "Ta kolekcja jest niedostępna.", + "archive.product_not_found": "Nie znaleziono archiwum produktów: {taxonomy}", + "archive.no_products_category": "Nie znaleziono produktów w tej kategorii.", + "archive.no_products_tag": "Nie znaleziono produktów z tym tagiem.", + "archive.no_products_brand": "Nie znaleziono produktów tej marki.", + "archive.product_description": "Przeglądaj produkty w archiwum {taxonomy}: {name}.", + "archive.all_brands": "Wszystkie marki", + "archive.all_products": "Wszystkie produkty", + "archive.product_taxonomy_aria": "Archiwa produktów: {taxonomy}", + "archive.products_title": "Produkty: {title}", + "archive.no_products": "Brak produktów", + "archive.browse_shop": "Przejdź do sklepu", + "archive.post_taxonomy_unavailable": "Archiwum {taxonomy} jest niedostępne", + "archive.post_taxonomy_not_found": "Nie znaleziono archiwum: {taxonomy}", + "archive.post_tag_description": "Przeglądaj wszystkie opublikowane wpisy oznaczone #{name}.", + "archive.post_category_description": "Przeglądaj opublikowane wpisy w kategorii {name}.", + "archive.all_posts": "Wszystkie wpisy", + "archive.post_taxonomy_aria": "Archiwa wpisów: {taxonomy}", + "archive.tagged_title": "Oznaczone #{name}", + "archive.posts_title": "Wpisy: {name}", + "archive.no_posts": "Brak opublikowanych wpisów w archiwum {taxonomy}.", + "archive.has_more_posts": "To archiwum zawiera więcej wpisów niż obecnie wyświetla strona.", + "archive.back_to_blog": "Wróć do bloga", + "archive.back_to_shop": "Wróć do sklepu", + "archive.product_brands_title": "Marki produktów", + "archive.product_brands_kicker": "Kupuj według marki", + "archive.product_brands_description": "Przeglądaj wszystkie marki z produktami dostępnymi w katalogu.", + "archive.brand_product_count": "Liczba produktów: {count}", + "archive.no_brands": "Brak marek produktów", + "archive.no_brands_message": "Obecnie nie opublikowano żadnych niepustych marek produktów.", + "archive.browse_products": "Przeglądaj produkty", + "archive.entry_count": "Liczba publicznych pozycji: {count}", + "comment.section_heading": "Komentarze", + "comment.discussion_heading": "Dyskusja", + "comment.form_title": "Dołącz do dyskusji", + "comment.form_note": "Komentarze są moderowane i pojawią się po zatwierdzeniu.", + "comment.recent": "Najnowsze komentarze", + "comment.no_approved": "Brak zatwierdzonych komentarzy pasujących do tej sekcji.", + "comment.on_post": "Wpis „{title}”", + "review.no_approved": "Brak zatwierdzonych opinii o produktach pasujących do tej sekcji.", + "loading.comments": "Ładowanie komentarzy", + "loading.authors": "Ładowanie autorów", + "loading.community_tags": "Ładowanie tagów społeczności", + "loading.community_authors": "Ładowanie autorów społeczności", + "loading.community_tag": "Ładowanie tagu społeczności", + "error.authors_unavailable": "Autorzy są niedostępni", + "error.community_tags_unavailable": "Tagi społeczności są niedostępne", + "error.community_authors_unavailable": "Autorzy społeczności są niedostępni", + "error.community_tag_unavailable": "Tag społeczności jest niedostępny", + "archive.authors_title": "Autorzy", + "archive.authors_kicker": "Autorzy bloga", + "archive.authors_description": "Poznaj wszystkich autorów opublikowanych artykułów w języku {language}.", + "archive.author_article_count": "Liczba artykułów: {count}", + "archive.no_authors": "Brak autorów", + "archive.no_authors_message": "Żaden autor nie opublikował jeszcze artykułów w języku {language}.", + "archive.browse_stories": "Przeglądaj artykuły", + "archive.community": "Społeczność", + "archive.back_to_community": "Wróć do społeczności", + "archive.community_tags_title": "Tagi społeczności", + "archive.community_tags_kicker": "Przeglądaj według tematu", + "archive.community_tags_description": "Przeglądaj wszystkie tagi użyte w opublikowanych wpisach społeczności w języku {language}.", + "archive.tag_post_count": "Liczba wpisów: {count}", + "archive.no_community_tags": "Brak tagów społeczności", + "archive.no_community_tags_message": "Do opublikowanych wpisów społeczności nie przypisano żadnych tagów.", + "archive.browse_community_posts": "Przeglądaj wpisy społeczności", + "archive.community_authors_title": "Autorzy społeczności", + "archive.community_authors_kicker": "Twórcy i współpracownicy", + "archive.community_authors_description": "Poznaj publicznych twórców i współpracowników publikujących treści społeczności.", + "archive.no_community_authors": "Brak autorów społeczności", + "archive.no_community_authors_message": "Obecnie nie ma publicznych twórców ani współpracowników.", + "archive.browse_community_tags": "Przeglądaj wszystkie tagi społeczności", + "archive.community_tag_title": "#{name} — tag społeczności", + "archive.community_tag_kicker": "Tag społeczności", + "archive.community_tag_description": "Przeglądaj opublikowane wpisy społeczności ({count}) oznaczone #{name}.", + "archive.community_tag_summary": "Wpisy: {posts} · Profile publiczne: {profiles}", + "product.not_found": "Nie znaleziono produktu", + "product.not_found_message": "Sklep nie ma opublikowanego produktu pasującego do „{identifier}”.", + "product.information_aria": "Informacje o produkcie", + "post.not_found": "Nie znaleziono wpisu", + "post.not_found_message": "Witryna nie ma opublikowanego wpisu pod adresem „{uri}”.", + "loading.author": "Ładowanie autora", + "archive.author_description": "Artykuły w języku {language} opublikowane przez: {name}.", + "rating.load_error": "Nie udało się wczytać oceny.", + "rating.storage_error": "Bezpieczne przechowywanie oceny jest niedostępne.", + "rating.save_error": "Nie udało się zapisać oceny.", + "rating.aria": "Ocena treści", + "rating.not_rated": "Brak ocen", + "rating.average": "{average} na 5", + "rating.count": "Liczba ocen: {count}", + "rating.legend": "Oceń treść od jednej do pięciu gwiazdek", + "rating.star_aria": "Liczba gwiazdek: {count}", + "rating.saving": "Zapisywanie…", + "rating.saved_hint": "Ocena została zapisana. Wybierz inną gwiazdkę, aby ją zmienić.", + "rating.choose": "Wybierz gwiazdkę" } diff --git a/functions.php b/functions.php index b49a5ab..fe7c530 100644 --- a/functions.php +++ b/functions.php @@ -9,7 +9,7 @@ exit; } -define( 'FUNKYCOMMERCE_HEADLESS_VERSION', '1.2.18' ); +define( 'FUNKYCOMMERCE_HEADLESS_VERSION', '1.2.19' ); /** * Whether Superfunky Pro is active and licensed. diff --git a/inc/control-center-schema.php b/inc/control-center-schema.php index 74056e2..f37a0a0 100644 --- a/inc/control-center-schema.php +++ b/inc/control-center-schema.php @@ -256,6 +256,9 @@ function funkycommerce_layout_control_fields() { 'layout_product_page' => $select( __( 'Product page template', 'funkycommerce-headless' ), 'classic', array( 'classic', 'studio' ), 'product_page_layout' ), 'layout_related_products_columns' => $select( __( 'Related products columns', 'funkycommerce-headless' ), '4', array( '2', '3', '4' ), 'related_products_columns' ), 'layout_show_studio_related_products_under_meta' => $toggle( __( 'Show related products under categories and brands in Studio', 'funkycommerce-headless' ), 'no', 'show_studio_related_products_under_meta' ), + 'layout_product_page_wishlist_button' => $select( __( 'Product page wishlist button', 'funkycommerce-headless' ), 'full', array( 'full', 'icon', 'disabled' ), 'product_page_wishlist_button_layout' ), + 'layout_product_page_wishlist_icon' => $select( __( 'Product page wishlist icon', 'funkycommerce-headless' ), 'heart', array( 'heart', 'star', 'bookmark' ), 'product_page_wishlist_icon' ), + 'layout_product_descriptions_order' => $select( __( 'Product descriptions order', 'funkycommerce-headless' ), 'short-first', array( 'short-first', 'long-first' ), 'product_descriptions_order' ), 'layout_checkout_store_mode' => $select( __( 'Checkout store mode', 'funkycommerce-headless' ), 'physical', array( 'physical', 'digital' ), 'checkout_store_mode' ), 'layout_checkout_coupon_position' => $select( __( 'Checkout coupon position', 'funkycommerce-headless' ), 'inline', array( 'inline', 'top' ), 'checkout_coupon_position' ), 'layout_checkout_payment_position' => $select( __( 'Checkout payment position', 'funkycommerce-headless' ), 'left', array( 'left', 'right' ), 'checkout_payment_position' ), @@ -271,18 +274,23 @@ function funkycommerce_layout_control_fields() { 'layout_header_sticky' => $toggle( __( 'Sticky header', 'funkycommerce-headless' ), 'yes', 'header_sticky' ), 'layout_header_search_variant' => $select( __( 'Header search layout', 'funkycommerce-headless' ), 'full-width', array( 'full-width', 'expandable' ), 'header_search_variant' ), 'layout_header_logo_variant' => $select( __( 'Header logo layout', 'funkycommerce-headless' ), 'text-image', array( 'text', 'image', 'text-image' ), 'header_logo_variant' ), + 'layout_header_arrangement' => $select( __( 'Header content arrangement', 'funkycommerce-headless' ), 'classic', array( 'classic', 'single-row', 'centered' ), 'header_arrangement' ), 'layout_cart_trigger_variant' => $select( __( 'Header cart behavior', 'funkycommerce-headless' ), 'drawer', array( 'drawer', 'dropdown' ), 'cart_trigger_variant' ), 'layout_show_cart_promoted_product' => $toggle( __( 'Show promoted product in empty cart', 'funkycommerce-headless' ), 'yes', 'show_cart_drawer_promoted_product' ), 'layout_show_all_cart_promoted_products' => $toggle( __( 'Show all featured products in empty cart', 'funkycommerce-headless' ), 'no', 'show_all_cart_promoted_products' ), 'layout_show_footer' => $toggle( __( 'Show footer', 'funkycommerce-headless' ), 'yes', 'show_footer' ), - 'layout_footer_columns' => $select( __( 'Footer columns', 'funkycommerce-headless' ), 'grid-4', array( 'grid-4', 'grid-2-wide', 'accordion-single' ), 'footer_columns_layout' ), + 'layout_footer_columns' => $select( __( 'Footer columns', 'funkycommerce-headless' ), 'grid-4', array( 'grid-1', 'grid-2-wide', 'grid-4', 'grid-5', 'grid-6', 'grid-7', 'accordion-single' ), 'footer_columns_layout' ), 'layout_footer_newsletter' => $select( __( 'Footer newsletter layout', 'funkycommerce-headless' ), 'banner', array( 'banner', 'centered', 'image-bg' ), 'footer_newsletter_layout' ), 'layout_show_footer_newsletter' => $toggle( __( 'Show footer newsletter', 'funkycommerce-headless' ), 'yes', 'show_footer_newsletter' ), 'layout_footer_assistant' => $select( __( 'Footer assistant / player layout', 'funkycommerce-headless' ), 'side-by-side', array( 'side-by-side', 'tabbed', 'stacked' ), 'footer_assistant_layout' ), 'layout_footer_logo_variant' => $select( __( 'Footer logo layout', 'funkycommerce-headless' ), 'text-image', array( 'text', 'image', 'text-image' ), 'footer_logo_variant' ), 'layout_footer_bottom_bar' => $select( __( 'Footer bottom bar layout', 'funkycommerce-headless' ), 'split', array( 'split', 'centered' ), 'footer_bottom_bar_layout' ), 'layout_footer_extra_wrapper' => $select( __( 'Footer extra wrapper layout', 'funkycommerce-headless' ), 'inline', array( 'inline', 'full-bleed' ), 'footer_extra_wrapper_layout' ), + 'layout_show_back_to_top' => $toggle( __( 'Show back-to-top button', 'funkycommerce-headless' ), 'yes', 'show_back_to_top' ), + 'layout_back_to_top_style' => $select( __( 'Back-to-top button style', 'funkycommerce-headless' ), 'filled', array( 'filled', 'outline', 'ghost' ), 'back_to_top_style' ), + 'layout_back_to_top_icon' => $select( __( 'Back-to-top button icon', 'funkycommerce-headless' ), 'arrow', array( 'arrow', 'chevron', 'text' ), 'back_to_top_icon' ), + 'layout_back_to_top_placement' => $select( __( 'Back-to-top button placement', 'funkycommerce-headless' ), 'bottom-right', array( 'bottom-right', 'bottom-left', 'bottom-center' ), 'back_to_top_placement' ), ); foreach ( array( @@ -442,6 +450,15 @@ function funkycommerce_control_center_sections() { 'sanitize' => 'html', 'description' => __( 'Basic HTML is allowed, including links.', 'funkycommerce-headless' ), ), + 'show_theme_credit' => array( 'label' => __( 'Show theme credit', 'funkycommerce-headless' ), 'type' => 'toggle', 'tier' => 'pro', 'default' => 'yes' ), + 'theme_credit_text' => array( + 'label' => __( 'Theme credit text', 'funkycommerce-headless' ), + 'type' => 'textarea', + 'tier' => 'pro', + 'default' => 'Made with superfuky WP theme by Coded Letter.', + 'sanitize' => 'html', + 'description' => __( 'PRO sites may customize or hide this credit. Free sites always display the bundled attribution.', 'funkycommerce-headless' ), + ), 'social_links' => array( 'label' => __( 'Social profiles', 'funkycommerce-headless' ), 'type' => 'social_links', 'tier' => 'free', 'default' => array(), 'description' => __( 'Free theme feature. Add any supported platform more than once; every profile opens in a new tab.', 'funkycommerce-headless' ) ), 'newsletter_heading' => array( 'label' => __( 'Newsletter heading', 'funkycommerce-headless' ), 'type' => 'text', 'tier' => 'free' ), 'newsletter_text' => array( 'label' => __( 'Newsletter supporting text', 'funkycommerce-headless' ), 'type' => 'textarea', 'tier' => 'free' ), diff --git a/inc/control-center.php b/inc/control-center.php index 89d82be..f252e5a 100644 --- a/inc/control-center.php +++ b/inc/control-center.php @@ -733,6 +733,10 @@ function funkycommerce_storefront_control_settings( $language = '' ) { $assistant_show_footer = $has_surface_settings ? 'yes' === $settings['ai_assistant_show_footer'] : 'footer' === $legacy_placement; $assistant_show_fixed = $has_surface_settings ? 'yes' === $settings['ai_assistant_show_fixed'] : 'fixed' === $legacy_placement; $assistant_placement = $assistant_show_header ? 'header' : ( $assistant_show_fixed ? 'fixed' : 'footer' ); + $default_theme_credit = 'Made with superfuky WP theme by Coded Letter.'; + $theme_credit = funkycommerce_is_pro() + ? wp_kses_post( (string) ( $settings['theme_credit_text'] ?? $default_theme_credit ) ) + : $default_theme_credit; return array( 'branding' => array( @@ -766,6 +770,8 @@ function funkycommerce_storefront_control_settings( $language = '' ) { 'newsletterPrivacyLabel' => (string) ( $settings['newsletter_privacy_label'] ?? '' ), 'extraHtml' => (string) ( $settings['footer_extra_content'] ?? '' ), 'copyrightText' => wp_kses_post( (string) ( $settings['copyright_text'] ?? '' ) ), + 'themeCredit' => $theme_credit ?: $default_theme_credit, + 'showThemeCredit' => ! funkycommerce_is_pro() || 'yes' === ( $settings['show_theme_credit'] ?? 'yes' ), 'spotifyPlaylistUrl' => funkycommerce_normalize_spotify_playlist_url( $settings['spotify_playlist_url'] ?? '' ), 'spotifyPlaylistEmbedUrl' => funkycommerce_spotify_playlist_embed_url( $settings['spotify_playlist_url'] ?? '' ), 'spotifyPlayerTitle' => sanitize_text_field( (string) ( $settings['spotify_player_title'] ?? '' ) ), diff --git a/inc/navigation-commerce.php b/inc/navigation-commerce.php index df81c46..9ed5f0f 100644 --- a/inc/navigation-commerce.php +++ b/inc/navigation-commerce.php @@ -394,6 +394,8 @@ function funkycommerce_register_navigation_commerce_graphql() { 'newsletterPrivacyLabel' => array( 'type' => array( 'non_null' => 'String' ) ), 'extraHtml' => array( 'type' => array( 'non_null' => 'String' ) ), 'copyrightText' => array( 'type' => array( 'non_null' => 'String' ) ), + 'themeCredit' => array( 'type' => array( 'non_null' => 'String' ) ), + 'showThemeCredit' => array( 'type' => array( 'non_null' => 'Boolean' ) ), 'spotifyPlaylistUrl' => array( 'type' => 'String' ), 'spotifyPlaylistEmbedUrl' => array( 'type' => 'String' ), 'spotifyPlayerTitle' => array( 'type' => array( 'non_null' => 'String' ) ), diff --git a/package-lock.json b/package-lock.json index a2c49a9..bc1069a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "funkycommerce-headless-theme", - "version": "1.2.18", + "version": "1.2.19", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "funkycommerce-headless-theme", - "version": "1.2.18", + "version": "1.2.19", "devDependencies": { "autoprefixer": "^10.4.20", "esbuild": "^0.28.2", diff --git a/package.json b/package.json index ce2bfcc..8c26d84 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "funkycommerce-headless-theme", "private": true, - "version": "1.2.18", + "version": "1.2.19", "description": "Tailwind/build tooling for the FunkyCommerce Headless WordPress theme's native frontend assets (block templates, template parts, loader, and Spotify slot).", "scripts": { "build:css": "tailwindcss -i ./assets/css/theme-source.css -o ./assets/dist/theme.css --minify", diff --git a/readme.txt b/readme.txt index 3fc5c30..6855740 100644 --- a/readme.txt +++ b/readme.txt @@ -4,7 +4,7 @@ Tags: headless, woocommerce, wpgraphql, full-site-editing Requires at least: 6.7 Tested up to: 6.8 Requires PHP: 7.4 -Stable tag: 1.2.18 +Stable tag: 1.2.19 License: GPL-2.0-or-later License URI: https://www.gnu.org/licenses/gpl-2.0.html @@ -15,6 +15,12 @@ Control Center, the theme also ships a complete native WordPress rendering path "Native frontend theme" below) with accessible header/footer/navigation templates and core front/home/singular/archive/search/404 routes styled to match the storefront. +== 1.2.19 highlights == + +* Preserves product image aspect ratios in galleries and lightboxes and serves linked media-library PDFs through the storefront domain. +* Keeps all public archive surfaces indexable and completes translated archive, inquiry, rating, review, comment, and related-product UI. +* Adds product wishlist and description-order controls, expanded footer/header layouts, an accessible back-to-top button, and persistent free-theme attribution. + == 1.2.18 highlights == * Allows safe HTML links in the free-theme footer copyright field. diff --git a/style.css b/style.css index 8cd51e7..379f130 100644 --- a/style.css +++ b/style.css @@ -7,7 +7,7 @@ Description: A minimal, content-first block theme for polished WordPress preview Requires at least: 6.7 Tested up to: 6.8 Requires PHP: 7.4 -Version: 1.2.18 +Version: 1.2.19 Update URI: https://github.com/coded-letter/superfunky-theme License: GPL-2.0-or-later License URI: https://www.gnu.org/licenses/gpl-2.0.html