Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

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.

share|improve this question
add comment

3 Answers 3

up vote 2 down vote accepted

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;
}
share|improve this answer
    
I went with the hook method so I wouldn't have to edit header.php. Thanks. –  BandonRandon Dec 6 '12 at 19:33
add comment

I don't think you are going to be able to do that using remove_action. The function argument in remove_action will not help you as the debug_marker() function was not the function that was used in the add_action() call.

Yoast presumably has something like add_action( "wp_head", "head" ) in his code. So you can remove the "head" function but debug_marker was not explicitly added as an action.

You could

  1. Edit Yoast's source file and remove the debug comment line.
  2. Extend the WPSEO_Frontend class and overload the debug_marker function to return "". TBH, I'm not sure how this would work in terms of WP loading the plugin but could be worth investigating.
share|improve this answer
    
Thanks, I really don't want to edit the file. I would be interested in learning how to extend the class but this is a bit out of my knowledge. –  BandonRandon Dec 6 '12 at 19:32
add comment

I've found that you can remove the debug_marker action in functions.php. Yoast plugin is executed in the wp_head action. I just took the action hook which follows directly after that, namely wp_enqueue_scripts and there I hooked a function that removed the debug_marker output. For this you also have to pass the plugin object. Also the priority number has to be the same as the one set from within the plugin.

function remove_debugmarker(){
global $wpseo_front;
remove_action( 'wpseo_head', array($wpseo_front, 'debug_marker') , 2 );
}
add_action('wp_enqueue_scripts','remove_debugmarker');

However this does not remove the

<!-- / Yoast WordPress SEO plugin. -->

part, because that is echoed in the plugin's crucial wrapper function head. You could try overwriting that.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.