add_filter for specific pages

时间:2011-09-11 作者:Stephen Cook

是否可以添加此筛选器

add_filter("the_content", "magicalender_get_event_page");

但仅限于一个特定页面,例如

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

如果我将If语句放在函数中,那么在任何其他页面上都不会显示内容,并且之后会使用else语句回显页面的内容,否则我会遇到问题,因为它会干扰其他插件,这些插件也会处理

add_filter("the_content", "foo");

magicalender\\u get\\u event\\u 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;
    }
}

1 个回复
最合适的回答,由SO网友:Chip Bennett 整理而成

发布整个过滤器和回调代码,而不仅仅是片段,这很有帮助。

但是,我怀疑问题是你不是returning $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\' );
如果是这种情况,请将返回移到条件外:

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\', 我们可能需要查看您的代码。

EDIT

至少有两个问题:

你不能通过$content 作为筛选器回调的参数DO NOT ECHO FILTER OUTPUT! 退回它。这很可能会导致应用于的其他筛选器出现问题the_content.如果需要筛选the_content 特别是在其他筛选器之前或之后,然后将优先级添加到add_filter() 呼叫默认值为10。使用较小的数字以更快地过滤;使用更大的数字在以后过滤。

结束

相关推荐

hooks & filters and variables

我是updating the codex page example for action hooks, 在游戏中完成一些可重用的功能(最初是针对这里的一些Q@WA)。但后来我遇到了一个以前没有意识到的问题:在挂接到一个函数以修改变量的输出后,我再也无法决定是要回显输出还是只返回它。The Problem: 我可以修改传递给do_action 用回调函数钩住。使用变量修改/添加的所有内容仅在回调函数中可用,但在do_action 在原始函数内部调用。很高兴:我将其修改为一个工作示例,因此您可以将其复制/粘贴