Charla WordCamp Chiclana: Crea Schemas sin plugins en WordPress

ponencia david schemas

Este es un resumen de mi charla que he realizado en WordCamp Chiclana 2020, que desde aquí agradezco su confianza para contar conmigo como ponente.

¿Qué son los Schemas?

  • Conjunto de etiquetas para describir nuestro contenido.
  • Ofrece semántica enriquecida para los buscadores.
  • Ayuda a entender y clasificar la información.
  • Podrá aparecer destacado en el buscador.

Tipos de Schemas

En la página de Schema.org, ofrece la jerarquía total de todos los esquemas creados, siendo los de primer nivel los siguientes:

  • Action. Acción realizada por un agente directo o indirecto sobre un objeto directo.
  • CreativeWork. El tipo más genérico para especificar un trabajo creativo, que incluye libros, películas, fotografías, programas de software, etc.
  • Event. Un evento que ocurre en un determinado tiempo y localización, tal como un concierto, clase o festival. La información de las entradas se puede realizar utilizando la propiedad ofertas. Los eventos repetitivos deberán estructurarse como objetos de eventos separados.
  • Intangible. Una clase útil que sirve de paraguas para cosas intangibles como cantidades, valores estructurados, etc.
  • MedicalEntity. El tipo genérico de la entidad relacionada con la salud y la práctica de la medicina.
  • Organization. Una organización como un colegio, ONG, corporación, club, etc.
  • Person. Una persona (viva, muerta, «no muerta», o ficticia).
  • Place. Entidades que están de alguna manera fijas, con un sitio fijo.
  • Product. Un producto o servicio ofertado. Por ejemplo: un par de zapatos, una entrada de concierto, alquiler de coches, un corte de pelo, o un episodio de una serie en streaming online.

Nos ofrece un total de 1022 esquemas diferentes, por lo que podemos darnos cuenta de la versatilidad para utilizar dichos esquemas.

Ejemplo Schema para Recetas

add_action( 'wp_head', 'cmk_add_schema_pages', 20 );
/**
 * Shows Schema depeding of post type in header with LD JSON
 *
 * @return void
 */
function cmk_add_schema_pages() {
      $post_id      = get_the_ID();
      $cook_time    = get_post_meta( $post_id, 'rec_tiempo', true );
      $prep_time    = get_post_meta( $post_id, 'rec_tiempo', true );
      $ingredients  = get_post_meta( $post_id, 'rec_ingredient', false );
      $recipe_inst  = wp_strip_all_tags( get_post_meta( $post_id, 'rec_preparacion', true ) );
      $recipe_yield = get_post_meta( $post_id, 'rec_personas', true );

      if ( is_singular( 'receta' ) ) {
            $sch = '
<script type="application/ld+json"> 
      {
            "@context": "http://schema.org",
            "@type": "Recipe",
            "author": "David Perez",
            "cookTime": "PT' . $cook_time . 'M",
            "datePublished": "2009-05-08",
            "description": " ' . get_the_excerpt() . '",
            "image": "' . get_the_post_thumbnail_url() . '",
            "recipeIngredient": [';
            if ( is_array( $ingredients ) ) {
                  foreach ( $ingredients[0] as $ingredient ) {
                        $sch .= '" ' . $ingredient . '",';
                  }
            }
            $sch .= '],
            "prepTime": "' . $prep_time . '",
            "recipeInstructions": "' . $recipe_inst . '",
            "recipeYield": "' . $recipe_yield . ' persons",
            "suitableForDiet": "http://schema.org/LowFatDiet"
      }
</script>';

            echo $sch;
      } // Recipe schema
}




Ejemplo Esquema Organización

add_action( 'wp_head', 'cmk_add_schema_home_page', 20 );
/**
 * Shows Schema depeding of post type home_page in header with LD JSON
 *
 * @return void
 */
function cmk_add_schema_home_page() {

      if ( is_front_page() || is_home() ) {
            $sch = '
<script type="application/ld+json">
{
  "@context": "http://schema.org",
  "@type": "Organization",
  "address": {
    "@type": "PostalAddress",
    "addressLocality": "Granada, España",
    "postalCode": "18006",
    "streetAddress": "Calle Jose Luis Pérez Pujadas, 6 Edificio Forum Oficina B29"
  },
  "email": "info@closemarketing.es",
  "url": "https://www.closemarketing.es/",
  "description": "Agencia de Marketing Online, Diseñamos Web en WordPress para Granada y Málaga.",
  "taxID": "ESB19618909",
  "employee": [
    {
      "@type": "Person",
      "name": "David Pérez"
    },
    {
      "@type": "Person",
      "name": "Sacra Jáimez"
    }
  ],
  "member": [
      {
            "@type": "Organization",
            "name": "AJE Granada"
      },
      {
            "@type": "Organization",
            "name": "WordPress Granada"
      }
    ],
  "name": "Closemarketing",
  "telephone": "+34858958383"
}
</script>';
            echo $sch;
      } // home_page schema
}

Ejemplo Esquema Cursos

add_action( 'wp_head', 'cmk_add_schema_courses', 20 );
/**
 * Shows Schema depeding of post type in header with LD JSON
 *
 * @return void
 */
function cmk_add_schema_courses() {
      if ( is_singular( 'formacion' ) ) {
            $post_id   = get_the_ID();
            $price_raw = get_post_meta( $post_id, '_listing_price', true );
            $time_raw  = get_post_meta( $post_id, 'for_dura', true );
            $time      = substr_replace( $time_raw, '', -1 );
            if ( date( m ) > 6 ) {
                  $year_start = date( 'Y' );
                  $year_end   = date( 'Y' ) + 1;
            } else {
                  $year_start = date( 'Y' ) - 1;
                  $year_end   = date( 'Y' );
            }
            $start_date = $year_start . '-09-01';
            $end_date   = $year_end . '-06-20';
            $sch        = '<script type="application/ld+json">
{
  "@context": "http://schema.org/",
  "@id": "./",
  "@type": "Course",
  "name": "' . get_the_title( $post_id ) . '",
  "description": "' . get_the_excerpt( $post_id ) . '",
  "hasCourseInstance": [
    {
      "@type": "CourseInstance",
      "name": "' . get_the_title( $post_id ) . '",
      "location": {
            "@type": "Place",
            "address": {
              "@type": "PostalAddress",
              "addressLocality": "Granada",
              "addressRegion": "ESP"
            }
      },
      "description": "' . get_the_excerpt( $post_id ) . '",
      "startDate": "' . $start_date . '",
      "startDate": "' . $end_date . '",
      "timeRequired": "' . $time . '",
      "about": "' . get_post_meta( $post_id, 'for_ncursos', true ) . '"
    }
  ]
}
</script>';

            echo $sch;
      } // Course schema
}