私はここでこの質問と同じようなことをやろうとしています: 外部クラスでremove_actionまたはremove_filter?
削除しようとしています
<!-- 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-insert-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
という名前の関数によって呼び出され、それがwp_head
の__Construct
に追加されます。
私はクラスに不慣れですが、私はすることによって頭を完全に取り除く方法を見つけました
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 );
私が言ったように私はクラスが初めてなので、どんな助けでも素晴らしいでしょう。
これを達成するための簡単な方法は(/ Classのアプローチなしで) output buffering を使ってwp_head
アクションフックの出力をフィルタリングすることです。
テーマのheader.php
で、wp_head()
呼び出しをob_start($cb)
関数とob_end_flush();
関数でラップします。
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;
}
ご協力ありがとうございます、ついに解決しました。私は自分の子供のテーマ用に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 );
remove_action
を使ってそれができるようになるとは思わない。 debug_marker()
関数はadd_action()
呼び出しで使用された関数ではなかったので、remove_action
の関数引数は役に立ちません。
Yoastはおそらく彼のコードにadd_action( "wp_head", "head" )
のようなものがあるのでしょう。そのため、 "head"関数を削除できますが、debug_marker
はアクションとして明示的に追加されていません。
あなたは出来る
WPSEO_Frontend
クラスを拡張し、 ""を返すようにdebug_marker
関数をオーバーロードします。 TBHさん、WPプラグインのロードという点でこれがどのように機能するのかわかりませんが、調べる価値があります。Steve Claridge
と同じ解決策で作業した後にこのスレッドを見つける、つまり:
WPSEO_Frontend
クラスを拡張し、 ""を返すためにdebug_marker
関数をオーバーロードします。
最後のステップで行き詰まってしまいましたが、以下のステップの詳細を説明しました。
WP Tavernからのこの記事 で述べたように、「これを達成するための最も簡単な方法は、それと並行して動作する機能プラグインを作成することです」。
それで私は ElegantThemeからのこの記事の後に私の最初のプラグインを作成する に続きました。
それは事が複雑になったときです。私は以下を加えました、しかし、私の最優先の機能はまだ何らかの理由で引き起こされません。
//get the base class
if(!class_exists('WPSEO_Frontend')) {
require_once $_SERVER['DOCUMENT_ROOT'] . '/wp-content/plugins/wordpress-seo/frontend/class-frontend.php';
}
/**
* Class Definition
*/
class WPSEO_Frontend_GUP extends WPSEO_Frontend{
/**
*
* OVERRIDES function from YOAST SEO
*
* Outputs or returns the debug marker, which is also used for title replacement when force rewrite is active.
*
* @param bool $echo Whether or not to echo the debug marker.
*
* @return string
*/
public function debug_marker( $echo = true ) {
return '';
}
}
Functions.phpのdebug_markerアクションを削除できることがわかりました。 Yoastプラグインはwp_headアクションで実行されます。その直後に続くアクションフック、すなわちwp_enqueue_scriptsを取ったところで、debug_markerの出力を削除する関数をフックしました。そのためには、プラグインオブジェクトも渡す必要があります。プライオリティ番号もプラグイン内から設定したものと同じでなければなりません。
function remove_debugmarker(){
global $wpseo_front;
remove_action( 'wpseo_head', array($wpseo_front, 'debug_marker') , 2 );
}
add_action('wp_enqueue_scripts','remove_debugmarker');
しかしこれは削除しません
<!-- / Yoast WordPress SEO plugin. -->
これはプラグインの重要なラッパー関数 head に反映されているからです。それを上書きしてみることができます。
Ahmadの答えに追加するには、Yoastがそれをする唯一のプラグインではないので、あなたはちょうど同じコードの量ですべてのhtmlコメントを削除することができました。
<?php
function remove_html_comments_buffer_callback($buffer) {
$buffer = preg_replace('/<!--[^\[\>\<](.|\s)*?-->/', '', $buffer);
return $buffer;
}
function remove_html_comments_buffer_start() {
ob_start("remove_html_comments_buffer_callback");
}
function remove_html_comments_buffer_end() {
ob_end_flush();
}
add_action('template_redirect', 'remove_html_comments_buffer_start', -1);
add_action('get_header', 'remove_html_comments_buffer_start');
add_action('wp_footer', 'remove_html_comments_buffer_end', 999);
フロントエンドからすべてのYoast WordPress SEOコメントを削除する抜粋を見つけました。また、@ bryan-willisと@ ahmad-mの回答が使用する出力バッファリングのアプローチも変更されています。
スニペットをあなたのテーマのfunctions.php
またはカスタムプラグイン/テーマphpファイルに置くだけです。
参照用にここに置いておきます - クレジットはスニペットの作者のものです
/**
* Yoast WordPress SEO Plugin - Remove All Yoast HTML Comments
* See at: https://Gist.github.com/paulcollett/4c81c4f6eb85334ba076
**/
if (defined('WPSEO_VERSION')){
add_action('get_header',function (){ ob_start(function ($o){
return preg_replace('/\n?<.*?yoast.*?>/mi','',$o); }); });
add_action('wp_head',function (){ ob_end_flush(); }, 999);
}
これは、@ ahmad-m Answer の修正版です。フィルタを適用することで、ヘッダーhtmlに複数のコンテンツ変更を加えることができます。
function header_str_replace_start(){
ob_start('header_str_replace_output');
}
function header_str_replace_output($output){
return apply_filters('header_str_replace', $output);
}
function header_str_replace_finish(){
ob_end_flush();
}
add_action('get_header', 'header_str_replace_start',-1);
add_action('wp_head', 'header_str_replace_finish', 999);
add_filter( 'header_str_replace', 'remove_yeost_seo_comments' ) ;
add_filter( 'header_str_replace', 'remove_white_space');
function remove_yeost_seo_comments($output) {
$output = str_ireplace('<!-- / Yoast SEO plugin. -->', '', $output);
return $output;
}
function remove_white_space($content){
return trim(preg_replace('/\s+/', ' ', $content));
}