删除标头html中的JSON API链接


33

有谁知道如何删除标头标记中的WordPress JSON API链接?

<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>

我想避免使用插件。如果可能,是否可以使用remove_action函数将其删除?

remove_action( 'wp_head', 'rsd_link' );

Answers:


30

我在filters.php中看到“ add_action('wp_head','rest_output_link_wp_head',10,0)”,这使我认为这应该可以解决问题rel='https://api.w.org/'

remove_action( 'wp_head',      'rest_output_link_wp_head'              );

其余的... * 咳嗽 *似乎在default-filters.php中

remove_action( 'wp_head',      'wp_oembed_add_discovery_links'         );

删除rest_output_link_header

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

参考


1
谢谢,但这不会api.w.org为我删除链接。
IXN

尝试了所有这些,但是api.w.org标头不会让步!在最近的wordpress版本中,这似乎不再起作用。
Prahlad Yeri '18

1
好吧,它起作用了!原来您必须将其放在主题的中function.php。我试图将其放在我的自定义插件中,以使其适用于所有主题,但显然不起作用。
Prahlad Yeri

26

此自定义函数应有助于删除页眉和页脚中的所有链接-您可以将其放在functions.php活动主题的文件中;

function remove_json_api () {

    // Remove the REST API lines from the HTML Header
    remove_action( 'wp_head', 'rest_output_link_wp_head', 10 );
    remove_action( 'wp_head', 'wp_oembed_add_discovery_links', 10 );

    // Remove the REST API endpoint.
    remove_action( 'rest_api_init', 'wp_oembed_register_route' );

    // Turn off oEmbed auto discovery.
    add_filter( 'embed_oembed_discover', '__return_false' );

    // Don't filter oEmbed results.
    remove_filter( 'oembed_dataparse', 'wp_filter_oembed_result', 10 );

    // Remove oEmbed discovery links.
    remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );

    // Remove oEmbed-specific JavaScript from the front-end and back-end.
    remove_action( 'wp_head', 'wp_oembed_add_host_js' );

   // Remove all embeds rewrite rules.
   add_filter( 'rewrite_rules_array', 'disable_embeds_rewrites' );

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

并且此代码段完全禁用了REST API,并在您访问时显示以下内容http://example.com/wp-json/,它们example.com是您网站的域名;

{"code":"rest_disabled","message":"The REST API is disabled on this site."}

为了禁用WordPress REST API,请使用以下代码段;

function disable_json_api () {

  // Filters for WP-API version 1.x
  add_filter( 'json_enabled', '__return_false' );
  add_filter( 'json_jsonp_enabled', '__return_false' );

  // Filters for WP-API version 2.x
  add_filter( 'rest_enabled', '__return_false' );
  add_filter( 'rest_jsonp_enabled', '__return_false' );

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

是否有必要以wp_oembed_add_discovery_links不同的优先级从头部移除两次,还是错别字?
Bryan Willis

另外,disable_json_api()如果使用最新的wordpress,我们是否可以仅包含2.x版过滤器,还是都需要?
Bryan Willis

3
自定义函数缺少该函数disable_embeds_rewrites。完整的源代码可以在github.com/swissspidy/disable-embeds/blob/master/…中找到。
德雷克斯

@Drakes是的,你是对的。缺少它是因为此代码自从去年发布以来尚未更新。为什么不修改/更新上面的代码段来帮助其他人呢?那将是有用和方便的;)
简丹·伯纳德斯(Jentan Bernardus

1
我宁愿建议使用“禁用嵌入”插件,而不是仅将其中一半复制到您的插件或主题中。更具前瞻性。
swissspidy
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.