Skip to content

mindkomm/theme-lib-structured-data

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Structured Data

Structured Data helper classes for WordPress themes.

Supports the following data types:

Installation

You can install the package via Composer:

composer require mindkomm/theme-lib-structured-data

Usage

Put the generated output into the <head> of your HTML.

add_action( 'wp_head', function() {
    // Local Business
    $local_business = new Theme\Structured_Data\Local_Business( $options );
    echo $local_business->generate_jsonld();

    // Website
    $website = new Theme\Structured_Data\Website();
    echo $website->generate_jsonld();

    // Logo
    $logo = new Theme\Structured_Data\Logo( $logo_url );
    echo $logo->generate_jsonld();

    // Social profiles
    $social_profiles = new Theme\Structured_Data\Social_Profile( $social_profiles );
    echo $social_profiles->generate_jsonld();
} );

Website

The class checks if it can find a search.php file in your theme directory and will include a potential search action property accordingly. If you want to have more control over this, you can pass a boolean to the generate_jsonld() function:

// Use SearchAction, ignore check for search.php file.
echo $website->generate_jsonld( true );

Local Business

A Local Business entry can take a lot of data. The following types of data are supported:

  • Contact Data – Address, phone number, email address, etc.
  • Geocodes – The latitude and longitude of where the business is located on the map.
  • Opening hours – The opening hours of a business.

You need to pass this data when you instantiate the class in the form of an array. Here’s an overview over all the options you can pass in:

<?php

$options = [
    'name'                      => 'MIND Kommunikation GmbH',
    'street'                    => 'Wülflingerstrasse 36',
    'post_office_box_number'    => '',
    'zip'                       => '8400',
    'city'                      => 'Winterthur',
    'email'                     => '[email protected]',
    'phone'                     => '052 203 45 00',
    'country_code'              => 'CH',
    'logo'                      => 'https://www.mind.ch/our-logo.png',
    'social_profiles' => [
         'facebook'   => '',
         'twitter'    => 'https://twitter.com/mindkomm',
         'instagram'  => '',
         'youtube'    => '',
         'linkedin'   => '',
         'myspace'    => '',
         'pinterest'  => '',
         'soundcloud' => '',
         'tumblr'     => '',
     ],
    'location_map_url'          => 'https://www.google.ch/maps/place/MIND+Kommunikation+GmbH/@47.5054599,8.715229,17z/data=!3m1!4b1!4m5!3m4!1s0x479a999cb35b1801:0xefef1560f7750a4f!8m2!3d47.5054599!4d8.7174177',
    'geo'                       => [
        'address' => 'MIND Kommunikation GmbH, Wülflingerstrasse, Winterthur, Schweiz',
        'lat'     => '47.50545990000001',
        'lng'     => '8.717417699999942',
    ],
    'opening_hours'             => [
        [
            'weekday' => 'Monday',
            'opens'   => '08:00:00',
            'closes'  => '17:30:00',
        ],
        [
            'weekday' => 'Tuesday',
            'opens'   => '08:00:00',
            'closes'  => '17:30:00',
        ],
        [
            'weekday' => 'Wednesday',
            'opens'   => '08:00:00',
            'closes'  => '17:30:00',
        ],
        // …
    ],
    'opening_hours_closed'      => [
        [
            'date_from' => '2018-12-24',
            'date_to'   => '2019-01-02',
        ],
    ],
];

$local_business = new Theme\Structured_Data\Local_Business( $options );

echo $local_business->generate_jsonld();

Logo

Adds logo markup according to the Structured Data Guide for Logo.

$logo = new Theme\Structured_Data\Logo( 'https://www.mind.ch/our-logo.png' );

echo $logo->generate_jsonld();

Social Profiles

Links to social profiles such as Facebook, Twitter, Instagram according to the Structured Data Guide for Social Profile.

$social_profiles = new Theme\Structured_Data\Social_Profile( [
    'facebook'   => '',
    'twitter'    => 'https://twitter.com/mindkomm',
    'instagram'  => '',
    'youtube'    => '',
    'linkedin'   => '',
    'myspace'    => '',
    'pinterest'  => '',
    'soundcloud' => '',
    'tumblr'     => '',
] );

echo $social_profiles->generate_jsonld();

Usage remarks

  • It’s up to you how you want to build this data. You can set up a customizer page or you could use an ACF Options Page as an interface to edit these values.
  • If you don’t provide a value for something, it will be ignored in the output.
  • Always check your output with the Structured Data Testing Tool.

Credits

Uses the fantastic schema-org library by Spatie.

Support

This is a library that we use at MIND to develop WordPress themes. You’re free to use it, but currently, we don’t provide any support.

About

Structured Data helper classes for WordPress themes

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages