WordPress模板制作中,function.php是一个特殊的文件,可以用来自定义模板中需要用到的函数,添加钩子函数等。为了为不同的模板添加不同的钩子函数,需要使用WordPress的条件标签(Conditional Tag)。

WordPress常用条件标签如下:

is_home() – 当默认主页显示时返回ture

is_front_page() – 使用页面作为首页,首页显示时返回true

is_admin() – 当控件面板或者管理员面板显示时返回true

is_single() – 当单页文章显示时(即当调用single.php模板时)返回true

is_page() – 当页面(page)显示时返回true

is_category() – 当分类(Category)页面显示时返回true

is_tag() – 当存档标签页面显示时返回true

下面是在function.php中调用条件标签为不同页面模板添加不同行为的例子 – Post Icon

这段代码在每个post页面文章开头添加一张图片,假设该图片存在于你的模板文件夹下images目录中。该filter的优先级为20,比一般的filter优先级低(默认优先级是10)

add_filter( 'the_content', 'my_the_content_filter', 20 );
/**
 * 在每篇文章页面开头添加一个icon
 *
 * @uses is_single()
 */
function my_the_content_filter( $content ) {

    if ( is_single() )
        // 将图片添加到每篇文章开头,第二个%s代表文章原始的content内容
        $content = sprintf(
            '<img class="post-icon" src="%s/images/post_icon.png" alt="Post icon" title=""/>%s',
            get_bloginfo( 'stylesheet_directory' ),
            $content
        );

    // Returns the content.
    return $content;
}

6条留言

  1. 你好,我在function.php 里面尝试只给页面添加某个JS,是用is_page()这样写的:
    function add_scripts() {
    if(is_page()){
    wp_register_script( ‘waypoints’, get_template_directory_uri() . ‘/js/waypoints.min.js’, array( ‘jquery’ ));
    wp_enqueue_script(‘waypoints’);
    }
    }
    add_action( ‘init’, ‘add_scripts’ );

    测试后没有效果,这个js没有加载到页面里。
    请教是哪里的问题?谢谢

    1. 用add_action( ‘wp_enqueue_scripts’, ‘add_scripts’ );试试

        1. 如果无效,那一定是你主题的问题了,我把你那段代码换成wp_enqueue_scripts,随便放一个主题里就有效,wp和wp_enqueue_scripts代表程序执行的顺序,他们不是简单的参数!
          如果你不明白,看一下这个页面
          http://codex.wordpress.org/Plugin_API/Action_Reference#Actions_Run_During_a_Typical_Request
          用浏览器在该页搜索wp和wp_enqueue_scripts,从它们的物理位置上就能明白它们的区别了。
          最好再看一下这个页面的代码示例
          http://codex.wordpress.org/Function_Reference/wp_enqueue_script

          1. 好的,我晚上细读一下资料。多谢 : )

评论功能已关闭