ลบลิงก์ JSON API ใน html ส่วนหัว


33

ไม่มีใครรู้วิธีลบลิงก์ 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' );

คำตอบ:


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

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

และข้อมูลโค้ดนี้อย่างสมบูรณ์ปิดการใช้งาน API REST และการแสดงเนื้อหาดังต่อไปนี้เมื่อคุณเข้าเยี่ยมชม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จากหัวสองครั้งด้วยลำดับความสำคัญที่แตกต่างกันหรือว่าพิมพ์ผิด?
ไบรอันวิลลิส

นอกจากนี้disable_json_api()หากเราใช้ wordpress ล่าสุดเราสามารถรวมตัวกรองรุ่น 2.x หรือจำเป็นทั้งสองอย่างได้ไหม
ไบรอันวิลลิส

3
disable_embeds_rewritesฟังก์ชั่นที่กำหนดเองจะหายไปฟังก์ชั่น แหล่งที่มาที่สมบูรณ์สามารถพบได้ที่github.com/swissspidy/disable-embeds/blob/master/...
Drakes

@Drakes ใช่คุณพูดถูก มันหายไปเพราะรหัสนี้ยังไม่ได้รับการปรับปรุงเนื่องจากมันถูกโพสต์เมื่อปีที่แล้ว ทำไมไม่แก้ไข / อัปเดตข้อมูลโค้ดด้านบนเพื่อช่วยเหลือผู้อื่นที่นี่แทน นั่นจะเป็นประโยชน์และมีประโยชน์;)
Jentan Bernardus

1
ฉันอยากจะแนะนำให้ใช้ปลั๊กอิน Disable Embeds แทนที่จะคัดลอกเพียงครึ่งเดียวเท่านั้นลงในปลั๊กอินหรือธีมของคุณ มันพิสูจน์ได้ในอนาคต
swissspidy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.