问题描述
我正在尝试类似于这个问题:remove_action or remove_filter with external classes?
我试图删除
<!-- This site is optimized with the Yoast WordPress SEO plugin v1.0.3 - http;//yoast.com/wordpress/seo/ -->
从插件的消息。
在你向我说明这可能是不道德的之前,作者说可以这样做:http://wordpress.org/support/topic/plugin-wordpress-seo-by-yoast-how-to-remove-dangerous-inserted-yoast-message-in-page-headers?replies=29#post-2503475
我已经找到添加评论的类:http://plugins.svn.wordpress.org/wordpress-seo/tags/1.2.8.7/frontend/class-frontend.php
基本上,WPSEO_Frontend
类具有名为 debug_marker
的功能,然后由名为 head
的函数调用,然后将其添加到__Construct
中的 wp_head
我是新手上课,但我发现了一种方法,通过做完全删除头
global $wpseo_front;
remove_action( 'wp_head', array($wpseo_front,'head'), 1, 1 );
但我只想从中删除 debug_marker
部件。我试过这个,但它不工作 remove_action( 'wp_head', array($wpseo_front,'head','debug_marker'), 1, 1 );
正如我所说,我是新来的课,所以任何帮助将是巨大的。
最佳解决方案
通过使用 output buffering 过滤 wp_head
动作钩子的输出,实现这一点的简单方法 (但不使用 Class 方法) 。
在您的主题 header.php
中,使用 ob_start($cb)
和 ob_end_flush();
函数打包 wp_head()
函数,如:
ob_start('ad_filter_wp_head_output');
wp_head();
ob_end_flush();
现在在主题 functions.php
文件中,声明您的输出回调函数 (在这种情况下为 ad_filter_wp_head_output
):
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;
}
如果要通过 functions.php
执行所有操作,无需编辑 header.php
文件,您可以挂接到 get_header
和 wp_head
动作钩子来定义输出缓冲会话:
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;
}
次佳解决方案
我不认为你将能够使用 remove_action
做到这一点。 remove_action
中的函数参数不会帮助您,因为 debug_marker()
函数不是 add_action()
调用中使用的函数。
在他的代码中可能有一些类似 add_action( "wp_head", "head" )
的东西。因此,您可以删除”head” 功能,但 debug_marker
没有明确添加为一个操作。
你可以
-
编辑 Yoast 的源文件并删除调试注释行。
-
扩展
WPSEO_Frontend
类并重载debug_marker
函数返回 「」 。 TBH,我不知道这将在 WP 加载插件方面如何工作,但可能值得调查。
第三种解决方案
感谢您的帮助,我终于解决了。我为我的孩子主题创建了一个 functions.php,然后添加
// we get the instance of the class
$instance = WPSEO_Frontend::get_instance();
/* then we remove the function
You can remove also others functions, BUT remember that when you remove an action or a filter, arguments MUST MATCH with the add_action
In our case, we had :
add_action( 'wpseo_head', array( $this, 'debug_marker' ), 2 );
so we do :
remove_action( 'wpseo_head', array( $this, 'debug_marker' ), 2 );
*/
remove_action( 'wpseo_head', array( $instance, 'debug_marker' ), 2 );
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。