有谁知道如何删除标头标记中的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' );


#1 楼

我在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 );


参考文献


wp_oembed_add_discovery_links
rest_output_link_wp_head
rest_output_link_header


评论


谢谢,但这并不能为我删除api.w.org链接。

–IXN
2015年12月16日在12:52

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

–普拉拉德·耶里(Prahlad Yeri)
18年7月21日在13:21



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

–普拉拉德·耶里(Prahlad Yeri)
18年7月21日在13:29

#2 楼

此自定义函数应有助于删除页眉和页脚中的所有链接-您可以将其放在活动主题的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)
16年4月5日在16:45

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

–布莱恩·威利斯(Bryan Willis)
16年4月5日在16:47

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

–德雷克斯
16年6月14日在0:46

@Drakes是的,你是对的。缺少它是因为该代码自从去年发布以来尚未更新。为什么不修改/更新上面的代码段来帮助其他人呢?那将是有益和方便的;)

–简丹·伯纳德斯(Jentan Bernardus)
16 Jun 15'在1:42



我宁愿建议使用“禁用嵌入”插件,而不是仅将其中一半复制到您的插件或主题中。更具前瞻性。

–swissspidy
17年2月20日在15:43

#3 楼

禁用oEmbed发现链接和wp-embed.min.js的最佳解决方案和简便方法是在主题(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);

希望这可以帮助某人,因为上述解决方案在使用最新版本的WordPress时对我不起作用。