Hallo,
wie kann ich die SEO Url für Artikel / Produkte über die Rest Api abrufen?
Ich schreibe gerade einen Shortcode für Wordpress, um Shopware Artikelbilder mit Links in Posts anzuzeigen.
Natürlich kann ich auf die interne Artikel URL verlinken:
shop_url/shopware.php?sViewport=detail&sArticle=article_id
Aber schön ist das nicht.
Viele Grüsse,
Jens
Du könntest aus der DB die SEO Url entnehmen und den Link so zusammensetzen.
1 „Gefällt mir“
@yicdeniz schrieb:
Du könntest aus der DB die SEO Url entnehmen und den Link so zusammensetzen.
Danke, aber von extern komme ich nicht an die Shopware Datenbank heran. Ich muss das Rest Api verwenden.
Wenn du Fit mit PHP bist, kannst du dir ein Plugin bauen, welches die REST Schnittstelle erweitert:
https://developers.shopware.com/developers-guide/rest-api/extend-api-resource/
1 „Gefällt mir“
@DFienko schrieb:
Wenn du Fit mit PHP bist, kannst du dir ein Plugin bauen, welches die REST Schnittstelle erweitert:
https://developers.shopware.com/developers-guide/rest-api/extend-api-resource/
Daram hatte ich auch schon gedacht. Ich muss mir nur überlegen, ob es den Aufwand wert ist, nur um schönere Urls in meinen Links zu haben. Für den Googlebot sehen die Links dann halt schöner aus und senden bessere Signale für das Ranking …
@DFienko schrieb:
Wenn du Fit mit PHP bist, kannst du dir ein Plugin bauen, welches die REST Schnittstelle erweitert:
https://developers.shopware.com/developers-guide/rest-api/extend-api-resource/
Leider funktioniert das Article Rest Plugin bei mir nicht. Wenn ich das Plugin einbaue und aktiviere, sehe ich über die Rest Api kein neues
Custom Field in den Artikel Daten.
Hat jemand eine Ahnung, wie man dieses Plugin korrekt einbaut?
Danke und viele Grüsse
Jens
Also hier ist die Lösung, falls es jemanden interessiert:
-
Ladet Euch dieses Plugin herunter (wie von @DFienko oben empfohlen), dann habt Ihr ein Gerüst für ein Plugin, um die Artikel API zu erweitern:
https://developers.shopware.com/developers-guide/rest-api/extend-api-resource/
-
Dann fügt in die Datei „SwagExtendArticleResource\Components\Api\Resource\Article.php“ folgenden Code ein:
public function getOne($id, array $options = [])
{
$result = parent::getOne($id,$options);
//Context
$modelManager = $this->getManager();
$shop = $modelManager->getRepository(\Shopware\Models\Shop\Shop::class)->getById(1);
$shopContext = Context::createFromShop($shop, Shopware()->Container()->get('config'));
//get seo url
$query = [
'module' => 'frontend',
'controller' => 'detail',
'sArticle' => $id,
];
$my_seourl = Shopware()->Router()->assemble($query, $shopContext);
$result['my_seourl'] = $my_seourl;
return $result;
}
Dann wird in das Artikel API bei der Einzelartikelabfrage die Variable „my_seourl“ eingefügt, welche die SEO Url enthält (Duh!)
Achtung bei Multishopsystemen: Ich habe die Shop ID auf 1 festgetackert in der Ermittlung des Contexts. Für die Abfrage mehrerer
Artikel per API müsst Ihr die Funktion „getList“ in der gleichen Datei entsprechend ändern.
Das war eine schwere Geburt
Viel Spass und viele Grüsse
Jens
P.S.: An die Shopware Developer: Ich finde die Seo Url gehört eigentlich standardmässig in die APIs (Artikel, Kategorie …).