garetclaborn
  • 0
Новичок

Таблица стилей PHP не может использовать стандартные функции WP

  • 0

Я включаю определенный файл PHP в качестве таблицы стилей, используя

<link href="<? echo THEME_CSS;?>/styles.php" media="screen" rel="stylesheet" type="text/css">

Недавно я дошел до того, что мне нужно было использовать TEMPLATEPATH и различные встроенные функции WordPress. Увы, я получаю

«Предупреждение: require_once(TEMPLATEPATH/framework/theme.php) [function.require-once]:» и аналогичные ошибки, указывающие на то, что этот файл не использует преимущества среды WordPress в целом.

Если даже WordPress здесь работал правильно, то это TEMPLATEPATH должен быть фактический путь к шаблону. Кроме того, другие функции, такие как get_bloginfo(), и т.д.. не найдены.

Могу ли я каким-то образом инициализировать WordPress явно, чтобы позволить мне извлекать параметры из панелей администратора?

Share
  1. Если вы ссылаетесь на файл, он открывается как новый файл. Поэтому, если вы явно не включите wp_load.php или что-то в этот файл стилей, WordPress будет недоступен.

    Загрузка WP снова и снова на одной странице кажется мне полным излишеством. Почему бы вам просто не включить свой файл стиля в качестве встроенной таблицы стилей, если вам нужно использовать движок WP?

    Сделайте что-то вроде этого:

    <style>
    <?php include_once('styles.php'); ?>
    </style>
    
    • 0
    • Ну, в основном это просто потому, что большое количество встроенных стилей кажется плохим кодом в моей книге. Однако ваше несогласие с wp_load подсказало мне, что я ищу. Насколько это на самом деле плохо? Кажется, он загружается очень быстро, и я думаю, что большая его часть будет кэширована с первой загрузки. Неправда? По крайней мере, теперь require_once для wp-blog-header.php работы отлично подходит для достижения прогресса, если я не могу найти более элегантное решение. Рассмотрю встраивание в конце.

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

      • 0
    • Собственно, это первое, что я попробовал. К сожалению, я говорю, что все основные функции кажутся недоступными. т.е.. в этом случае я получаю Fatal error: Call to undefined function get_bloginfo()

      • 0
    • Черт возьми! Хорошо, мы использовали файл до того, как что-либо еще было проанализировано в основном… Этот файл немного тяжеловат для меня, и, исходя из моего опыта, поиск этого материала довольно утомителен. Что меня смущает, так это то, что если вы вызываете файл из своего шаблона, я бы не подумал, что он должен вести себя таким образом. Не могли бы вы уточнить, как и когда вы используете этот файл.

      • 0
    • Да, это довольно запутанно. Я использую вызов <link> после остальной части моего заголовка, самое последнее перед </head> . До этого есть множество вызовов функций WP и переменных окружения. Я думаю, это должно быть потому, что я использую таблицу стилей на основе php, но я определенно делал это раньше. Есть ли способ явно инициализировать WordPress?

      • 0
    • Как я могу переписывать статическую таблицу стилей каждый раз при изменении параметров? Будет ли это так же просто, как просто добавить функцию сохранения файла в поле «Сохранить изменения»?

      • 0
    • @ Гарет, ты действительно уверен, что тебе это нужно? Ваши файлы CSS и изображения не находятся в одном и том же каталоге шаблонов, что позволяет использовать относительные пути?… Или у вас есть и другие динамические настройки?

      • 0
    • @Pekka: с изображениями проблем нет, у меня есть цвета, границы, размещение… все виды.

      • 0
    • Гарет, я вижу. Являются ли они динамическими для каждого пользователя? Откуда берутся динамические данные?

      • 0
    • @Гарет хммм. Как насчет того, чтобы записать динамические данные в статический файл CSS и добавить код PHP, который делает это, к правильному действию или хуку?

      • 0
  2. Вы можете рассмотреть возможность использования некоторых альтернативных функций для возврата пути, который вы ищете, например:

    //this one may return as well as some unwatned theme-specific stuff
    get_bloginfo('template_directory');
    
    //this returns the pure url
    get_bloginfo('template_url');
    

    или

    //basically the same as template_directory, may come over with extra info
    get_bloginfo('stylesheet_directory');
    
    //returns the url followed by style.css
    get_bloginfo('stylesheet_url');
    

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

    • 0
  3. Концепция таблиц стилей, управляемых PHP, неоптимальна, потому что интерпретатор PHP — и загрузчик WordPress — жирный! — должен запускаться для каждого запроса CSS.

    Если возможно, рассмотрите возможность использования относительных путей — обратите внимание, что если ваша таблица стилей и изображение находятся в одном и том же каталоге шаблонов, такие вещи, как

    ../images/image.gif
    

    буду работать! Пути в таблицах стилей относятся к фактическому местоположению таблицы стилей, а не к странице.

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

    <link rel="stylesheet" href="....." type="text/css">
    <style type="text/css">
     .class { background-image: url(<?php echo $xyz; ?>) }
    </style>
    
    • 0

Оставить ответ

You must login to add an answer.