Is there a fast way of getting rid of the language labels in shopify liquid templates? - shopify

All the templates i've downloaded come like this on every .liquid file.. It lists out the language labels. How do i clean this up? It cant be necessary to have to look at these lists when developing? Is there a setting within my shopify admin dashboard that can remove these for me? Or do i have to remove myself or deal with?
% schema %}
{
"name": {
"da": "Overskrift",
"de": "Titel",
"en": "Header",
"es": "Encabezado",
"fi": "Ylätunniste",
"fr": "En-tête",
"hi": "हैडर",
"it": "Header",
"ja": "ヘッダー",
"ko": "머리글",
"ms": "Pengepala",
"nb": "Header",
"nl": "Koptekst",
"pt-BR": "Cabeçalho",
"pt-PT": "Cabeçalho",
"sv": "Rubrik",
"th": "ส่วนหัว",
"zh-CN": "标头",
"zh-TW": "標頭"
},
"settings": [
{
"type": "radio",
"id": "align_logo",
"label": {
"da": "Logojustering",
"de": "Logo-Ausrichtung",
"en": "Logo alignment",
"es": "Alineación de logotipo",
"fi": "Logon tasaus",
"fr": "Alignement du logo",
"hi": "लोगो संरेखण",
"it": "Allineamento logo",
"ja": "ロゴアラインメント",
"ko": "로고 정렬",
"ms": "Penjajaran logo",
"nb": "Logojustering",
"nl": "Logo-uitlijning",
"pt-BR": "Alinhamento do logotipo",
"pt-PT": "Alinhamento do logótipo",
"sv": "Logojustering",
"th": "การจัดวางโลโก้",
"zh-CN": "logo 对齐方式",
"zh-TW": "商標對齊"
},
"default": "left",
"options": [
{
"value": "left",
"label": {
"da": "Venstre",
"de": "Links",
"en": "Left",
"es": "Izquierda",
"fi": "Vasen",
"fr": "Gauche",
"hi": "बाएँ",
"it": "Sinistra",
"ja": "左",
"ko": "왼쪽",
"ms": "Kiri",
"nb": "Venstre",
"nl": "Links",
"pt-BR": "Esquerda",
"pt-PT": "Esquerda",
"sv": "Vänster",
"th": "ด้านซ้าย",
"zh-CN": "左侧",
"zh-TW": "左方"
}
},
{
"value": "center",
"label": {
"da": "Centreret",
"de": "Mittig",
"en": "Centered",
"es": "Centrada",
"fi": "Keskitetty",
"fr": "Centré",
"hi": "केंद्र",
"it": "Centrato",
"ja": "中央揃え",
"ko": "센터 맞추기",
"ms": "Ditengah",
"nb": "Sentrert",
"nl": "Gecentreerd",
"pt-BR": "Centralizado",
"pt-PT": "Centrado",
"sv": "Centrera",
"th": "ตรงกลาง",
"zh-CN": "居中",
"zh-TW": "置中"
}
}
]
},
....
}
]
}
{% endschema %}

This is used to display labels and texts in the user language in theme administration panel. This is common and a good practice for themes used by multiple users.
If you or your client doesn't need it, all you have to do is to clean your json.

Related

How to get image URL from Wordpress post trough API request in react native

My last post here helped me a lot, so now I have a list of suitcases in my app, that I got from my posts (which are my products). This is a screenshot of the current app:
Now for the picture, which is a gold suitcase that I imported with a simple URI, I also want to get the image from my individual posts so that every title has his own unique picture. For example: the EVO S black has to be a black suitcase, the EVO L needs to be a gold suitcase. This is how my wordpress post looks like, it's very simple:
This is how my json file - the part of the image - looks in postman:
"content": {
"rendered": "\n<figure class=\"wp-block-image size-medium productfoto\" id=\"productfoto\"><img decoding=\"async\" loading=\"lazy\" width=\"200\" height=\"300\" src=\"https://evivermeeren.com/wp-content/uploads/2022/12/goud-medium-4-300-hard-4-1-200x300.webp\" alt=\"productfoto\" class=\"wp-image-2316\" title=\"productfoto\" srcset=\"https://evivermeeren.com/wp-content/uploads/2022/12/goud-medium-4-300-hard-4-1-200x300.webp 200w, https://evivermeeren.com/wp-content/uploads/2022/12/elementor/thumbs/goud-medium-4-300-hard-4-1-pyt9usybvdz52sk2fmq1xdh2o41yey1c3o3sjd2c0c.webp 500w, https://evivermeeren.com/wp-content/uploads/2022/12/goud-medium-4-300-hard-4-1.webp 600w\" sizes=\"(max-width: 200px) 100vw, 200px\" /></figure>\n",
"protected": false
},
I gave my picture a class, an attribute name and so on, all of which are 'productfoto'.
This is the current code in React Native, with the fetch for the titles and here you can see that I import the picture myself with a URI instead of the fetch:
const AllSuitcasesScreen = ({ navigation }) => {
const [suitcases, setSuitcases] = useState([]);
const getSuitcases = async () => {
try {
const response = await fetch("https://evivermeeren.com/wp-json/wp/v2/posts?categories=59", {
}
)
const json = await response.json();
console.log(json);
setSuitcases(json);
} catch (error) {
console.error(error);
}
}
useEffect(() => {
getSuitcases();
}, []);
return (
<View style={styles.screen}>
<View style={styles.flexbox2}>
<Text style={styles.products}>Onze koffers</Text>
<View style={styles.shoppingcart}>
<Image
style={styles.icon}
source={{uri: 'https://cdn-icons-png.flaticon.com/512/1413/1413908.png'}}
/>
<Text style={styles.number}>0</Text>
</View>
</View>
<View style={styles.list}>
<FlatList
data={suitcases}
renderItem={({ item }) => (
<SuitcaseItem
title={item.title.rendered}
imageUri={{uri: 'https://evivermeeren.com/wp-content/uploads/2022/12/goud-medium-4-300-hard-4-1.webp'}}
/>
)}
/>
</View>
</View >
);
}
Does anybody know how I can take the image url from the api fetch and put this into my flatlist so that every post (block) has his own title with the right picture above it? Maybe it's simple, but I can't figure it out.
Thank you in advance, I'm very happy that this platform helps so much!
This is a part of my JSON, I thought it should be something like URI=item.yoast_head_json.og_image.url but that doesn't work.
{
"id": 2484,
"date": "2022-12-17T15:02:56",
"date_gmt": "2022-12-17T15:02:56",
"guid": {
"rendered": "https://evivermeeren.com/?p=2484"
},
"modified": "2022-12-18T10:39:37",
"modified_gmt": "2022-12-18T10:39:37",
"slug": "zwart-groot-hard-249euro",
"status": "publish",
"type": "post",
"link": "https://evivermeeren.com/zwart-groot-hard-249euro/koffers/",
"title": {
"rendered": "Evo L Black"
},
"content": {
"rendered": "\n<p id=\"desc\">Een grote koffer in een zwarte kleur, gemaakt van hard materiaal. De prijs van deze koffer is €249.</p>\n",
"protected": false
},
"excerpt": {
"rendered": "<p>Een grote koffer in een zwarte kleur, gemaakt van hard materiaal. De prijs van deze koffer is €249.</p>\n",
"protected": false
},
"author": 1,
"featured_media": 2229,
"comment_status": "closed",
"ping_status": "closed",
"sticky": false,
"template": "",
"format": "standard",
"meta": [],
"categories": [
59
],
"tags": [],
"yoast_head": "<!-- This site is optimized with the Yoast SEO plugin v19.12 - https://yoast.com/wordpress/plugins/seo/ -->\n<title>Evo L Black - Evi Vermeêren</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://evivermeeren.com/zwart-groot-hard-249euro/koffers/\" />\n<meta property=\"og:locale\" content=\"nl_NL\" />\n<meta property=\"og:type\" content=\"article\" />\n<meta property=\"og:title\" content=\"Evo L Black - Evi Vermeêren\" />\n<meta property=\"og:description\" content=\"Een grote koffer in een zwarte kleur, gemaakt van hard materiaal. De prijs van deze koffer is €249.\" />\n<meta property=\"og:url\" content=\"https://evivermeeren.com/zwart-groot-hard-249euro/koffers/\" />\n<meta property=\"og:site_name\" content=\"Evi Vermeêren\" />\n<meta property=\"article:published_time\" content=\"2022-12-17T15:02:56+00:00\" />\n<meta property=\"article:modified_time\" content=\"2022-12-18T10:39:37+00:00\" />\n<meta property=\"og:image\" content=\"https://evivermeeren.com/wp-content/uploads/2022/12/zwart-klein-4-300-hard-4-e1670410664142.webp\" />\n\t<meta property=\"og:image:width\" content=\"200\" />\n\t<meta property=\"og:image:height\" content=\"300\" />\n\t<meta property=\"og:image:type\" content=\"image/webp\" />\n<meta name=\"author\" content=\"evivermeeren\" />\n<meta name=\"twitter:card\" content=\"summary_large_image\" />\n<meta name=\"twitter:label1\" content=\"Geschreven door\" />\n\t<meta name=\"twitter:data1\" content=\"evivermeeren\" />\n\t<meta name=\"twitter:label2\" content=\"Verwachte leestijd\" />\n\t<meta name=\"twitter:data2\" content=\"1 minuut\" />\n<script type=\"application/ld+json\" class=\"yoast-schema-graph\">{\"#context\":\"https://schema.org\",\"#graph\":[{\"#type\":\"Article\",\"#id\":\"https://evivermeeren.com/zwart-groot-hard-249euro/koffers/#article\",\"isPartOf\":{\"#id\":\"https://evivermeeren.com/zwart-groot-hard-249euro/koffers/\"},\"author\":{\"name\":\"evivermeeren\",\"#id\":\"https://evivermeeren.com/#/schema/person/d74bd513920b6e8cf81e3693e10c9de0\"},\"headline\":\"Evo L Black\",\"datePublished\":\"2022-12-17T15:02:56+00:00\",\"dateModified\":\"2022-12-18T10:39:37+00:00\",\"mainEntityOfPage\":{\"#id\":\"https://evivermeeren.com/zwart-groot-hard-249euro/koffers/\"},\"wordCount\":20,\"publisher\":{\"#id\":\"https://evivermeeren.com/#/schema/person/d74bd513920b6e8cf81e3693e10c9de0\"},\"articleSection\":[\"Koffers\"],\"inLanguage\":\"nl\"},{\"#type\":\"WebPage\",\"#id\":\"https://evivermeeren.com/zwart-groot-hard-249euro/koffers/\",\"url\":\"https://evivermeeren.com/zwart-groot-hard-249euro/koffers/\",\"name\":\"Evo L Black - Evi Vermeêren\",\"isPartOf\":{\"#id\":\"https://evivermeeren.com/#website\"},\"datePublished\":\"2022-12-17T15:02:56+00:00\",\"dateModified\":\"2022-12-18T10:39:37+00:00\",\"breadcrumb\":{\"#id\":\"https://evivermeeren.com/zwart-groot-hard-249euro/koffers/#breadcrumb\"},\"inLanguage\":\"nl\",\"potentialAction\":[{\"#type\":\"ReadAction\",\"target\":[\"https://evivermeeren.com/zwart-groot-hard-249euro/koffers/\"]}]},{\"#type\":\"BreadcrumbList\",\"#id\":\"https://evivermeeren.com/zwart-groot-hard-249euro/koffers/#breadcrumb\",\"itemListElement\":[{\"#type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https://evivermeeren.com/\"},{\"#type\":\"ListItem\",\"position\":2,\"name\":\"Evo L Black\"}]},{\"#type\":\"WebSite\",\"#id\":\"https://evivermeeren.com/#website\",\"url\":\"https://evivermeeren.com/\",\"name\":\"Evi Vermeêren\",\"description\":\"\",\"publisher\":{\"#id\":\"https://evivermeeren.com/#/schema/person/d74bd513920b6e8cf81e3693e10c9de0\"},\"potentialAction\":[{\"#type\":\"SearchAction\",\"target\":{\"#type\":\"EntryPoint\",\"urlTemplate\":\"https://evivermeeren.com/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"nl\"},{\"#type\":[\"Person\",\"Organization\"],\"#id\":\"https://evivermeeren.com/#/schema/person/d74bd513920b6e8cf81e3693e10c9de0\",\"name\":\"evivermeeren\",\"image\":{\"#type\":\"ImageObject\",\"inLanguage\":\"nl\",\"#id\":\"https://evivermeeren.com/#/schema/person/image/\",\"url\":\"https://evivermeeren.com/wp-content/uploads/2022/11/logo.png\",\"contentUrl\":\"https://evivermeeren.com/wp-content/uploads/2022/11/logo.png\",\"width\":661,\"height\":824,\"caption\":\"evivermeeren\"},\"logo\":{\"#id\":\"https://evivermeeren.com/#/schema/person/image/\"},\"sameAs\":[\"https://evivermeeren.com\"],\"url\":\"https://evivermeeren.com/author/evivermeeren/\"}]}</script>\n<!-- / Yoast SEO plugin. -->",
"yoast_head_json": {
"title": "Evo L Black - Evi Vermeêren",
"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://evivermeeren.com/zwart-groot-hard-249euro/koffers/",
"og_locale": "nl_NL",
"og_type": "article",
"og_title": "Evo L Black - Evi Vermeêren",
"og_description": "Een grote koffer in een zwarte kleur, gemaakt van hard materiaal. De prijs van deze koffer is €249.",
"og_url": "https://evivermeeren.com/zwart-groot-hard-249euro/koffers/",
"og_site_name": "Evi Vermeêren",
"article_published_time": "2022-12-17T15:02:56+00:00",
"article_modified_time": "2022-12-18T10:39:37+00:00",
"og_image": [
{
"width": 200,
"height": 300,
"url": "https://evivermeeren.com/wp-content/uploads/2022/12/zwart-klein-4-300-hard-4-e1670410664142.webp",
"type": "image/webp"
}
],
"author": "evivermeeren",
"twitter_card": "summary_large_image",
"twitter_misc": {
"Geschreven door": "evivermeeren",
"Verwachte leestijd": "1 minuut"
},
"schema": {
"#context": "https://schema.org",
"#graph": [
{
"#type": "Article",
"#id": "https://evivermeeren.com/zwart-groot-hard-249euro/koffers/#article",
"isPartOf": {
"#id": "https://evivermeeren.com/zwart-groot-hard-249euro/koffers/"
},
"author": {
"name": "evivermeeren",
"#id": "https://evivermeeren.com/#/schema/person/d74bd513920b6e8cf81e3693e10c9de0"
},
"headline": "Evo L Black",
"datePublished": "2022-12-17T15:02:56+00:00",
"dateModified": "2022-12-18T10:39:37+00:00",
"mainEntityOfPage": {
"#id": "https://evivermeeren.com/zwart-groot-hard-249euro/koffers/"
},
"wordCount": 20,
"publisher": {
"#id": "https://evivermeeren.com/#/schema/person/d74bd513920b6e8cf81e3693e10c9de0"
},
"articleSection": [
"Koffers"
],
"inLanguage": "nl"
},
{
"#type": "WebPage",
"#id": "https://evivermeeren.com/zwart-groot-hard-249euro/koffers/",
"url": "https://evivermeeren.com/zwart-groot-hard-249euro/koffers/",
"name": "Evo L Black - Evi Vermeêren",
"isPartOf": {
"#id": "https://evivermeeren.com/#website"
},
"datePublished": "2022-12-17T15:02:56+00:00",
"dateModified": "2022-12-18T10:39:37+00:00",
"breadcrumb": {
"#id": "https://evivermeeren.com/zwart-groot-hard-249euro/koffers/#breadcrumb"
},
"inLanguage": "nl",
"potentialAction": [
{
"#type": "ReadAction",
"target": [
"https://evivermeeren.com/zwart-groot-hard-249euro/koffers/"
]
}
]
},
{
"#type": "BreadcrumbList",
"#id": "https://evivermeeren.com/zwart-groot-hard-249euro/koffers/#breadcrumb",
"itemListElement": [
{
"#type": "ListItem",
"position": 1,
"name": "Home",
"item": "https://evivermeeren.com/"
},
{
"#type": "ListItem",
"position": 2,
"name": "Evo L Black"
}
]
},
{
"#type": "WebSite",
"#id": "https://evivermeeren.com/#website",
"url": "https://evivermeeren.com/",
"name": "Evi Vermeêren",
"description": "",
"publisher": {
"#id": "https://evivermeeren.com/#/schema/person/d74bd513920b6e8cf81e3693e10c9de0"
},
"potentialAction": [
{
"#type": "SearchAction",
"target": {
"#type": "EntryPoint",
"urlTemplate": "https://evivermeeren.com/?s={search_term_string}"
},
"query-input": "required name=search_term_string"
}
],
"inLanguage": "nl"
},
{
"#type": [
"Person",
"Organization"
],
"#id": "https://evivermeeren.com/#/schema/person/d74bd513920b6e8cf81e3693e10c9de0",
"name": "evivermeeren",
"image": {
"#type": "ImageObject",
"inLanguage": "nl",
"#id": "https://evivermeeren.com/#/schema/person/image/",
"url": "https://evivermeeren.com/wp-content/uploads/2022/11/logo.png",
"contentUrl": "https://evivermeeren.com/wp-content/uploads/2022/11/logo.png",
"width": 661,
"height": 824,
"caption": "evivermeeren"
},
"logo": {
"#id": "https://evivermeeren.com/#/schema/person/image/"
},
"sameAs": [
"https://evivermeeren.com"
],
"url": "https://evivermeeren.com/author/evivermeeren/"
}
]
}
},
"_links": {
"self": [
{
"href": "https://evivermeeren.com/wp-json/wp/v2/posts/2484"
}
],
"collection": [
{
"href": "https://evivermeeren.com/wp-json/wp/v2/posts"
}
],
"about": [
{
"href": "https://evivermeeren.com/wp-json/wp/v2/types/post"
}
],
"author": [
{
"embeddable": true,
"href": "https://evivermeeren.com/wp-json/wp/v2/users/1"
}
],
"replies": [
{
"embeddable": true,
"href": "https://evivermeeren.com/wp-json/wp/v2/comments?post=2484"
}
],
"version-history": [
{
"count": 10,
"href": "https://evivermeeren.com/wp-json/wp/v2/posts/2484/revisions"
}
],
"predecessor-version": [
{
"id": 2496,
"href": "https://evivermeeren.com/wp-json/wp/v2/posts/2484/revisions/2496"
}
],
"wp:featuredmedia": [
{
"embeddable": true,
"href": "https://evivermeeren.com/wp-json/wp/v2/media/2229"
}
],
"wp:attachment": [
{
"href": "https://evivermeeren.com/wp-json/wp/v2/media?parent=2484"
}
],
"wp:term": [
{
"taxonomy": "category",
"embeddable": true,
"href": "https://evivermeeren.com/wp-json/wp/v2/categories?post=2484"
},
{
"taxonomy": "post_tag",
"embeddable": true,
"href": "https://evivermeeren.com/wp-json/wp/v2/tags?post=2484"
}
],
"curies": [
{
"name": "wp",
"href": "https://api.w.org/{rel}",
"templated": true
}
]
}

Is it correct to see a different cabin value aside that passed in the get FlightOffers APi as travelerClass?

From the documentation of the Get Route for the flight offers Api, I can add travelerClass as a filter to make a request. If I add say travelerClass as ECONOMY?
I expect to see only offers with ECONOMY. However I see that within the fareDetailsBySegment section in the result, I see that some Offers have their cabin values as other than ECONOMY. I see some with value of BUSINESS while others as PREMIUM_ECONOMY.
Is this proper?
My Concern
I want to be able to get all bookings that where ECONOMY based only. So I need to be sure that the flight offers returned in the first place are strictly limited by the travelerClass.
I will appreciate any clarity on the this issue. Also if there is a better way to go about this concern above, it will be most appreciated.
An example of my request is below:
Amadeus.shopping.flightOffersSearch.get({
originLocationCode: 'SYD',
destinationLocationCode: 'BKK',
departureDate: '2022-11-01',
adults: '1',
travelClass: 'ECONOMY'
}).then(...)
Offer with BUSINESS instead of ECONOMY
{
"type": "flight-offer",
"id": "22",
"source": "GDS",
"instantTicketingRequired": false,
"nonHomogeneous": false,
"oneWay": false,
"lastTicketingDate": "2022-11-01",
"numberOfBookableSeats": 6,
"itineraries": [
{
"duration": "PT28H20M",
"segments": [
{
"departure": {
"iataCode": "SYD",
"terminal": "1",
"at": "2022-11-01T12:00:00"
},
"arrival": {
"iataCode": "PVG",
"terminal": "2",
"at": "2022-11-01T19:30:00"
},
"carrierCode": "MU",
"number": "562",
"aircraft": {
"code": "77W"
},
"operating": {
"carrierCode": "MU"
},
"duration": "PT10H30M",
"id": "13",
"numberOfStops": 0,
"blacklistedInEU": false
},
{
"departure": {
"iataCode": "PVG",
"terminal": "1",
"at": "2022-11-02T08:45:00"
},
"arrival": {
"iataCode": "BKK",
"at": "2022-11-02T12:20:00"
},
"carrierCode": "MU",
"number": "541",
"aircraft": {
"code": "320"
},
"operating": {
"carrierCode": "MU"
},
"duration": "PT4H35M",
"id": "14",
"numberOfStops": 0,
"blacklistedInEU": false
}
]
}
],
"price": {
"currency": "EUR",
"total": "4048.84",
"base": "3858.00",
"fees": [
{
"amount": "0.00",
"type": "SUPPLIER"
},
{
"amount": "0.00",
"type": "TICKETING"
}
],
"grandTotal": "4048.84"
},
"pricingOptions": {
"fareType": [
"PUBLISHED"
],
"includedCheckedBagsOnly": true
},
"validatingAirlineCodes": [
"MU"
],
"travelerPricings": [
{
"travelerId": "1",
"fareOption": "STANDARD",
"travelerType": "ADULT",
"price": {
"currency": "EUR",
"total": "4048.84",
"base": "3858.00"
},
"fareDetailsBySegment": [
{
"segmentId": "13",
"cabin": "ECONOMY",
"fareBasis": "YSE0WDNQ",
"class": "Y",
"includedCheckedBags": {
"quantity": 2
}
},
{
"segmentId": "14",
"cabin": "BUSINESS",
"fareBasis": "QSE0WCNL",
"class": "Q",
"includedCheckedBags": {
"quantity": 2
}
}
]
}
]
}
in order to apply the filter for cabin class, I suggest you to try with POST method.
in POST method has more search criteria you can apply, below example is something that I have tried and it works: response only contains ECONOMY classes by updating values under cabinRestrictions.
details of the request model is available in API reference page
amadeus.shopping.flightOffersSearch.post(JSON.stringify({
"currencyCode": "USD",
"originDestinations": [
{
"id": "1",
"originLocationCode": "SYD",
"destinationLocationCode": "BKK",
"departureDateTimeRange": {
"date": "2022-11-01"
}
}
],
"travelers": [
{
"id": "1",
"travelerType": "ADULT"
}
],
"sources": [
"GDS"
],
"searchCriteria": {
"maxFlightOffers": 10,
"flightFilters": {
"cabinRestrictions": [
{
"cabin": "ECONOMY",
"coverage": "ALL_SEGMENTS",
"originDestinationIds": [
1
]
}
]
}
}
})).then(...)

JSON-LD | Multiple Schemas Per Page | What is the best way to structure a website?

Please excuse me, I am a noob and schemas are something new to me and I would really appreciate your expert advice guys! Thanks in advance! :)
To keep it short, I combined these 3 relevant question as part of one global question:
What is better? To use separate schemas or multiple nested schemas per web page?
How many schemas can be used per page? Is there a recommended minimum and maximum?
Lastly, what would the schema structure of a i.e 5 page website look like?
I've answered all these questions in a short summary below, followed by the schemas I've used.
My curreny interpretation:
a. You can nest multiple schemas per page, but keeping them separate allows for a better use of #id?
b. You can use as many schemas per page as you wish without penalty, taken you use #graph but then each separate web page needs to be defined separately. Is this practical?
c. You can, and should use multiple schemas per page, in separate scripts so as not to duplicate the same information via: about, provider, or #type, particularly when you are using multiple schema types: Organization, Corporation and/or LocalBusiness?
d. The structure/hierarchy we are currently implementing is as follows:
i. Home Page Schema Types: Website, Webpage, Breadcrumb and FAQPage.
ii. About Page Schema Types: Webpage, Organization and Local Business.
iii. Service Page Schema Types: Webpage, Service, OfferCatalog, Breadcrumb and FAQPage.
iv. Individual Service Page Schema Types: Webpage, Service, OfferCatalog, Breadcrumb and FAQPage.
v. Contact Page Schema Types: Webpage and ContactPage.
Current Implementation Home Page (Website Schema)
I might have overdone it, from what I understand it is better to include less information and more reference with #id
{
"#context": "https://schema.org/",
"#type": "Website",
"name": "ABC Company",
"image": "https://www.abccompany.com/wp-content/uploads/2016/12/company_slider.png",
"url": "https://www.abccompany.com",
"abstract": "The corporate website of ABC Company Ltd.",
"description": "Website of ABC Company Ltd, an information technology service management and support provider in Germany.",
"thumbnailUrl": "https://www.abccompany.com/wp-content/uploads/2016/12/company_slider.png",
"about":
{
"#type":
[
"Organization",
"LocalBusiness"
],
"#id": "https://www.abccompany.com/about",
"name": "ABC Company",
"image": "https://www.abccompany.com/wp-content/uploads/2016/12/company_slider.png",
"legalname": "ABC Company Ltd",
"alternateName":
[
"ABC Corp",
"ABC Berlin",
"ABC"
],
"address":
{
"#type": "PostalAddress",
"addressCountry": "Germany",
"addressLocality": "Berlin",
"addressRegion": "Berlin Municipality",
"postalCode": "30242",
"streetAddress": "Zigrid Abc Street, Office 521"
},
"pricerange": "€€ - €€€€",
"telephone": "99 540 010"
},
"sameAs":
[
"https://www.facebook.com/abccompany",
"https://twitter.com/abccompany",
"https://www.instagram.com/abccompany/",
"https://www.linkedin.com/abccompany"
],
"spatialCoverage":
[
"United Kingdom",
"Germany",
"Greece",
"Switzerland",
"United Arab Emirates",
"Italy"
]
}
Below is a simplified version of the Website Schema for the Home Page
{
"#type": "Website",
"name": "ABC Company Website",
"url": "https://www.abccompany.com",
"description": "Website of ABC Company Ltd, an information technology service management and support provider in Germany.",
"thumbnailUrl": "https://www.abccompany.com/wpcontent/uploads/2016/12/company_slider.png",
"about":
{
"#type": "Organization",
"name": "ABC Company",
"#id": "https://www.abccompany.com/about"
},
"potentialAction":
{
"#type": "SearchAction",
"target": "{search_term_string}",
"query-input": "required name=search_term_string"
}
}
Current Implementation Home Page (Organization Schema)
Thinking of moving this Schema to the about page. Any suggestions?
{
"#context": "http://schema.org",
"#id": "https://www.abccompany.com/about",
"#type": "Organization",
"name": "ABC Company",
"alternateName":
[
"ABC Berlin",
"ABC"
],
"knowsAbout":
[
"Information Technology Consulting",
"Information Technology Support",
"Information Technology Development",
"Managed Information Technology",
"API Integration"
],
"url": "https://www.abccompany.com",
"logo": "https://www.abccompany.com/wp-content/uploads/2016/12/company_slider.png",
"sameAs":
[
"https://www.facebook.com/abccompany",
"https://twitter.com/abccompany",
"https://www.instagram.com/abccompany",
"https://www.linkedin.com/abccompany"
],
"numberofEmployees": "~10",
"owns":
[
{
"#type": "Organization",
"name": "ABC Company 2",
"url": "https://abccompany2.com/",
"logo": "https://abccompany2.png",
"description": "Online ticketing platform.",
"sameAs": "https://www.facebook.com/abccompany2"
},
{
"#type": "Organization",
"name": "ABC Company 3",
"url": "https://abccompany3.eu/en/",
"logo": "https://abccompany3.eu/en.png",
"description": "Laptop and phone repair service.",
"sameAs": "https://www.facebook.com/abccompany3"
}
],
"contactPoint":
{
"#type": "ContactPoint",
"telephone": "+357-99-550-010",
"contactType": "Contact",
"email": "contact#abccompany.com",
"areaServed":
[
"United Kingdom",
"Germany",
"Greece",
"Switzerland",
"United Arab Emirates",
"Italy"
],
"availableLanguage":
[
"English",
"German"
]
}
}
Current Implementation Home Page (Local Business Schema)
As with the Organization schema, I am thinking of moving it to the about page and link #id. Additionally, Organization and Local Business Schemas tend to clash, is this because of duplicate information?
{
"#context": "https://schema.org/",
"#type": "LocalBusiness",
"name": "ABC Company",
"legalname": "ABC Company Ltd",
"image": "https://www.abccompany.com/wp-content/uploads/2016/12/company_slider.png",
"#id": "https://www.abccompany.com/about",
"url": "https://www.abccompany.com",
"logo": "https://www.abccompany.com/wp-content/uploads/2016/12/company_slider.png",
"hasMap": "https://www.google.com/maps/place/ABCCOMPANY+-+IT+Services+%26+Solutions+in+Cyprus/#44.6799323,65.0355366,15z/data=!4m2!3m1!1s0x0:0x4507a4904ebbe662?sa=X&ved=2ahUKEwjOnOKdy_bxAhWQsRQKHY9WD5kQ_BIwD3oECEMQBQ",
"address":
{
"#type": "PostalAddress",
"addressCountry": "Germany",
"addressLocality": "Berlin",
"addressRegion": "Berlin Municipality",
"postalCode": "3022",
"streetAddress": "Mitgard Street 302"
},
"description": "ABC Company Ltd is a managed information technology services provider in Germany.",
"disambiguatingDescription": "ABC Company is an information technology support and development company.",
"sameAs":
[
"https://www.facebook.com/abccompany",
"https://twitter.com/abccompany",
"https://www.instagram.com/abccompany",
"https://www.linkedin.com/company/abccompany"
],
"pricerange": "€€€ - €€€€€",
"email": "mailto:contact#abccompany.com",
"telephone": "99 520 010",
"geo":
{
"#type": "GeoCoordinates",
"latitude": "66.6799323",
"longitude": "55.0355366"
},
"areaServed":
[
{
"#type": "Country",
"name": "United Kingdom",
"sameAs": "https://en.wikipedia.org/wiki/United_Kingdom_(disambiguation)"
},
{
"#type": "Country",
"name": "Germany",
"sameAs": "https://en.wikipedia.org/wiki/Germany_(disambiguation)"
},
{"#type": "Country",
"name": "Greece",
"sameAs": "https://en.wikipedia.org/wiki/Greece_(disambiguation)"
},
{
"#type": "Country",
"name": "Switzerland",
"sameAs": "https://en.wikipedia.org/wiki/Switzerland_(disambiguation)"
},
{
"#type": "Country",
"name": "United Arab Emirates",
"sameAs": "https://en.wikipedia.org/wiki/UAE_(disambiguation)"
},
{
"#type": "Country",
"name": "Italy",
"sameAs": "https://en.wikipedia.org/wiki/Italy_(disambiguation)"
}
],
"openingHoursSpecification":
[
{
"#type": "OpeningHoursSpecification",
"dayOfWeek":
[
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday"
],
"opens": "09:00",
"closes": "19:00"
},
{
"#type": "OpeningHoursSpecification",
"dayOfWeek": "Saturday",
"opens": "11:00",
"closes": "14:00"
}
],
"aggregateRating":
{
"#type": "AggregateRating",
"ratingValue": "5",
"reviewCount": "5"
},
"review":
[
{
"#type": "Review",
"author":
{
"#type": "Organization",
"name": "BBB Company Ltd"
},
"datePublished": "2020",
"description": "Developed a great website.",
"reviewRating":
{
"#type": "Rating",
"bestRating": "5",
"ratingValue": "5",
"worstRating": "5"
}
},
{
"#type": "Review",
"author":
{
"#type": "Person",
"name": "Anderson Silva"
},
"datePublished": "2018",
"reviewRating":
{
"#type": "Rating",
"bestRating": "5",
"ratingValue": "5",
"worstRating": "5"
}
},
{
"#type": "Review",
"author":
{
"#type": "Organization",
"name": "NFS Ltd"
},
"datePublished": "2017",
"reviewRating":
{
"#type": "Rating",
"bestRating": "5",
"ratingValue": "5",
"worstRating": "5"
}
},
{
"#type": "Review",
"author":
{
"#type": "Organization",
"name": "Premiere Showroom"
},
"datePublished": "2020",
"reviewRating":
{
"#type": "Rating",
"bestRating": "5",
"ratingValue": "5",
"worstRating": "5"
}
},
{
"#type": "Review",
"author":
{
"#type": "Person",
"name": "Benzon Bez"
},
"datePublished": "2017",
"reviewRating":
{
"#type": "Rating",
"bestRating": "5",
"ratingValue": "5",
"worstRating": "5"
}
}
]
}
Current Implementation Home Page (WebPage Schema)
This is the last schema I will share, to keep this question manageable.
{
"#context": "https://schema.org/",
"#type": "WebPage",
"#id": "https://www.abccompany.com",
"url": "https://www.abccompan.com",
"name": "IT Services and Solutions | ABC Company",
"description": "Home web page of ABC Company Ltd, an information technology service management and support provider in Germany.",
"disambiguatingDescription": "ABC Company Home Page",
"image": "https://www.abccompan.com/wp-content/uploads/2016/12/company_slider.png",
"thumbnailUrl": "https://www.abccompan.com/wp-content/uploads/2016/12/company_slider.png",
"keywords": "IT Company, Information Technology Company, IT Provider",
"typicalAgeRange": "28-60",
"about":
{
"#type": "Organization",
"#id": "https://www.abccompan.com/about",
"name": "ABC Company"
},
"audience":
[
{
"#type": "BusinessAudience",
"name": "Business owner",
"alternateName": "Organizational Founder",
"disambiguatingDescription": "Refers to founders, owners and or majority shareholders of a commercial enterprise.",
"sameAs":
["https://en.wikipedia.org/wiki/Organizational_founder",
"https://en.wikipedia.org/wiki/Director_(business)",
"https://en.wikipedia.org/wiki/Business_magnate",
"https://en.wikipedia.org/wiki/Tycoon_(disambiguation)",
"https://en.wikipedia.org/wiki/Industrialist_(disambiguation)",
"https://en.wikipedia.org/wiki/Shareholder"
]
},
{
"#type": "BusinessAudience",
"name": "Entrepreneur",
"alternateName": "Business Person",
"disambiguatingDescription": "A business man or woman - refers to a founder, owner, investor or majority shareholder of a commercial enterprise.",
"sameAs":
[
"https://en.wikipedia.org/wiki/Entrepreneur_(disambiguation)",
"https://en.wikipedia.org/wiki/Businessperson",
"https://en.wikipedia.org/wiki/Investor",
"https://en.wikipedia.org/wiki/Intermediary"
]
},
{
"#type": "BusinessAudience",
"name": "Manager",
"alternateName": "Supervisor",
"disambiguatingDescription": "Refers to founders, owners and or majority shareholders of a commercial enterprise.",
"sameAs":
["https://en.wikipedia.org/wiki/Supervisor",
"https://en.wikipedia.org/wiki/Manager_(disambiguation)",
"https://en.wikipedia.org/wiki/General_manager"
]
}
],
"datePublished": "2016-12-01T08:00:08+00:00",
"dateModified":"2020-01-09T18:00:00+00:00",
"inLanguage":"en-UK",
"potentialAction":
{
"#type": "ReadAction",
"target": "https://www.abccompany.com"
}
}
To recap
Are the schemas above correct?
Do we write multiple schemas per page but in separate scripts?
Is best practice to then link #id or duplicate references?
How many schemas can we populate per page?
Are there particular schemas for particular pages only? If so which ones?
In advance thank you all for your time and effort.
Hope we can reach some sort of consensus, since there are no viable instructions regarding this, at least that I've found.
Peace.

Bot duplicates user messages when I use DirectLine channel

I am using bot framework v4. I have developed a chatbot using .Net Core. The bot is integrated with LUIS and Qna Maker. One issue I am facing is that the bot duplicates the message that comes from the user. Please look at the screenshot below:
The replies I get from the bot are perfectly fine. The flow of the bot is as intended. I just cannot figure out why the message from user is being duplicated. I am using DirectLine for this. I will share whatever code part is needed.
{
"activities": [
{
"type": "message",
"id": "BR1wBZw7w2852JMLobk0EC-o|0000000",
"timestamp": "2019-12-02T19:41:57.1284328Z",
"channelId": "directline",
"from": {
"id": "CivicDevBot",
"name": "CivicChat"
},
"conversation": {
"id": "BR1wBZw7w2852JMLobk0EC-o"
},
"attachments": [
{
"contentType": "application/vnd.microsoft.card.adaptive",
"content": {
"type": "AdaptiveCard",
"version": "1.0",
"body": [
{
"type": "Container",
"items": [
{
"type": "ColumnSet",
"columns": [
{
"type": "Column",
"width": "auto",
"items": [
{
"type": "Image",
"size": "large",
"url": "https://i.imgur.com/ViaEUnA.png"
}
]
}
],
"horizontalAlignment": "Center"
},
{
"type": "ColumnSet",
"columns": [
{
"type": "Column",
"width": "auto",
"items": [
{
"type": "TextBlock",
"size": "large",
"weight": "bolder",
"color": "light",
"text": "Welcome to CIVIC Financial Services",
"wrap": true
},
{
"type": "TextBlock",
"size": "large",
"weight": "bolder",
"color": "light",
"text": "I am S.U.E",
"wrap": true
},
{
"type": "TextBlock",
"color": "light",
"text": "I can help you answer your questions. Familiarize yourself with CIVIC Financial Services.",
"wrap": true
},
{
"type": "TextBlock",
"color": "light",
"text": "If you want to talk to a Customer Service Agent, just type \"I want to talk to a Customer Service Agent\".",
"wrap": true
}
],
"separator": true,
"horizontalAlignment": "Left"
}
]
}
]
}
],
"actions": [
{
"type": "Action.Submit",
"data": {
"action": "aboutCivic"
},
"title": "About CIVIC"
},
{
"type": "Action.ShowCard",
"card": {
"type": "AdaptiveCard",
"actions": [
{
"type": "Action.ShowCard",
"card": {
"type": "AdaptiveCard",
"body": [
{
"type": "TextBlock",
"text": "We are open from Monday through Friday from 8:00am to 6:00pm.",
"wrap": true
}
],
"style": "emphasis"
},
"title": "When are you open?"
},
{
"type": "Action.ShowCard",
"card": {
"type": "AdaptiveCard",
"body": [
{
"type": "Image",
"size": "stretch",
"url": "https://i.imgur.com/gBVgI25.png",
"horizontalAlignment": "center"
},
{
"type": "TextBlock",
"text": "AZ, CA, CO, FL, GA, HI, NC, NV, OR, SC, TN, TX, UT, VA & WA",
"wrap": true
}
],
"style": "emphasis"
},
"title": "Do you have an office near me? "
},
{
"type": "Action.ShowCard",
"card": {
"type": "AdaptiveCard",
"body": [
{
"type": "TextBlock",
"text": "8 to 10 days, it all depends on how it takes to get access to the property.",
"wrap": true
}
],
"style": "emphasis"
},
"title": "How quickly can we close? "
}
],
"style": "emphasis"
},
"title": "FAQs"
}
]
}
}
],
"entities": [],
"replyToId": "8WGOnspSxN3"
},
{
"type": "message",
"id": "BR1wBZw7w2852JMLobk0EC-o|0000001",
"timestamp": "2019-12-02T19:43:39.96502Z",
"serviceUrl": "https://directline.botframework.com/",
"channelId": "directline",
"from": {
"id": "r_1575315715",
"name": "",
"role": "user"
},
"conversation": {
"id": "BR1wBZw7w2852JMLobk0EC-o"
},
"textFormat": "plain",
"locale": "en-GB",
"text": "teeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
"entities": [
{
"type": "ClientCapabilities",
"requiresBotState": true,
"supportsListening": true,
"supportsTts": true
}
],
"channelData": {
"siteDomain": "https://websiteae1.stackblitz.io/"
}
},
{
"type": "message",
"id": "BR1wBZw7w2852JMLobk0EC-o|0000002",
"timestamp": "2019-12-02T19:43:41.7278914Z",
"channelId": "directline",
"from": {
"id": "CivicDevBot",
"name": "CivicChat"
},
"conversation": {
"id": "BR1wBZw7w2852JMLobk0EC-o"
},
"text": "Sorry, I didn't understand. Consider rephrasing your question or contacting a customer agent",
"attachments": [],
"entities": [],
"replyToId": "BR1wBZw7w2852JMLobk0EC-o|0000001"
},
{
"type": "message",
"id": "BR1wBZw7w2852JMLobk0EC-o|0000003",
"timestamp": "2019-12-02T20:00:25.784598Z",
"serviceUrl": "https://directline.botframework.com/",
"channelId": "directline",
"from": {
"id": "r_1575315715",
"name": "",
"role": "user"
},
"conversation": {
"id": "BR1wBZw7w2852JMLobk0EC-o"
},
"textFormat": "plain",
"locale": "en-GB",
"text": "helo",
"channelData": {
"siteDomain": "https://websiteae1.stackblitz.io/"
}
},
{
"type": "message",
"id": "BR1wBZw7w2852JMLobk0EC-o|0000004",
"timestamp": "2019-12-02T20:00:26.5739342Z",
"channelId": "directline",
"from": {
"id": "CivicDevBot",
"name": "CivicChat"
},
"conversation": {
"id": "BR1wBZw7w2852JMLobk0EC-o"
},
"text": "Sorry, I didn't understand. Consider rephrasing your question or contacting a customer agent",
"attachments": [],
"entities": [],
"replyToId": "BR1wBZw7w2852JMLobk0EC-o|0000003"
},
{
"type": "message",
"id": "BR1wBZw7w2852JMLobk0EC-o|0000005",
"timestamp": "2019-12-02T20:00:27.3293896Z",
"serviceUrl": "https://directline.botframework.com/",
"channelId": "directline",
"from": {
"id": "r_1575315715",
"name": "",
"role": "user"
},
"conversation": {
"id": "BR1wBZw7w2852JMLobk0EC-o"
},
"textFormat": "plain",
"locale": "en-GB",
"text": "hello",
"channelData": {
"siteDomain": "https://websiteae1.stackblitz.io/"
}
},
{
"type": "message",
"id": "BR1wBZw7w2852JMLobk0EC-o|0000006",
"timestamp": "2019-12-02T20:00:27.6064185Z",
"channelId": "directline",
"from": {
"id": "CivicDevBot",
"name": "CivicChat"
},
"conversation": {
"id": "BR1wBZw7w2852JMLobk0EC-o"
},
"text": "Hello",
"inputHint": "acceptingInput",
"attachments": [],
"entities": [],
"replyToId": "BR1wBZw7w2852JMLobk0EC-o|0000005"
}
],
"watermark": "6"
}

DataTables Editor - internationalisation

In JQuery DataTable they can Add refrence to Olanguage to be in file
"oLanguage": {
"sUrl": "media/language/de_DE.txt"
}
[link]http://datatables.net/release-datatables/examples/advanced_init/language_file.html
there is Extra Plugin called Editor
they add Directly language refrence to the column
"i18n": {
"create": {
"button": "Nouveau",
"title": "Créer nouvelle entrée",
"submit": "Créer"
},
"edit": {
"button": "Modifier",
"title": "Modifier entrée",
"submit": "Actualiser"
},
"remove": {
"button": "Supprimer",
"title": "Supprimer",
"submit": "Supprimer",
"confirm": {
"_": "Etes-vous sûr de vouloir supprimer %d lignes?",
"1": "Etes-vous sûr de vouloir supprimer 1 ligne?"
}
},
"error": {
"system": "Une erreur s’est produite, contacter l’administrateur système"
}
http://editor.datatables.net/release/DataTables/extras/Editor/examples/i18n.html
Ineed to Put i18n in text file like DataTable
Make your own JS language file, let's call it editor.i18n.fr.js.
Have it contain your i18n data in a global variable say like:
var DTE_i18n = {
"create": {
"button": "Nouveau",
"title": "Créer nouvelle entrée",
"submit": "Créer"
},
"edit": {
"button": "Modifier",
"title": "Modifier entrée",
"submit": "Actualiser"
},
"remove": {
"button": "Supprimer",
"title": "Supprimer",
"submit": "Supprimer",
"confirm": {
"_": "Etes-vous sûr de vouloir supprimer %d lignes?",
"1": "Etes-vous sûr de vouloir supprimer 1 ligne?"
}
},
"error": {
"system": "Une erreur s’est produite, contacter l’administrateur système"
}
}
Link to it in your main html file:
<script src="js/editor.i18n.fr.js"></script>
Then in you editor init reference it in your i18n property:
var editor_create = new $.fn.dataTable.Editor( {
ajax: 'ajax/table.users.php',
table: '#users',
fields: [
{
"label": "user :",
"name": "user"
},
{
"label": "pass :",
"name": "pass"
}
],
i18n: DTE_i18n
} );