{"id":4333,"date":"2023-10-26T13:41:03","date_gmt":"2023-10-26T13:41:03","guid":{"rendered":"https:\/\/hmmh.pl\/?p=4333"},"modified":"2024-10-08T11:35:22","modified_gmt":"2024-10-08T11:35:22","slug":"korzystanie-z-pol-niestandardowych-w-shopware-6","status":"publish","type":"post","link":"https:\/\/hmmh.pl\/pl\/e-commerce\/shopware-pl\/korzystanie-z-pol-niestandardowych-w-shopware-6\/","title":{"rendered":"Korzystanie z p\u00f3l niestandardowych w Shopware 6"},"content":{"rendered":"\n<p>Podczas opracowywania nowej wtyczki w Shopware 6 cz\u0119sto konieczne jest w\u0142\u0105czenie p\u00f3l niestandardowych. Pola te maj\u0105 wiele funkcji, kt\u00f3re mo\u017cna szczeg\u00f3\u0142owo zbada\u0107 na stronie dokumentacji Shopware. Zasadniczo pola niestandardowe Shopware umo\u017cliwiaj\u0105 przechowywanie dodatkowych danych na temat r\u00f3\u017cnych podmiot\u00f3w. Dane te s\u0105 przechowywane w bazie danych w formacie JSON i s\u0105 dost\u0119pne jako tablica. W tym artykule skupimy si\u0119 na prawid\u0142owej implementacji p\u00f3l niestandardowych w projekcie. Tre\u015b\u0107 jest skierowana do programist\u00f3w, kt\u00f3rzy zdobyli ju\u017c pewne do\u015bwiadczenie w tworzeniu wtyczek.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Typowe b\u0142\u0119dy, kt\u00f3rych nale\u017cy unika\u0107<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Zaniedbanie usuwania nieu\u017cywanych p\u00f3l niestandardowych<\/strong> &#8211; cz\u0119sty b\u0142\u0105d wyst\u0119puje, gdy definicja pola niestandardowego jest dodawana podczas instalacji wtyczki, ale nie jest usuwana, gdy nie jest ju\u017c potrzebna. To niedopatrzenie mo\u017ce prowadzi\u0107 do b\u0142\u0119d\u00f3w podczas ponownej instalacji wtyczki, poniewa\u017c system wska\u017ce, \u017ce definicja ju\u017c istnieje.<\/li><li><strong>Przeci\u0105\u017cenie g\u0142\u00f3wnego pliku wtyczki danymi<\/strong> &#8211; Kolejne wyzwanie pojawia si\u0119, gdy istnieje potrzeba dodania znacznej ilo\u015bci danych. Je\u015bli wymaganych jest wiele definicji, g\u0142\u00f3wny plik instalacyjny wtyczki mo\u017ce sta\u0107 si\u0119 zbyt d\u0142ugi, zw\u0142aszcza je\u015bli wtyczka zawiera wiele funkcji. W takich przypadkach zaleca si\u0119 przeniesienie instalacji p\u00f3l niestandardowych do oddzielnej klasy lub nawet wielu klas, je\u015bli istnieje wiele p\u00f3l niestandardowych do zarz\u0105dzania.<\/li><\/ul>\n\n\n\n<p>Poni\u017cej znajduje si\u0119 przyk\u0142ad tego, jak mo\u017ce wygl\u0105da\u0107 g\u0142\u00f3wny plik wtyczki.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php declare(strict_types=1);\nnamespace Example;\nuse Example\\Service\\OrderCustomFields;\nuse Shopware\\Core\\Framework\\Plugin;\nuse Shopware\\Core\\Framework\\Plugin\\Context\\ActivateContext;\nuse Shopware\\Core\\Framework\\Plugin\\Context\\DeactivateContext;\nuse Shopware\\Core\\Framework\\Plugin\\Context\\InstallContext;\nuse Shopware\\Core\\Framework\\Plugin\\Context\\UninstallContext;\nclass Example extends Plugin\n{\n    public function install(InstallContext $installContext): void\n    {\n        (new OrderCustomFields($this---&gt;container))\n            -&gt;installCustomFields($installContext-&gt;getContext());\n    }\n    public function activate(ActivateContext $activateContext): void\n    {\n        (new OrderCustomFields($this-&gt;container))\n            -&gt;activateCustomFields($activateContext-&gt;getContext());\n    }\n    public function deactivate(DeactivateContext $deactivateContext): void\n    {\n        (new OrderCustomFields($this-&gt;container))\n            -&gt;deactivateCustomFields($deactivateContext-&gt;getContext());\n    }\n    public function uninstall(UninstallContext $uninstallContext): void\n    {\n        (new OrderCustomFields($this-&gt;container))\n            -&gt;uninstallCustomFields($uninstallContext-&gt;getContext());\n    }\n}<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p>Wdro\u017cenie tego podej\u015bcia u\u0142atwi rozszerzenie dodatkowych p\u00f3l w przysz\u0142o\u015bci i zapobiegnie nadmiernemu za\u015bmieceniu g\u0142\u00f3wnej klasy wtyczki kodem.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Jak instalowa\u0107 Order Custom Field<\/strong><\/h2>\n\n\n\n<p>Przyjrzyjmy si\u0119 bli\u017cej samej klasie OrderCustomField. Aby usprawni\u0107 zarz\u0105dzanie polami niestandardowymi, zaleca si\u0119 zdefiniowanie kluczy dla tych p\u00f3l jako sta\u0142ych na pocz\u0105tku definicji klasy.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class OrderCustomFields\n{\n    public const LABEL_CUSTOM_FIELD_KEY = custom_label;\n    public const ONE_CUSTOM_FIELD_KEY = 'custom_field_one';\n    public const TWO_CUSTOM_FIELD_KEY = 'custom_field_two';\n    protected ContainerInterface $container;\n    public function __construct(ContainerInterface $container)\n    {\n        $this-&gt;container = $container;\n    }\n    public function installCustomFields(Context $context): void\n    {\n        $searchResults = $this-&gt;getCustomFields($context);\n        if($searchResults-&gt;getTotal() === 0)\n        {\n            \/\/ Add custom fields\n        }\n    }\n    public function activateCustomFields(Context $context): void\n    {\n        $this-&gt;setCustomFieldsActivate(\n            $this-&gt;getCustomFields($context)-&gt;getIds(), true, $context);\n    }\n    public function deactivateCustomFields(Context $context): void\n    {\n        $this-&gt;setCustomFieldsActivate(\n            $this-&gt;getCustomFields($context)-&gt;getIds(), false, $context);\n    }\n    public function uninstallCustomFields(Context $context): void\n    {\n        $customFieldsIds = $this-&gt;getCustomFields($context)-&gt;getIds();\n        if(count($customFieldsIds) !== 0)\n        {\n            $this-&gt;container-&gt;get('custom_field_set.repository')-&gt;delete(&#91;&#91;\n                'id' =&gt; $customFieldsIds&#91;0]\n                                                                          ]], $context);\n        }\n    }\n    private function setCustomFieldsActivate(array $customFieldsIds, bool $active, Context $context): void\n    {\n        $this-&gt;container-&gt;get('custom_field_set.repository')-&gt;update(&#91;&#91;\n            'id' =&gt; $customFieldsIds&#91;0], \n            'active' =&gt; $active\n                                                                      ]], $context);\n    }\n    private function getCustomFields(Context $context): IdSearchResult\n    {\n        return $this-&gt;container-&gt;get('custom_field_set.repository')-&gt;searchIds(\n            (new Criteria())-&gt;addFilter(new EqualsFilter(\n                'name', self::LABEL_CUSTOM_FIELD_KEY)), $context);\n    }\n}<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Tworzenie Custom Fields<\/strong><\/h2>\n\n\n\n<p>Po ustaleniu przep\u0142ywu zarz\u0105dzania polami niestandardowymi mo\u017cna przyst\u0105pi\u0107 do faktycznego tworzenia tych p\u00f3l. Podczas dodawania p\u00f3l niestandardowych nale\u017cy pami\u0119ta\u0107, \u017ce nale\u017cy uwzgl\u0119dni\u0107 zar\u00f3wno definicj\u0119 zestawu p\u00f3l niestandardowych (kt\u00f3ra odpowiada tabeli w bazie danych o nazwie \u201ecustom_field_set\u201d), jak i same definicje p\u00f3l (znajduj\u0105ce si\u0119 w tabelach \u201ecustom_field\u201d). Wszelkie zmiany wprowadzone w statusie zestawu b\u0119d\u0105 mia\u0142y wp\u0142yw na wszystkie powi\u0105zane pola.<\/p>\n\n\n\n<p>Na przyk\u0142ad podstawowa struktura tworzenia pola mo\u017ce wygl\u0105da\u0107 nast\u0119puj\u0105co:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public function installCustomFields(Context $context): void\n{\n    $searchResults = $this-&gt;getCustomFields($context);\n    if($searchResults-&gt;getTotal() === 0)\n    {\n        $customField = &#91;\n            'name' =&gt; self::LABEL_CUSTOM_FIELD_KEY,\n            'active' =&gt; false,\n            'config' =&gt; &#91;\n                'label' =&gt; &#91;\n                    'en-GB' =&gt; 'Label translation'\n                ]\n            ],\n            'relations' =&gt; &#91;\n                &#91;\n                    'entityName' =&gt; 'order'\n                ]\n            ],\n            'customFields' =&gt; &#91;\n                 &#91;\n                     'name' =&gt; self::ONE_CUSTOM_FIELD_KEY, \n                     'type' =&gt; CustomFieldTypes::TEXT, \n                     'config' =&gt; &#91;\n                         'label' =&gt; &#91;\n                             'en-GB' =&gt; 'Field one translation'\n                         ]\n                     ]\n                 ], &#91;\n                     'name' =&gt; self::TWO_CUSTOM_FIELD_KEY, \n                     'type' =&gt; CustomFieldTypes::TEXT, \n                     'config' =&gt; &#91;\n                         'label' =&gt; &#91;\n                             'en-GB' =&gt; 'Field two translation'\n                         ]\n                     ]\n                 ]\n             ]\n        ];\n        $this-&gt;container-&gt;get('custom_field_set.repository')-&gt;create(&#91;$customField], $context);\n     }\n}<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p>Na tym etapie proces mo\u017cna technicznie uzna\u0107 za zako\u0144czony. Jednak pola niestandardowe s\u0105 zwykle dodawane w j\u0119zyku, z kt\u00f3rego b\u0119dzie korzysta\u0142 klient. Podczas tworzenia wtyczki do sklepu konieczne jest uwzgl\u0119dnienie t\u0142umacze\u0144 w wielu j\u0119zykach. Jak mo\u017cna to zrobi\u0107 najskuteczniej? Poni\u017cszy przyk\u0142ad pokazuje nie tylko jak oddzieli\u0107 t\u0142umaczenia od kodu, kt\u00f3ry dodaje pola, ale tak\u017ce jak upewni\u0107 si\u0119, \u017ce dodawane s\u0105 tylko t\u0142umaczenia dla j\u0119zyk\u00f3w ju\u017c obecnych w bazie danych Shopware.<\/p>\n\n\n\n<p>Pierwszym krokiem jest stworzenie nowej klasy, kt\u00f3ra b\u0119dzie obs\u0142ugiwa\u0107 t\u0142umaczenia:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class CustomFieldsTranslation\n{\n    public const TRANSLATIONS = &#91;\n        'en-GB' =&gt; &#91;\n            OrderCustomFields::LABEL_CUSTOM_FIELD_KEY =&gt; 'Label translation',\n            OrderCustomFields::ONE_CUSTOM_FIELD_KEY =&gt; 'Field one translation',\n            OrderCustomFields::TWO_CUSTOM_FIELD_KEY =&gt; 'Field two translation'\n        ],\n        'pl-PL' =&gt; &#91;\n            OrderCustomFields::LABEL_CUSTOM_FIELD_KEY =&gt; 'Label translation',\n            OrderCustomFields::ONE_CUSTOM_FIELD_KEY =&gt; 'Field one translation',\n            OrderCustomFields::TWO_CUSTOM_FIELD_KEY =&gt; 'Field two translation'\n        ]\n    ];\n}<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p>Wracaj\u0105c do klasy odpowiedzialnej za tworzenie p\u00f3l niestandardowych, musisz doda\u0107 funkcj\u0119, kt\u00f3ra pobiera dost\u0119pne j\u0119zyki:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>private function getAvailableLanguages(Context $context): array\n{\n    return $this-&gt;container-&gt;get('language.repository')-&gt;search(\n        (new Criteria())-&gt;addAssociation('locale'),\n        $context\n    )-&gt;getElements();\n}<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p>Nast\u0119pnie do\u0142\u0105cz funkcj\u0119, kt\u00f3ra b\u0119dzie obs\u0142ugiwa\u0107 generowanie t\u0142umacze\u0144:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>private function generateTranslation(string $key, array $languages): array\n{\n    $translation = &#91;];\n    foreach($languages as $language)\n    {\n        $code = $language-&gt;getLocale()-&gt;getCode();\n        if(isset(CustomFieldsTranslation::TRANSLATIONS&#91;$code]))\n        {\n            $translation&#91;'config']&#91;'label']&#91;$code] = CustomFieldsTranslation::TRANSLATIONS&#91;$code]&#91;$key];\n        }\n    }\n    return $translation;\n}<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p>Nast\u0119pnie dokonaj niezb\u0119dnych zmian w funkcji generatora:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>if($searchResults-&gt;getTotal() === 0)\n{\n    $languages = $this-&gt;getAvailableLanguages($context);\n    $customField = &#91;\n        'name' =&gt; self::LABEL_CUSTOM_FIELD_KEY,\n        'active' =&gt; false,\n        'config' =&gt; $this-&gt;generateTranslation(self::LABEL_CUSTOM_FIELD_KEY, $languages),\n        'customFields' =&gt; &#91;\n            &#91;\n                'name' =&gt; self::ONE_CUSTOM_FIELD_KEY,\n                'type' =&gt; CustomFieldTypes::TEXT,\n                'config' =&gt; $this-&gt;generateTranslation(self::ONE_CUSTOM_FIELD_KEY, $languages)\n            ], &#91;\n                'name' =&gt; self::TWO_CUSTOM_FIELD_KEY,\n                'type' =&gt; CustomFieldTypes::TEXT,\n                'config' =&gt; $this-&gt;generateTranslation(self::TWO_CUSTOM_FIELD_KEY, $languages)\n            ]\n        ]\n    ];\n    $this-&gt;container-&gt;get('custom_field_set.repository')-&gt;create(&#91;$customField], $context);\n}<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p>Takie podej\u015bcie skutkuje solidn\u0105 implementacj\u0105 p\u00f3l niestandardowych, kt\u00f3re mo\u017cna bez wysi\u0142ku rozszerzy\u0107 o dodatkowe pola lub j\u0119zyki w razie potrzeby.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Podczas opracowywania nowej wtyczki w Shopware 6 cz\u0119sto konieczne jest w\u0142\u0105czenie p\u00f3l niestandardowych. Pola te<\/p>\n","protected":false},"author":1,"featured_media":5509,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[106],"tags":[],"class_list":["post-4333","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-shopware-pl"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Korzystanie z p\u00f3l niestandardowych w Shopware 6 - Software house for E-commerce and Web development - Hmmh Poland<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/hmmh.pl\/pl\/e-commerce\/shopware-pl\/korzystanie-z-pol-niestandardowych-w-shopware-6\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Korzystanie z p\u00f3l niestandardowych w Shopware 6 - Software house for E-commerce and Web development - Hmmh Poland\" \/>\n<meta property=\"og:description\" content=\"Podczas opracowywania nowej wtyczki w Shopware 6 cz\u0119sto konieczne jest w\u0142\u0105czenie p\u00f3l niestandardowych. Pola te\" \/>\n<meta property=\"og:url\" content=\"https:\/\/hmmh.pl\/pl\/e-commerce\/shopware-pl\/korzystanie-z-pol-niestandardowych-w-shopware-6\/\" \/>\n<meta property=\"og:site_name\" content=\"Software house for E-commerce and Web development - Hmmh Poland\" \/>\n<meta property=\"article:published_time\" content=\"2023-10-26T13:41:03+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-10-08T11:35:22+00:00\" \/>\n<meta name=\"author\" content=\"like\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Napisane przez\" \/>\n\t<meta name=\"twitter:data1\" content=\"like\" \/>\n\t<meta name=\"twitter:label2\" content=\"Szacowany czas czytania\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Korzystanie z p\u00f3l niestandardowych w Shopware 6 - Software house for E-commerce and Web development - Hmmh Poland","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/hmmh.pl\/pl\/e-commerce\/shopware-pl\/korzystanie-z-pol-niestandardowych-w-shopware-6\/","og_locale":"pl_PL","og_type":"article","og_title":"Korzystanie z p\u00f3l niestandardowych w Shopware 6 - Software house for E-commerce and Web development - Hmmh Poland","og_description":"Podczas opracowywania nowej wtyczki w Shopware 6 cz\u0119sto konieczne jest w\u0142\u0105czenie p\u00f3l niestandardowych. Pola te","og_url":"https:\/\/hmmh.pl\/pl\/e-commerce\/shopware-pl\/korzystanie-z-pol-niestandardowych-w-shopware-6\/","og_site_name":"Software house for E-commerce and Web development - Hmmh Poland","article_published_time":"2023-10-26T13:41:03+00:00","article_modified_time":"2024-10-08T11:35:22+00:00","author":"like","twitter_card":"summary_large_image","twitter_misc":{"Napisane przez":"like","Szacowany czas czytania":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/hmmh.pl\/pl\/e-commerce\/shopware-pl\/korzystanie-z-pol-niestandardowych-w-shopware-6\/#article","isPartOf":{"@id":"https:\/\/hmmh.pl\/pl\/e-commerce\/shopware-pl\/korzystanie-z-pol-niestandardowych-w-shopware-6\/"},"author":{"name":"like","@id":"https:\/\/hmmh.pl\/#\/schema\/person\/a68d61a603dbb3192e29c1e5f78976d1"},"headline":"Korzystanie z p\u00f3l niestandardowych w Shopware 6","datePublished":"2023-10-26T13:41:03+00:00","dateModified":"2024-10-08T11:35:22+00:00","mainEntityOfPage":{"@id":"https:\/\/hmmh.pl\/pl\/e-commerce\/shopware-pl\/korzystanie-z-pol-niestandardowych-w-shopware-6\/"},"wordCount":576,"image":{"@id":"https:\/\/hmmh.pl\/pl\/e-commerce\/shopware-pl\/korzystanie-z-pol-niestandardowych-w-shopware-6\/#primaryimage"},"thumbnailUrl":"https:\/\/hmmh.pl\/app\/uploads\/2025\/01\/Utilizing-custom-fields-in-Shopware-6.png","articleSection":["Shopware"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/hmmh.pl\/pl\/e-commerce\/shopware-pl\/korzystanie-z-pol-niestandardowych-w-shopware-6\/","url":"https:\/\/hmmh.pl\/pl\/e-commerce\/shopware-pl\/korzystanie-z-pol-niestandardowych-w-shopware-6\/","name":"Korzystanie z p\u00f3l niestandardowych w Shopware 6 - Software house for E-commerce and Web development - Hmmh Poland","isPartOf":{"@id":"https:\/\/hmmh.pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/hmmh.pl\/pl\/e-commerce\/shopware-pl\/korzystanie-z-pol-niestandardowych-w-shopware-6\/#primaryimage"},"image":{"@id":"https:\/\/hmmh.pl\/pl\/e-commerce\/shopware-pl\/korzystanie-z-pol-niestandardowych-w-shopware-6\/#primaryimage"},"thumbnailUrl":"https:\/\/hmmh.pl\/app\/uploads\/2025\/01\/Utilizing-custom-fields-in-Shopware-6.png","datePublished":"2023-10-26T13:41:03+00:00","dateModified":"2024-10-08T11:35:22+00:00","author":{"@id":"https:\/\/hmmh.pl\/#\/schema\/person\/a68d61a603dbb3192e29c1e5f78976d1"},"breadcrumb":{"@id":"https:\/\/hmmh.pl\/pl\/e-commerce\/shopware-pl\/korzystanie-z-pol-niestandardowych-w-shopware-6\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/hmmh.pl\/pl\/e-commerce\/shopware-pl\/korzystanie-z-pol-niestandardowych-w-shopware-6\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/hmmh.pl\/pl\/e-commerce\/shopware-pl\/korzystanie-z-pol-niestandardowych-w-shopware-6\/#primaryimage","url":"https:\/\/hmmh.pl\/app\/uploads\/2025\/01\/Utilizing-custom-fields-in-Shopware-6.png","contentUrl":"https:\/\/hmmh.pl\/app\/uploads\/2025\/01\/Utilizing-custom-fields-in-Shopware-6.png","width":1920,"height":1280},{"@type":"BreadcrumbList","@id":"https:\/\/hmmh.pl\/pl\/e-commerce\/shopware-pl\/korzystanie-z-pol-niestandardowych-w-shopware-6\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/hmmh.pl\/pl\/"},{"@type":"ListItem","position":2,"name":"Korzystanie z p\u00f3l niestandardowych w Shopware 6"}]},{"@type":"WebSite","@id":"https:\/\/hmmh.pl\/#website","url":"https:\/\/hmmh.pl\/","name":"Software house for E-commerce and Web development - Hmmh Poland","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/hmmh.pl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Person","@id":"https:\/\/hmmh.pl\/#\/schema\/person\/a68d61a603dbb3192e29c1e5f78976d1","name":"like","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/secure.gravatar.com\/avatar\/91bc44061f50070ea27580f34579b5e024be30221ea08ef3b9afec4ec370ee83?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/91bc44061f50070ea27580f34579b5e024be30221ea08ef3b9afec4ec370ee83?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/91bc44061f50070ea27580f34579b5e024be30221ea08ef3b9afec4ec370ee83?s=96&d=mm&r=g","caption":"like"},"sameAs":["https:\/\/hmmh.pl\/wp"]}]}},"_links":{"self":[{"href":"https:\/\/hmmh.pl\/pl\/wp-json\/wp\/v2\/posts\/4333","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hmmh.pl\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hmmh.pl\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hmmh.pl\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hmmh.pl\/pl\/wp-json\/wp\/v2\/comments?post=4333"}],"version-history":[{"count":4,"href":"https:\/\/hmmh.pl\/pl\/wp-json\/wp\/v2\/posts\/4333\/revisions"}],"predecessor-version":[{"id":4337,"href":"https:\/\/hmmh.pl\/pl\/wp-json\/wp\/v2\/posts\/4333\/revisions\/4337"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/hmmh.pl\/pl\/wp-json\/wp\/v2\/media\/5509"}],"wp:attachment":[{"href":"https:\/\/hmmh.pl\/pl\/wp-json\/wp\/v2\/media?parent=4333"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hmmh.pl\/pl\/wp-json\/wp\/v2\/categories?post=4333"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hmmh.pl\/pl\/wp-json\/wp\/v2\/tags?post=4333"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}