在WP页面模板上运行一个函数 - is_page_template

时间:2015-12-09 12:19:26

标签: javascript php jquery wordpress

我正在尝试在特定的WP页面模板上运行一个函数。特定页面称为archive.php

这是我目前在functions.php

中所拥有的内容
if ( is_page_template( 'bloginfo("stylesheet_directory")/archive.php' ) ) {
    function add_isotope() {
        wp_register_script( 'isotope', get_template_directory_uri().'/js/isotope.pkgd.min.js', array('jquery'),  true );
        wp_register_script( 'isotope-init', get_template_directory_uri().'/js/isotope-hideall.js', array('jquery', 'isotope'),  true );
        wp_enqueue_script('isotope-init');
    }

    add_action( 'wp_enqueue_scripts', 'add_isotope' );
} else {
    function add_isotope() {
        wp_register_script( 'isotope', get_template_directory_uri().'/js/isotope.pkgd.min.js', array('jquery'),  true );
        wp_register_script( 'isotope-init', get_template_directory_uri().'/js/isotope.js', array('jquery', 'isotope'),  true );
        wp_enqueue_script('isotope-init');
    }

    add_action( 'wp_enqueue_scripts', 'add_isotope' );
}

函数之间的差异是isotope-hideall,它在加载页面时隐藏所有类别。不使用if / else时,它会在加载页面时隐藏所有页面模板中的所有类别,这不是我想要的。因此,我使用if / else来找到正确的页面模板。

我尝试了以下方法,但似乎没有任何效果:

is_page_template( 'archive.php' )

is_page_template( 'get_template_directory_uri()'.'/archive.php' )

我做错了什么,或者你有解决方案吗?

可以找到页面here

2 个答案:

答案 0 :(得分:2)

正如Pieter Goosen指出的那样, archive.php 保留用于内置的WordPress功能。将文件重命名为其他文件,例如 archives.php ,并确保在文件的顶部命名自定义页面模板:

<?php /* Template Name: Archives */ ?>

然后,您的代码应与is_page_template('archives.php')一起使用,因为它位于模板文件夹的根目录中。如果没有在文件名前添加任何文件夹结构,如下所示:/folder/folder2/archives.php

为避免重复此功能两次,您还应考虑解决此问题:

 function add_isotope( $isotope ) {
    wp_register_script( 'isotope', get_template_directory_uri().'/js/isotope.pkgd.min.js', array('jquery'),  true );
    wp_register_script( 'isotope-init', get_template_directory_uri().'/js/' . $isotope . '.js', array('jquery', 'isotope'),  true );
    wp_enqueue_script('isotope-init');
 }

 add_action( 'wp_enqueue_scripts', 'add_isotope' );

 if ( is_page_template( 'archives.php' ) : 
    add_isotope( 'isotope-hideall' );
 else :
    add_isotope( 'isotope' );
 endif;

答案 1 :(得分:1)

你的完整逻辑错了。对于普通档案,档案的目标是is_archive()或更具体的条件标记is_date()。请注意is_archive()在类别,作者,标签,日期和分类页面上返回true,因此如果您只需要定位存档,is_archive()可能有点过于通用

此外,你的条件应该在函数内部,而不是在函数之外,因为条件检查对于wp_enqueue_scripts钩子来说太迟了。

您的代码应该是这样的

function add_isotope() {
    if ( is_archive() ) { // Change as needed as I said
        // Enqueue scripts for archive pages
    } else {
        // Enqueue scripts for all other pages
    }
}

add_action( 'wp_enqueue_scripts', 'add_isotope' );