Не может использовать is single() и является администратором в functions.php


Я использую тематическую дочернюю тему для своего веб-сайта WordPress, и вместо того, чтобы помещать все свои функции в functions.php файл, я думал, что сделаю его более организованным, создав несколько других функциональных файлов (admin_functions.php, single_functions.php ...) и включил эти файлы в мою детскую тему functions.php файл выглядит следующим образом:

require_once ('my-functions/admin-functions.php');
require_once ('my-functions/single-functions.php');

Это прекрасно работает.

Тем не менее, я пытаюсь заставить wordpress загружать только необходимые файлы, используя условные теги следующим образом:

if(is_admin())
   require_once ('my-functions/admin-functions.php');
elseif(is_single())
   require_once ('my-functions/single-functions.php');

И это просто не сработает.

Кажется, я не могу найти причину, почему. Я подумал, что, возможно, есть некоторые функции wordpress, которые необходимо вызвать сначала, прежде чем использовать условные функции (is_single и is_admin). Хотя, кажется, я ничего не могу сделать.

Любая помощь будет очень признательна. Спасибо

Author: kassemEzz, 2014-08-25

2 answers

Поскольку это важный вопрос, на который нет реального ответа, я приведу то, что я нашел после поиска решения, хотя у меня нет ответа на почему это не работает так, как мы все думаем, что это должно быть.

Вам нужно где-то подключиться к WordPress, вот так:

// load our posts-only PHP
add_action( "wp", "only_posts" );
function only_posts() {
    if( is_single() ) {
        // we are on a single post
        include_once( "posts.php" );
    }
}

Поэтому в вашем конкретном случае я бы предложил написать его следующим образом, чтобы заставить is_single и is_admin работать в functions.php:

add_action( "wp", "include_conditionals" );
function include_conditionals() { 
    if( is_admin() ) {
        require_once( "my-functions/admin-functions.php" );
    } else if( is_single() ) {
        require_once( "my-functions/single-functions.php" );
    }
}

Смотрите здесь для получения дополнительной информации.

 1
Author: jdgregson, 2017-05-23 12:40:05

Сначала давайте рассмотрим, когда и где вы можете использовать эти условные обозначения:

  • is_admin() будет работать практически повсеместно. WP_ADMIN константа, которую он проверяет, определяется очень рано в точках входа администратора и путем исключения, если ее там нет, вас там нет
  • is_single() гораздо менее надежен, ir зависит от настройки глобального $wp_query, такие условные обозначения в первую очередь предназначены для использования внутри файлов шаблонов темы

Во-вторых, там не так много точка для условной загрузки. Сам WordPress делает это, но, честно говоря, это сомнительная победа (тем более с тем, как работает кэширование кода операции в реальности, которое должен использовать любой серьезный сайт) и много неудобств, когда вам действительно нужны функции в "неправильном" контексте.

Для классов это в основном обрабатывается с помощью автоматической загрузки. Однако для функций путь наименьшего сопротивления состоит в том, чтобы просто загрузить их и покончить с этим.

 2
Author: Rarst, 2014-08-25 16:27:10