¿Alguna vez has tenido la necesidad de añadir los atributos hasmap, coordenadas y redes sociales en tu marcado schema con el plugin schema pro? ¡te explico como hacerlo de forma fácil!
Si has llegado a este artículo quizá te interese:
Actualizado 7 Diciembre 2020
Añadimos también los campos personalizados al schema de servicio. Como podrás comprobar en el bloque de códigos de servicio falta hasMap, latitud y longitud dado que estos parámetros no los acepta este código.
Te dejo el código para añadir estos campos a schema PRO
<?php
/**
* SCHEMA PRO: Añadir hasmap, Coordenadas y redes sociales
* a los datos de local business y de servicio
*
* Código creado por Juan Anotnio Muñoz Castro
* https://juanmcastro.es
*/
function JM_add_my_custom_meta_field() {
//Registramos los campos personalizados
add_filter( 'wp_schema_pro_schema_meta_fields', 'JM_my_extra_schema_field' );
//añadimos los campos personalizados a los datos de local business
add_filter( 'wp_schema_pro_schema_local_business', 'JM_my_extra_schema_field_mapping', 10, 3 );
//añadimos los campos personalizados a los datos de servicio
add_filter( 'wp_schema_pro_schema_service', 'JM_my_extra_schema_field_mapping', 10, 3 );
}add_action( 'after_setup_theme', 'JM_add_my_custom_meta_field' );
/**
* Añadir ficheros a la pagina de configuración
*/
function JM_my_extra_schema_field( $fields ) {
/**
* creamos los campos personalizados para local business
*/
$fields['bsf-aiosrs-local-business']['subkeys']['has-map'] = array(
'label' => esc_html__( 'hasMap', 'wp-schema-pro' ),
'type' => 'text',
'default' => 'none',
'required' => false,
);
$fields['bsf-aiosrs-local-business']['subkeys']['Facebook'] = array(
'label' => esc_html__( 'Facebook', 'wp-schema-pro' ),
'type' => 'text',
'default' => 'none',
'required' => false,
);
$fields['bsf-aiosrs-local-business']['subkeys']['Instagram'] = array(
'label' => esc_html__( 'Instagram', 'wp-schema-pro' ),
'type' => 'text',
'default' => 'none',
'required' => false,
);
$fields['bsf-aiosrs-local-business']['subkeys']['Twitter'] = array(
'label' => esc_html__( 'Twitter', 'wp-schema-pro' ),
'type' => 'text',
'default' => 'none',
'required' => false,
);
$fields['bsf-aiosrs-local-business']['subkeys']['Linkedin'] = array(
'label' => esc_html__( 'Linkedin', 'wp-schema-pro' ),
'type' => 'text',
'default' => 'none',
'required' => false,
);
$fields['bsf-aiosrs-local-business']['subkeys']['web'] = array(
'label' => esc_html__( 'Web', 'wp-schema-pro' ),
'type' => 'text',
'default' => 'none',
'required' => false,
);
$fields['bsf-aiosrs-local-business']['subkeys']['geo-latitude'] = array(
'label' => esc_html__( 'latitude', 'wp-schema-pro' ),
'type' => 'text',
'default' => 'none',
'required' => false,
);
$fields['bsf-aiosrs-local-business']['subkeys']['geo-longitude'] = array(
'label' => esc_html__( 'longitude', 'wp-schema-pro' ),
'type' => 'text',
'default' => 'none',
'required' => false,
);
/**
* FIN DATOS LOCAL BUSINESS
*/
/**
* Creamos los campos personalizados para el tipo de dato servicios
*/
$fields['bsf-aiosrs-service']['subkeys']['Facebook'] = array(
'label' => esc_html__( 'Facebook', 'wp-schema-pro' ),
'type' => 'text',
'default' => 'none',
'required' => false,
);
$fields['bsf-aiosrs-service']['subkeys']['Instagram'] = array(
'label' => esc_html__( 'Instagram', 'wp-schema-pro' ),
'type' => 'text',
'default' => 'none',
'required' => false,
);
$fields['bsf-aiosrs-service']['subkeys']['Twitter'] = array(
'label' => esc_html__( 'Twitter', 'wp-schema-pro' ),
'type' => 'text',
'default' => 'none',
'required' => false,
);
$fields['bsf-aiosrs-service']['subkeys']['Linkedin'] = array(
'label' => esc_html__( 'Linkedin', 'wp-schema-pro' ),
'type' => 'text',
'default' => 'none',
'required' => false,
);
$fields['bsf-aiosrs-service']['subkeys']['web'] = array(
'label' => esc_html__( 'Web', 'wp-schema-pro' ),
'type' => 'text',
'default' => 'none',
'required' => false,
);
/**
* FIN DATOS DE SERVICIO
*/
return $fields;
}
/**
* Añadimos los campos nuevos al marcado schema
*/
function JM_my_extra_schema_field_mapping( $schema, $data, $post ) {
if ( isset( $data['has-map'] ) && ! empty( $data['has-map'] ) ) {
$schema['hasMap'] = esc_html( $data['has-map'] );
}
if ( isset( $data['Facebook'] ) && ! empty( $data['Facebook'] ) ) {
$schema['sameAs'][] = esc_html( $data['Facebook'] );
}
if ( isset( $data['Instagram'] ) && ! empty( $data['Instagram'] ) ) {
$schema['sameAs'][] = esc_html( $data['Instagram'] );
}
if ( isset( $data['Twitter'] ) && ! empty( $data['Twitter'] ) ) {
$schema['sameAs'][] = esc_html( $data['Twitter'] );
}
if ( isset( $data['Linkedin'] ) && ! empty( $data['Linkedin'] ) ) {
/* $schema['sameAs'] = esc_html( $data['Linkedin'] ); */
$schema['sameAs'][] = esc_html( $data['Linkedin'] );
}
if ( isset( $data['web'] ) && ! empty( $data['web'] ) ) {
/* $schema['sameAs'] = esc_html( $data['Linkedin'] ); */
$schema['sameAs'][] = esc_html( $data['web'] );
}
if ( isset( $data['geo-latitude'] ) && ! empty( $data['geo-latitude'] ) && isset( $data['geo-longitude'] ) && ! empty( $data['geo-longitude'] ) ) {
$schema['geo']['@type'] = 'GeoCoordinates';
$schema['geo'][latitude] = esc_html( $data['geo-latitude'] );
$schema['geo'][longitude] = esc_html( $data['geo-longitude'] );
}
return $schema;
}
?>