Wordpress - Apache FollowSymlinks для тем, использующих Mac lion - PullRequest
1 голос
/ 22 января 2012

Я установил WordPress локально на моем Mac (лев) После включения vhosts я создал запись в моем файле hosts, чтобы указать «wordpress» на 127.0.0.1

Мой vhosts.conf содержит:

<VirtualHost *:80>
    DocumentRoot "/Users/alex/Sites/wordpress"
    ServerName wordpress
    <Directory />
            Options FollowSymLinks  
            AllowOverride None
    </Directory>
</VirtualHost>

Это работает, и я могу получить доступ к установке WordPress по умолчанию, без проблем.

По сути, внутри моей папки wp-content / themes я поместил символическую ссылку (например)
/ Пользователи / Alex / Проекты / SomeTheme /

Эта папка содержит файлы моей темы

Однако тема не обнаружена (не отображается в WP admin)
Если я скопирую папку в wp-content / themes, то это сработает. Симлинки не соблюдаются

В моем /etc/apache2/users/alex.conf у меня есть:

<Directory "/Users/alex/Sites/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

Я явно что-то упускаю где-то ....

Ответы [ 2 ]

4 голосов
/ 22 января 2012

Wordpress имеет проблемы с использованием символических ссылок. Это связано с тем, как PHP обрабатывает магическую константу __FILE__. В PHP __FILE__ возвращает абсолютный путь к файлу, внутри которого он запускается. К сожалению, в этом процессе игнорируются символические ссылки. (т. е. пока вы можете обращаться к файлу через /opt/wordpress/instance/wp-content/sym-themes/pretty, а файл на самом деле находится в /opt/content/themes/pretty, когда вызывается __FILE__ вместо возврата /opt/wordpress/instance/wp-content/sym-themes/pretty, что и ожидается в Wordpress, он возвращает /opt/content/themes/pretty.

Wordpress использует интенсивно __FILE__ в своем коде, а также функцию basename() для сравнения корневого каталога wordpress с каталогом темы, чтобы получить имя каталога темы для таких вещей, как синтаксический анализ файлов. Из-за того, как PHP обрабатывает магическую константу __FILE__, Wordpress пытается сопоставить пути, но поскольку они являются двумя разными, он просто добавляет один путь к другому, и в итоге вы получаете путь к чему-то, что не существует.

Если вы не планируете делать ОЧЕНЬ много кодов, я настоятельно рекомендую не использовать символические ссылки нигде в структуре wordpress.

1 голос
/ 23 января 2012

Как указал @Drahkar, символические ссылки в WordPress сложны. Чтобы изменить каталог темы, используйте простой плагин:

add_filter( 'theme_root', 'sp8963532_theme_root' );
function sp8963532_theme_root()
{
    return 'FULL_LOCAL_PATH_TO_YOUR_THEMES_DIRECTORY';
}

add_filter( 'theme_root_uri', 'sp8963532_theme_root_uri' );
function sp8963532_theme_root_uri()
{
    return 'URI_TO_YOUR_THEMES_DIRECTORY';
}

Скопируйте код в файл и поместите файл в wp-content/mu-plugins/.

...