• Sign In
    • Forgot your password?
    • Forgot your username?

K2 | The powerful content extension for Joomla! developed by JoomlaWorks

  • home
  • about
  • blog
  • documentation
  • extend K2
  • showcase
  • community
  • demo
Leverage the power of rich media publishing the easy way!
Fotis Evangelou

Fotis Evangelou

https://getk2.org

Social Profiles

Facebook Twitter YouTube

Extending K2's Google Structured Data output to support additional content types

Extending K2's Google Structured Data output to support additional content types
27 January 2020
in Tutorials

K2 supports Google Structured Data (GSD) since version 2.10.x (in the item view). However it does so for the most basic content types of GSD: article, news article & blog post

In the K2 component's Settings you'll notice that 6 more content types are listed there for product, event, video, course, movie and recipe. However these additional content types require data to be output that are not standard in K2, e.g. the start and end dates for an event. Usually K2 integrators will create these as extra fields and display them to one or more K2 categories.

If you've done that step already, then extending K2's GSD output to support additional content types is not hard.

Here are the steps to do so for the "event" content type...

0. Upgrade to K2 v2.10.3 (dev) from https://getk2.org/downloads/?f=K2_Development_Release.zip - this is required to be able to get the raw URL from a "link" type extra field. This step will not be necessary once K2 v2.10.3 is officially released.

1. Create an override for item.php to apply our GSD code for event content types. Copy the file /components/com_k2/templates/default/item.php into /templates/YOUR_TEMPLATE/html/com_k2/events/ (create the additional folders after /templates/YOUR_TEMPLATE/html/). This will only override the item view. If you want to override the category listing as well (for templating reasons), just copy all the files in /components/com_k2/templates/default/ into /templates/YOUR_TEMPLATE/html/com_k2/events/. More info on overriding K2 templates can be found here: https://getk2.org/documentation/tutorials/templating-with-k2-and-the-concepts-of-sub-templates

2. Create a new K2 Extra Fields Group and call it "Events".

3. Create a K2 Category and also call it "Events". Make sure that the new "events" sub-template (created on step 1) as well as the "Events" extra fields group (created on step 2) are both selected. 

4. Now create extra fields in K2 for each of the GSD data you wish to add. According to https://developers.google.com/search/docs/data-types/event the bare minimum for a GSD event type are "location" (object), "name" (we can use the K2 item's title here), "startDate" and optionally "endDate" and "offers" (object). The GSD properties "description" and "image" already come with default K2 GSD. For any object element referenced, you'll have to create an extra field for each of its properties. So for "location" and given that GSD guidelines reference this:

"location": {
  "@type": "Place",
  "name": "Snickerpark Stadium",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "100 West Snickerpark Dr",
    "addressLocality": "Snickertown",
    "postalCode": "19019",
    "addressRegion": "PA",
    "addressCountry": "US"
  }
}

...you would need to add the following ("text" type) extra fields:
- Location Name (with extra field alias 'e_loc_name')
- Location Address (with extra field alias 'e_loc_addr')
- Location Town/City (with extra field alias 'e_loc_city')
- Location Postal Code (with extra field alias 'e_loc_pc')
- Location State/Province (with extra field alias 'e_loc_state')
- Location Country (with extra field alias 'e_loc_country')

Additionally, for the rest of the fields
- Start Date ("date" type extra field and alias 'e_start_date')
- End Date ("date" type extra field and alias 'e_end_date')
- Ticket Price ("text" type extra field and alias 'e_ticket_price')
- Ticket Purchase URL ("link" type extra field and alias 'e_ticket_link')

Make sure the extra field "alias" is inserted exactly as stated in each line above (but without the quotes). This step is important as we will fetch each extra field separately by using this alias.

6. You will now fetch each of these extra fields separately (as described here as well https://getk2.org/documentation/tips-a-tricks/display-single-extra-fields-anywhere-in-your-k2-content) and build your new GSD properties.

Your default K2 GSD look like this: https://jmp.sh/gmcOnu3 (or just do a view source on https://getk2.org/blog/k2-v2102-released-now-with-a-100-mobile-friendly-backend-user-interface).

We will change and extend these using the following PHP code added in your item.php override, right after the "defined('_JEXEC') or die;" part:

// Get current GSD
$getItemGSD = $this->params->get('itemGoogleStructuredData');

// Search and extend/replace GSD
$document = JFactory::getDocument();
foreach ($document->_script as $type => $script) {
    if ($type == 'application/ld+json' && $script == $getItemGSD) {
        // Remove current GSD from the 
        unset($document->_script['application/ld+json']);
        $itemGSD = json_decode($getItemGSD);

        // Remove any default K2 GSD properties we don't want for the GSD "event" content type
        unset($itemGSD->articleBody);
        unset($itemGSD->articleSection);
        unset($itemGSD->author);
        unset($itemGSD->dateModified);
        unset($itemGSD->datePublished);
        unset($itemGSD->headline);
        unset($itemGSD->keywords);
        unset($itemGSD->publisher);

        // Append new GSD data as object properties to '$itemGSD'
        $itemGSD->location = new stdClass;
        $itemGSD->location->{'@type'} = 'Place';
        $itemGSD->location->name = $this->item->extraFields->e_loc_name->value;
        $itemGSD->location->address = new stdClass;
        $itemGSD->location->address->{'@type'} = 'PostalAddress';
        $itemGSD->location->address->streetAddress = $this->item->extraFields->e_loc_addr->value;
        $itemGSD->location->address->addressLocality = $this->item->extraFields->e_loc_city->value;
        $itemGSD->location->address->postalCode = $this->item->extraFields->e_loc_pc->value;
        $itemGSD->location->address->addressRegion = $this->item->extraFields->e_loc_state->value;
        $itemGSD->location->address->addressCountry = $this->item->extraFields->e_loc_state->value;
        $itemGSD->name = $this->item->title;
        $itemGSD->startDate = $this->item->extraFields->e_start_date->value;
        $itemGSD->endDate = $this->item->extraFields->e_end_date->value;
        $itemGSD->offers = new stdClass;
        $itemGSD->offers->{'@type'} = 'Offer';
        $itemGSD->offers->price = $this->item->extraFields->e_ticket_price->value;
        $itemGSD->offers->priceCurrency = 'USD'; // Use EUR or other currency here based on your needs
        $itemGSD->offers->url = $this->item->extraFields->e_ticket_link->rawValue;

        // Re-insert GSD data with new additions
        $itemGSD = json_encode($itemGSD, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
        $document->addScriptDeclaration($itemGSD, 'application/ld+json');
    }
}

7. Now start filling up the event data in the K2 items' extra fields of yours "Events" category.

In the end you'll see something like this on each event K2 item's page source: https://jmp.sh/qUvDXud (wherever you see "null" is where I just didn't add data for these demo purposes).

8. Finally test one of your K2 items on: https://search.google.com/structured-data/testing-tool - this tool will tell you if you need to change anything or if some property is missing.

And you're ready!

The code above will work on all Joomla versions that K2 supports by default.

More

Tags:

  • google structured data,
  • seo

PunkMedia

PunkMedia
17 December 2019
in Showcase

A media production company in the Netherlands run by Henk-Jan Winkeldermaat.

More

Tags:

  • media production,
  • photography,
  • video

Green Real Estate Agency

Green Real Estate Agency
17 December 2019
in Showcase

Whether you're a buyer, seller, renter or landlord, our purpose is to create an experience that's truly different from any other agency.

For us, caring goes without saying. We've always believed that if we created an agency where truly caring and passionate people wanted to work, it would create a culture where our team would go above and beyond.

More

Tags:

  • real estate,
  • Directory

Utah Arts Festival

Utah Arts Festival
17 December 2019
in Showcase

The mission of the Utah Arts Festival is to promote the arts and enhance the quality of life in Utah through the production of an annual outdoor, multi-disciplinary event in downtown Salt Lake City.

We strive to maintain the highest artistic quality in our production and programming, represent excellence among a range of artistic mediums, and promote an appreciation for fine art while encouraging innovation in the field, and supporting non-traditional, contemporary works.

More

Tags:

  • events,
  • arts,
  • festival

Underground Press

Underground Press
17 December 2019
in Showcase

Underground Press covers a variety of music genres - from Rock, Metal, Blues Rock, Hip-hop, Jazz, Folk Rock, and much more - featuring reviews and interviews on your favourite artists and keeping you up to date on the latest events in and around South Africa.

Having interviewed local and international musicians, such as Dani Filth of Cradle of Filth, Chris van der Walt of Black Cat Bones, Boargazm and Vulvodynia, Path P and Neil Breytenbach of CANTREL, popular SA band Prime Circle and movie producers Patrick and George Garcia - we keep you in-the-know!

More

Tags:

  • music,
  • news,
  • film,
  • cinema

UPsolute

UPsolute
17 December 2019
in Showcase

More than 40 UPsolute distributors worldwide and over 100.000 tuned cars made UPsolute one of the world leading Chiptuning Companies.

More

Tags:

  • automotive,
  • technology

Y&R

Y&R
13 December 2019
in Showcase

Y&R (originally Young & Rubicam) is a marketing and communications company specializing in advertising, digital and social media, sales promotion, direct marketing and brand identity consulting.

It is a member of WPP, a British multinational advertising and public relations company.

More

Tags:

  • marketing,
  • ad agency,
  • creative,
  • advertising

SendPulse

SendPulse
13 December 2019
in Showcase

SendPulse offers marketing tools to empower your business. You can use multiple communication channels to interact with your customers within a single platform including email, SMS, web push, Viber, and Facebook.

The company’s offices and representatives are located in Turkey, Brazil, Mexico, Ukraine, Russia, and Belarus. Our support team speaks English, Turkish, Portuguese, Spanish, Russian, and Ukrainian and is available 24/7, so we can effectively assist and guide SendPulse users from all over the world.

In March 2019, SendPulse reached 1 million registered users, with about 1,000 new users joining us every day.

We are proud of cooperating with both large companies and small business owners around the globe and enjoy seeing their list grow with every coming day. Among SendPulse customers are Swatch, Kärcher, PricewaterhouseCoopers, Radisson Blu Hotels, and LOT Polish Airlines.

More

Tags:

  • email,
  • sms,
  • marketing,
  • technology

Pixeden

Pixeden
12 December 2019
in Showcase

Pixeden came to life with the idea of creating a one-stop place for all the tools that a modern designer might need in its day-to-day routine.

We thrive to bring you the best of the best for each of our premium and free graphic, web and design resources.

More

Tags:

  • graphics,
  • web design,
  • community,
  • marketplace,
  • vector

iTWire

iTWire
12 December 2019
in Showcase

iTWire is Australia's most read independent technology news source. With 327,505 (Nielsen SiteCensus) visitors a month. iTWire has 70,000+ subscribers to its daily IT&T newsletter. Our readers are the top IT and Telecommunications people in Australia.

iTWire is a powerful source of top-line IT&T news and information for our community of industry professionals.

iTWire puts tech news and developments from around the globe into perspective, covering all the important sectors of IT&T in Australia and globally, with a strong emphasis on government.

Our award-winning team of writers have earned a reputation for providing hard-hitting, insightful commentary and critical analysis of the business of technology, including corporate performance and developments, new product and service offerings, industry trends and government and public sector policies.

iTWire's audience comprises senior IT&T professionals, CEOs, CIOs and public sector department heads and managers. These leaders rely on iTWire to stay informed and maintain their competitive edge.

iTWire connects technology professionals across Australia though its breaking IT news, technology events calendar, news forum, free daily email newsletters, a specialist telecommunications industry publication and Australia's best IT specialist jobs board.

More

Tags:

  • news,
  • technology
Previous12345678910Next Page 1 of 10
  • Contact us
  • Privacy Policy
  • License
  • K2 Downloads
  • K2 Metrics
  • K2 on GitHub
back to top
Copyright © 2006 - 2026 JoomlaWorks Ltd. All rights reserved. K2 is a joint project by JoomlaWorks & Nuevvo, released under the GNU/GPL license.
Joomla is a registered trademark of Open Source Matters, Inc. K2 is not affiliated with or endorsed by Open Source Matters or the Joomla Project.
designed by Nuevvo