Remove an action from an external Class

I’m trying to do something similar to this question here: remove_action or remove_filter with external classes?

I’m trying to remove the

<!-- This site is optimized with the Yoast WordPress SEO plugin v1.0.3 - http;//yoast.com/wordpress/seo/ -->

message from the plugin.

And before you yell at me about how this may be unethical the author says it’s okay to do here: http://wordpress.org/support/topic/plugin-wordpress-seo-by-yoast-how-to-remove-dangerous-inserted-yoast-message-in-page-headers?replies=29#post-2503475

I have found the class that adds the comment here: http://plugins.svn.wordpress.org/wordpress-seo/tags/1.2.8.7/frontend/class-frontend.php

Basically the WPSEO_Frontend class has a function named debug_marker which is then called by a function named head which is then added to wp_head in __Construct

I’m new to classes but I found a way to completely remove the head by doing

global $wpseo_front;    
remove_action( 'wp_head', array($wpseo_front,'head'), 1, 1 );

but I only want to remove the debug_marker part from it. I tried this but it dosen’t work
remove_action( 'wp_head', array($wpseo_front,'head','debug_marker'), 1, 1 );

As I said I’m new to classes so any help would be great.

10 s
10

A simple way to achieve this (but without the Class approach) is by filtering the output of wp_head action hook using the output buffering.

In your theme’s header.php, wrap the wp_head() call with ob_start($cb) and ob_end_flush(); functions like:

ob_start('ad_filter_wp_head_output');
wp_head();
ob_end_flush();

Now in theme functions.php file, declare your output callback function (ad_filter_wp_head_output in this case):

function ad_filter_wp_head_output($output) {
    if (defined('WPSEO_VERSION')) {
        $output = str_ireplace('<!-- This site is optimized with the Yoast WordPress SEO plugin v' . WPSEO_VERSION . ' - http://yoast.com/wordpress/seo/ -->', '', $output);
        $output = str_ireplace('<!-- / Yoast WordPress SEO plugin. -->', '', $output);
    }
    return $output;
}

If you want to do all that through the functions.php without editing header.php file, you can hook to get_header and wp_head action hooks to define the output buffering session:

add_action('get_header', 'ad_ob_start');
add_action('wp_head', 'ad_ob_end_flush', 100);
function ad_ob_start() {
    ob_start('ad_filter_wp_head_output');
}
function ad_ob_end_flush() {
    ob_end_flush();
}
function ad_filter_wp_head_output($output) {
    if (defined('WPSEO_VERSION')) {
        $output = str_ireplace('<!-- This site is optimized with the Yoast WordPress SEO plugin v' . WPSEO_VERSION . ' - http://yoast.com/wordpress/seo/ -->', '', $output);
        $output = str_ireplace('<!-- / Yoast WordPress SEO plugin. -->', '', $output);
    }
    return $output;
}

Leave a Comment