我正在尝试在特定的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。
答案 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' );