web-dev-qa-db-ja.com

特定ページ用のadd_filter

このフィルタを追加することは可能ですか

add_filter("the_content", "magicalender_get_event_page");

しかし、例えば特定の1ページだけ

if($post->post_name == "magicalenderpage")

関数の中にif文を入れると、他のどのページでも内容は表示されません - その後else文でそのページの内容がエコーアウトされます。と物事を行う

add_filter("the_content", "foo");

Magicalender_get_event_page関数は以下の通りです。

function magicalender_get_event_page(){
    global $wpdb;
    global $post;

    if($post->post_name == "magicalenderpage"){
        echo "<div class=\"magi_calender\">";
        for($i = 0; $event = $wpdb->get_row("SELECT * FROM ".$wpdb->prefix."magicalender", ARRAY_A, $i); $i++){
            echo"
                <div class=\"event\">
                    <h1>".$event['event']."</h1>
                    <h2>".date('m/d/Y', strtotime($event['dmy']))."</h2>
                    <div>".str_replace("&amp;", "&", str_replace("&#39;", "'", str_replace("&#34;", "\"", $event['desc'])))."</div>
                </div>
            ";
        }
        echo "</div>";

        $o = $wpdb->get_row("SELECT * FROM ".$wpdb->prefix."magioptions", ARRAY_A);
        echo"
            <script type=\"text/javascript\">
                var priority = '".$o['dm']."';
                var customDays = new Array('".$o['monday']."', '".$o['tuesday']."', '".$o['wednesday']."', '".$o['thursday']."', '".$o['friday']."', '".$o['saturday']."', '".$o['sunday']."');
                var customMonths = new Array('".$o['january']."', '".$o['february']."', '".$o['march']."', '".$o['april']."', '".$o['may']."', '".$o['june']."', '".$o['july']."', '".$o['august']."', '".$o['september']."', '".$o['october']."', '".$o['november']."', '".$o['december']."');
                var customMonthsShort = new Array('".$o['jan']."', '".$o['feb']."', '".$o['mar']."', '".$o['apr']."', '".$o['ma']."', '".$o['jun']."', '".$o['jul']."', '".$o['aug']."', '".$o['sep']."', '".$o['oct']."', '".$o['nov']."', '".$o['dec']."');
                jQuery(\".magi_calender\").magiCalender(priority, customDays, customMonths, customMonthsShort);
            </script>
        ";
    }
    else{
        return $content;
    }
}
3
Stephen Cook

単なる断片ではなく、フィルタとコールバックのコード全体を投稿すると便利です。

しかし、問題は、あなたが条件付きで$the_contentを返さないということであると思います。例えば:

function magicalendar_get_event_page( $content ) {
    if ( $post->post_name == 'magicalendarpage' ) {
        // Do something to $content
        return $content;
    }
}
add_filter( 'the_content', 'magicalendar_get_event_page' );

その場合は、戻り値 outside を条件式に移動します。

function magicalendar_get_event_page( $content ) {
    if ( $post->post_name == 'magicalendarpage' ) {
        // Do something to $content
    }
    return $content;
}
add_filter( 'the_content', 'magicalendar_get_event_page' );

'the_content'上の他のフィルタに何故/どのように干渉しているかを知るためには、おそらくあなたのコードを見る必要があります。

_編集_

少なくとも2つの問題

  1. あなたはフィルタコールバックへの引数として$contentを渡していません
  2. エコー出力を行わないでください。 返してください。それはthe_contentに適用された他のフィルタに関してあなたの問題を引き起こしている可能性が非常に高いです。

他のフィルタの前後に特にthe_contentをフィルタする必要がある場合は、add_filter()呼び出しに優先順位を付けます。デフォルトは10です。 より早く ;をフィルタリングするには、小さい番号を使用してください。 後で をフィルタリングするには、より高い数値を使用してください。

4
Chip Bennett