Yoast SEO 14.0: changing the Yoast Schema API

Due to the Yoast SEO indexable project using an entirely new namespaced Dependency Injection architecture, we’ve had to change some of our Schema API. All your existing integrations still work as we’ve made them backwards compatible, but we ask that you please update to the new code when you can. In this post I will explain the changes we made.

Overall, there are four important changes. All your old code still works, as we’ve added full backwards compatibility. However, that code will start throwing deprecation notices. The good news is, these changes are fairly simple and will make life easier in the long run.

WPSEO_Graph_Piece becomes Abstract_Schema_Piece

If you were implementing your own graph pieces and adding them with the , you probably had something like this:

class YoastCon implements \WPSEO_Graph_Piece {

You should replace it with:

use \Yoast\WP\SEO\Generators\Schema\Abstract_Schema_Piece;

class YoastCon extends Abstract_Schema_Piece {

This Abstract_Schema_Piece is an abstract, and not an interface, because it has two public properties: $context and $helpers. These are filled magically and can be used to obtain important data.

WPSEO_Schema_IDs becomes Schema_IDs

The Schema ID helper class has moved, it’s now called Schema_IDs, full namespace Yoast\WP\SEO\Config\Schema_IDs. This is simply a case of importing that class and then search & replacing all your code, so for instance  WPSEO_Schema_IDs::PERSON_LOGO_HASH  becomes Schema_IDs::PERSON_LOGO_HASH.

Schema image changes

Instead of doing this:

$image_schema_id = $context->canonical . '#product_image';
$image_helper    = new \WPSEO_Schema_Image( $image_schema_id );
$schema_image    = $image_helper->generate_from_attachment_id( $attachment_id );

You can now simply do this:

$image_schema_id = $this->context->canonical . '#product_image';
$image_helper    = $this->helpers->schema->image->generate_from_attachment_id( $image_schema_id, $attachment_id );

The context, that is now of class Meta_Tags_Context is automatically exposed under $this->context. All the helpers you could need are under $this->helpers. As you can see, generating an image can be done using the  Yoast\WP\SEO\Helpers\Schema\Image_Helper  class, which is automatically available under  $this->helpers->schema->image. You’ll find that if you use a modern IDE like PHPStorm or Visual Studio Code, all of these auto expand for lots of coding convenience.

Note that the Schema ID for the image has become a parameter on the function call instead of on the class constructor.

Classes have moved

We’ve moved classes, according to the table below, and the signature of some of the functions within them have slightly changed, nine times out of ten to get a Meta_Tags_Context parameter.

If you were, for instance, extending WPSEO_Person, that is now called Yoast\WP\SEO\Generators\Schema\Person. Extending Person is as simple as this:

use Yoast\WP\SEO\Generators\Schema\Person;

/**
 * Class Team_Member
 */
class Team_Member extends Person {

The old versus new class names:

Old class name New class name
WPSEO_Graph_Piece Now an abstract class instead of an interfaceAbstract_Schema_Piece
WPSEO_Schema_Article Article
WPSEO_Schema_Author Author
WPSEO_Schema_Breadcrumb Breadcrumb
WPSEO_Schema_Context Meta_Tags_Context automatically available under $this->context when you extend Abstract_Schema_Piece
WPSEO_Schema_FAQ FAQ
WPSEO_Schema_FAQ_Question_List Rolled up into FAQ
WPSEO_Schema_FAQ_Questions Rolled up into FAQ
WPSEO_Schema_HowTo HowTo
WPSEO_Schema_IDs Schema_IDs
WPSEO_Schema_Image Please use $this->helpers->schema->image
WPSEO_Schema_MainImage Main_Image
WPSEO_Schema_Organization Organization
WPSEO_Schema_Person Person
WPSEO_Schema_WebPage WebPage
WPSEO_Schema_Website WebSite

Coming up next!


1 Response to Yoast SEO 14.0: changing the Yoast Schema API

  1. Janz Nordman
    Janz Nordman  • 5 years ago

    You are doing great work. Any plans to support CreativeWork schema? As far as I see there’s currently structured data for pages and CreativeWork can be one of the nominant. Best regards