如何通过functions.php 有条件地仅包含主页的PHP 文件

Car*_*n H 2 php wordpress wordpress-theming

我需要require_once主题中 lib 文件夹中的 php 文件,但仅限于登录页面(也是博客/帖子索引页面)。

当我将require_once代码单独添加到functions.php时,它工作正常,但也会在我需要阻止的所有页面和单个帖子上执行。

当我添加以下条件查询标签时,它们似乎被忽略,并且该文件不包含在主页上。

if ( is_front_page() && is_home() ) {
  require_once 'lib/example.php';
} 
Run Code Online (Sandbox Code Playgroud)

我缺少什么以及推荐的方法是什么?

注意:这必须添加到主题的functions.php 文件中。

Flu*_*ten 5

如果您的代码包含在functions.php 的主体中,则它将无法正常工作,因为它在一切准备就绪is_homeis_front_page工作之前就已加载。您需要挂钩之后发生的 WordPress 操作之一。

以下代码将挂钩到wp操作中,其中条件操作将起作用:

// create a function to do the conditional check and include the files
function include_files_homepage_only() {
    if ( is_front_page() && is_home() ) {
        require_once 'lib/example.php';
    }
}

// hook into the wp action to call our function
add_action('wp', 'include_files_homepage_only');
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 您网站中的首页和主页(帖子索引页)相同,因此您无需检查页面是否等于is_front_pageis_home。如果您曾经更改过 WP 管理设置中的首页或帖子页面,那么使用这两项检查可能会破坏您的预期功能。
  • 您应该为您所包含的文件使用正确的路径,例如,根据需要使用 get_stylesheet_directory 或 get_template_directory。

参考Wordpress 条件标签法典

警告:您只能在 WordPress 中的 posts_selection操作挂钩之后使用条件查询标记(wp 操作挂钩是您可以使用这些条件的第一个)。对于主题,这意味着如果您在functions.php 的主体中(即在函数之外)使用条件标记,则它永远无法正常工作。