web-dev-qa-db-ja.com

WP_Footerのコードを上書きまたは置換する

add_action('wp_footer' ...)を介してフッターに動的に追加されるコードがあります。残念ながら、従来の方法を使用してそれを削除する方法がわからない、私は次の質問を見て、そこで解決策を使用しようとしました:

remove_actionまたはremove_filterを外部クラスに追加しますか?

しかし、答えのどれにも運がなかったので、今私は Alternatives を探しています。実際にwp_footer()の内容に対して何らかのpreg_replaceを実行する方法はありますか? remove_action()を使わずにwp_footer内のものを削除する方法は他にありますか?

追加情報:

プラグインには 出力ファイル があります。 行697 には、アクションを実際に追加します。

add_action('wp_footer', array($this, 'add_inline_styles'));

実際の関数は 1743行目で定義されています。

RevOperations::RevSliderFront::のどちらを参照するかわからない - プラグインフォルダのルートにある 初期設定ファイル です。

1
Howdy_McGee

remove_actionを除外したので、あなたがそれをすることができる唯一の方法があります。 preg_repalcesubstrの混合だが、ちょっとした手助けと PHP DOM

add_action('wp_footer', 'my_start_footer_ob', 1);
function my_start_footer_ob() {
    ob_start("my_end_footer_ob_callback");
}

add_action('wp_footer', 'my_end_footer_ob', 1000);
function my_end_footer_ob() {
    ob_end_flush();
}

function my_end_footer_ob_callback($buffer) {
    // remove what you need from he buffer

    return $buffer;
}

my_end_footer_ob_callback内であなたはあなたのニーズに合わせて$bufferを編集します。 $bufferパラメータは、すべてのアクションとフィルタがactionに呼び出された後に、フッターのすべての内容を持つべきです。単に1000より大きい数 に編集しないので、my_end_footer_obが最後に呼び出されます。

今、私はそのアクションがどんなHTMLコンテンツを生成するのかわかりませんが、あなたはそれを削除するためにpre_replaceまたはsubstrsのシーケンスを使うことができます。

PHP DOMを使いたい場合は、次のようにします。

function my_end_footer_ob_callback($buffer) {
    // remove what you need from he buffer

    $doc = new DOMDocument;
    $doc->loadHTML($buffer);

    $docElem = $doc->getElementById("theID");

    if($docElem !== NULL) // if it exists
        $docElem->parentNode->removeChild($docElem);

    return $doc->getElementsByTagName('body')->firstChild->nodeValue;
}

これでうまくいくかどうか教えてください。

2
aifrim