Hapus tautan JSON API di header html

33

Adakah yang tahu cara menghapus tautan WordPress JSON API di tag header?

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

Saya ingin menghindari menggunakan plugin. Jika memungkinkan, apakah ada cara untuk menghapusnya dengan fungsi remove_action?

remove_action( 'wp_head', 'rsd_link' );
Jordan
sumber

Jawaban:

30

Saya melihat di filter.php "add_action ('wp_head', 'rest_output_link_wp_head', 10, 0)" Yang membuat saya berpikir ini harus melakukan trik untuk menghapus rel='https://api.w.org/'.

remove_action( 'wp_head',      'rest_output_link_wp_head'              );

Sisanya ... * batuk * tampaknya di default-filter.php

remove_action( 'wp_head',      'wp_oembed_add_discovery_links'         );

Untuk menghapus rest_output_link_header

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

Referensi

jgraup
sumber
1
terima kasih tetapi ini tidak menghapus api.w.orgtautan untuk saya.
IXN
Sudah mencoba semuanya, tetapi header api.w.org tidak mau bergerak! Ini sepertinya tidak lagi berfungsi di versi wordpress terbaru.
Prahlad Yeri
1
Baiklah, itu berhasil! Ternyata Anda harus meletakkan ini di tema function.php. Saya mencoba untuk meletakkan ini di plugin khusus saya sehingga berfungsi untuk semua tema, tetapi ternyata itu tidak berhasil.
Prahlad Yeri
26

Fungsi khusus ini akan membantu menghapus semua tautan di header dan footer - Anda dapat meletakkannya di dalam functions.phpfile tema aktif Anda;

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' );

Dan potongan ini sepenuhnya menonaktifkan API REST dan menunjukkan konten di bawah ini ketika Anda mengunjungi http://example.com/wp-json/, example.comadalah nama domain situs web Anda;

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

Untuk menonaktifkan API WordPress REST, gunakan snippet di bawah ini;

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' );
Jentan Bernardus
sumber
Apakah perlu untuk menghapus wp_oembed_add_discovery_linksdari kepala dua kali dengan prioritas yang berbeda atau apakah itu salah ketik?
Bryan Willis
Juga di disable_json_api()jika menggunakan wordpress terbaru dapatkah kita cukup memasukkan filter versi 2.x atau keduanya diperlukan?
Bryan Willis
3
Fungsi kustom tidak memiliki fungsi disable_embeds_rewrites. Sumber lengkap dapat ditemukan di github.com/swissspidy/disable-embeds/blob/master/… .
Drakes
@ Gores Ya, Anda benar. Tidak ada karena kode ini belum diperbarui karena telah diposting tahun lalu. Mengapa tidak mengubah / memperbarui cuplikan di atas untuk membantu orang lain di sini? Itu akan sangat membantu dan berguna;)
Jentan Bernardus
1
Saya lebih suka merekomendasikan untuk menggunakan plugin Disable Embeds daripada hanya menyalin sebagian saja ke plugin atau tema Anda. Ini lebih tahan masa depan.
swissspidy