Làm cách nào để loại bỏ nguồn cấp dữ liệu khỏi WordPress hoàn toàn?


8

Tôi muốn xóa hoàn toàn nguồn cấp dữ liệu khỏi WordPress. Tôi đang sử dụng chức năng nhỏ này từ http://wpengineer.com/287/disable-wordpress-feed/

/**
* disable feed
*/
function fb_disable_feed() {
wp_die( __('No feed available,please visit our <a href="'. get_bloginfo('url') .'">homepage</a>!') );
}
add_action('do_feed', 'fb_disable_feed', 1);
add_action('do_feed_rdf', 'fb_disable_feed', 1);
add_action('do_feed_rss', 'fb_disable_feed', 1);
add_action('do_feed_rss2', 'fb_disable_feed', 1);
add_action('do_feed_atom', 'fb_disable_feed', 1);

Vẫn còn hàng tấn tùy chọn thoáng qua .. như _transient_feed_modhoặc_transient_timeout_feed_mod

Làm thế nào tôi có thể loại bỏ hoàn toàn nguồn cấp dữ liệu từ WordPress?


và hàng tấn viết lại cho thức ăn quá .. những người ở khắp mọi nơi!
Ünsal Korkmaz

tò mò nếu bạn không phiền tôi hỏi ... tại sao bạn muốn xóa nguồn cấp từ wordpress?
Nicole

Tại sao tôi cần nguồn cấp dữ liệu trong WordPress nếu tôi không sử dụng nó để viết blog?
Ünsal Korkmaz

Câu trả lời:


14

Bước đầu tiên: xóa các liên kết nguồn cấp từ phần trang web của bạn.

<?php
add_action( 'wp_head', 'wpse33072_wp_head', 1 );
/**
 * Remove feed links from wp_head
 */
function wpse33072_wp_head()
{
    remove_action( 'wp_head', 'feed_links', 2 );
    remove_action( 'wp_head', 'feed_links_extra', 3 );
}

Tiếp theo, hãy xóa các điểm cuối nguồn cấp dữ liệu khỏi WP. Nối vào init, toàn cầu hóa $wp_rewritesau đó đặt các nguồn cấp dữ liệu thành một mảng trống. Điều này có hiệu quả ngăn chặn WordPress thêm việc viết lại nguồn cấp dữ liệu. Nó cũng siêu hackish và có thể sẽ phá vỡ vào một thời điểm nào đó trong tương lai.

<?php
add_action( 'init', 'wpse33072_kill_feed_endpoint', 99 );
/**
 * Remove the `feed` endpoint
 */
function wpse33072_kill_feed_endpoint()
{
    // This is extremely brittle.
    // $wp_rewrite->feeds is public right now, but later versions of WP
    // might change that
    global $wp_rewrite;
    $wp_rewrite->feeds = array();
}

Nhưng, nếu nó bị hỏng, điều đó không sao, bởi vì chúng tôi sẽ chuyển hướng nguồn cấp dữ liệu đến trang chủ.

<?php
foreach( array( 'rdf', 'rss', 'rss2', 'atom' ) as $feed )
{
    add_action( 'do_feed_' . $feed, 'wpse33072_remove_feeds', 1 );
}
unset( $feed );
/**
 * prefect actions from firing on feeds when the `do_feed` function is 
 * called
 */
function wpse33072_remove_feeds()
{
    // redirect the feeds! don't just kill them
    wp_redirect( home_url(), 302 );
    exit();
}

Và bước cuối cùng: một móc kích hoạt để đặt nguồn cấp dữ liệu ghi lại của chúng tôi vào một mảng trống và xóa các quy tắc viết lại.

<?php
register_activation_hook( __FILE__, 'wpse33072_activation' );
/**
 * Activation hook
 */
function wpse33072_activation()
{
    wpse33072_kill_feed_endpoint();
    flush_rewrite_rules();
}

Tất cả chỉ là một plugin .


Đồ tiện dụng. Cảm ơn! Tôi đã thêm một vài nguồn cấp dữ liệu vào mảng của bạn. Tôi biết có hai nhận xét này: 'do_feed_rss2_comments', 'do_feed_atom_comments'. Tôi tin rằng bạn cũng cần 'do_feed'. Tôi cập nhật như thế này: add_action( 'do_feed' . ($feed ? '_' . $feed : ''), 'wpse33072_remove_feeds', 1 );và mảng : array('', 'rdf', 'rss', 'rss2', 'atom', 'rss2_comments', 'atom_comments').
Jake

3

Mã bạn đã đăng sẽ thực hiện chính xác những gì nó nói - sẽ ngăn mọi người truy cập trang web của bạn thông qua nguồn cấp dữ liệu RSS.

Vẫn còn hàng tấn tùy chọn thoáng qua .. như _transient_feed_modhoặc_transient_timeout_feed_mod

Các tùy chọn tạm thời này hoàn toàn không có gì để làm với nguồn cấp dữ liệu trang web của bạn. Bảng điều khiển WordPress tiêu thụ một số nguồn cấp dữ liệu theo mặc định và hiển thị chúng trong các hộp trên bảng điều khiển quản trị viên. Các plugin bạn cài đặt có thể thêm nguồn cấp dữ liệu của riêng họ, cho màn hình tin tức hoặc cập nhật.

Các giá trị thoáng qua này được WordPress sử dụng để xác định thời điểm các nguồn cấp dữ liệu đã tiêu thụ này được cập nhật.

Làm thế nào tôi có thể loại bỏ hoàn toàn nguồn cấp dữ liệu từ WordPress?

Mã bạn đã đăng đã có ...


0

Điều này nên làm điều đó

/*disable rss*/
remove_action('wp_head', 'feed_links', 2 );
add_filter('post_comments_feed_link','bfr_disable_comments_feeds');
function bfr_disable_comments_feeds() {
    return null;
}

Tốt hơn nữa, nếu bạn có ít nhất PHP 5.3, bạn có thể sử dụng phiên bản ngắn hơn:

/*disable rss, PHP 5.3+ */
remove_action('wp_head', 'feed_links', 2 );
add_filter('post_comments_feed_link',function () { return null;});

Mặt khác, việc viết lại sẽ mất nhiều thời gian hơn, vì vậy trừ khi bạn hoàn toàn thất vọng về hiệu suất, bạn có thể để chúng ở đó.


Thậm chí ngắn hơn trong các phiên bản gần đây hơn của wordpress: add_filter ('post_comments_feed_link', '__return_false'); nhưng điều này chỉ ẩn một liên kết duy nhất đến nguồn cấp dữ liệu nhận xét. Nó nhớ ... rất nhiều để nói một cách nhẹ nhàng ...
Jake
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.