Eliminar enlaces de la API JSON en el encabezado html

11 dic 2015, 01:30:16
Vistas: 61K
Votos: 41

¿Alguien sabe cómo eliminar los enlaces de la API JSON de WordPress en la etiqueta del encabezado?

<head>
...
<link rel='https://api.w.org/' href='http://example.com/wp-json/' />
<link rel="alternate" type="application/json+oembed" href="http://example.com/wp-json/oembed/1.0/embed?url=..." />
<link rel="alternate" type="text/xml+oembed" href="http://example.com/wp-json/oembed/1.0/embed?url=..." />
</head>

Me gustaría evitar usar un plugin. Si es posible, ¿hay alguna manera de eliminarlos con la función remove_action?

remove_action( 'wp_head', 'rsd_link' );
0
Todas las respuestas a la pregunta 3
3
43

Veo en filters.php "add_action( 'wp_head', 'rest_output_link_wp_head', 10, 0 )" lo que me hace pensar que esto debería funcionar para eliminar rel='https://api.w.org/'.

remove_action( 'wp_head',      'rest_output_link_wp_head'              );

El resto... * tos * parecen estar en default-filters.php

remove_action( 'wp_head',      'wp_oembed_add_discovery_links'         );

Para eliminar el rest_output_link_header

remove_action( 'template_redirect', 'rest_output_link_header', 11 );

Referencias

11 dic 2015 01:38:23
Comentarios

gracias pero esto no elimina el enlace api.w.org para mí.

IXN IXN
16 dic 2015 14:52:24

Probé todos, ¡pero el encabezado api.w.org no se mueve! Esto ya no parece funcionar en las versiones recientes de WordPress.

Prahlad Yeri Prahlad Yeri
21 jul 2018 16:21:52

¡Bien, funcionó! Resulta que hay que poner esto en el archivo function.php del tema. Estaba intentando poner esto en mi plugin personalizado para que funcione con todos los temas, pero aparentemente eso no funciona.

Prahlad Yeri Prahlad Yeri
21 jul 2018 16:29:03
7
30

Esta función personalizada puede ayudar a eliminar todos los enlaces en el encabezado y pie de página - puedes colocarla dentro del archivo functions.php de tu tema activo;

function remove_json_api () {

    // Elimina las líneas de la API REST del encabezado HTML
    remove_action( 'wp_head', 'rest_output_link_wp_head', 10 );
    remove_action( 'wp_head', 'wp_oembed_add_discovery_links', 10 );

    // Elimina el endpoint de la API REST
    remove_action( 'rest_api_init', 'wp_oembed_register_route' );

    // Desactiva la detección automática de oEmbed
    add_filter( 'embed_oembed_discover', '__return_false' );

    // No filtra los resultados de oEmbed
    remove_filter( 'oembed_dataparse', 'wp_filter_oembed_result', 10 );

    // Elimina los enlaces de descubrimiento de oEmbed
    remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );

    // Elimina el JavaScript específico de oEmbed del front-end y back-end
    remove_action( 'wp_head', 'wp_oembed_add_host_js' );

   // Elimina todas las reglas de reescritura de embeds
   add_filter( 'rewrite_rules_array', 'disable_embeds_rewrites' );

}
add_action( 'after_setup_theme', 'remove_json_api' );

Y este fragmento desactiva completamente la API REST y muestra el contenido a continuación cuando visitas http://example.com/wp-json/, donde example.com es el nombre de dominio de tu sitio web;

{"code":"rest_disabled","message":"La API REST está desactivada en este sitio."}

Para desactivar la API REST de WordPress, usa el siguiente fragmento;

function disable_json_api () {

  // Filtros para la versión 1.x de WP-API
  add_filter( 'json_enabled', '__return_false' );
  add_filter( 'json_jsonp_enabled', '__return_false' );

  // Filtros para la versión 2.x de WP-API
  add_filter( 'rest_enabled', '__return_false' );
  add_filter( 'rest_jsonp_enabled', '__return_false' );

}
add_action( 'after_setup_theme', 'disable_json_api' );
20 dic 2015 23:09:25
Comentarios

¿Es necesario eliminar wp_oembed_add_discovery_links del head dos veces con diferentes prioridades o es un error tipográfico?

Bryan Willis Bryan Willis
5 abr 2016 19:45:29

También en el disable_json_api(), si se usa la última versión de WordPress, ¿podemos incluir solo los filtros de la versión 2.x o se necesitan ambos?

Bryan Willis Bryan Willis
5 abr 2016 19:47:46

A la función personalizada le falta la función disable_embeds_rewrites. El código fuente completo se puede encontrar en https://github.com/swissspidy/disable-embeds/blob/master/disable-embeds.php.

Drakes Drakes
14 jun 2016 03:46:29

@Drakes Sí, tienes razón. Falta porque este código no se ha actualizado desde que se publicó el año pasado. ¿Por qué no modificas/actualizas el fragmento de código anterior para ayudar a otros aquí? Sería útil y práctico ;)

Jentan Bernardus Jentan Bernardus
15 jun 2016 04:42:12

Dejaré eso completamente a tu discreción.

Drakes Drakes
15 jun 2016 06:19:24

Recomendaría más bien usar el plugin Disable Embeds en lugar de copiar solo la mitad en tu plugin o tema. Es más resistente a futuros cambios.

swissspidy swissspidy
20 feb 2017 17:43:33

rest_enabled está obsoleto desde la versión 4.7.0

Max Yudin Max Yudin
8 dic 2017 20:30:16
Mostrar los 2 comentarios restantes
0

La mejor solución y la forma más sencilla de desactivar los enlaces de descubrimiento oEmbed y wp-embed.min.js es agregando este fragmento de código en tu tema (function.php).

remove_action( 'wp_head', 'wp_oembed_add_discovery_links', 10 ); remove_action( 'wp_head', 'wp_oembed_add_host_js' ); remove_action('rest_api_init', 'wp_oembed_register_route'); remove_filter('oembed_dataparse', 'wp_filter_oembed_result', 10);

Espero que esto pueda ayudar a alguien, ya que las soluciones anteriores no funcionaron para mí al usar la última versión de WordPress.

10 may 2020 19:11:32