WP CLI --path не работает: решение проблемы
WP-CLI не работает при добавлении параметра --path
me@host:~$ wp plugin status --path=`/home/me/domains/example.com/public_html`
-bash: /home/me/domains/example.com/public_html: is a directory
Error: This does not seem to be a WordPress install.
Pass --path=`path/to/wordpress` or run `wp core download`.
Если я перехожу в директорию через cd
и затем запускаю команду без указания пути, то всё работает.
У меня установлен wp-cli версии 0.25
Обновление
Дополнительная информация при добавлении флага --debug
Debug (bootstrap): No readable global config found (0.031s)
Debug (bootstrap): No project config found (0.032s)
Debug (bootstrap): No package autoload found to load. (0.39s)
Debug (bootstrap): ABSPATH defined: /home/me/domains/example.com/public_html/ (0.39s)
Кто-нибудь знает, что я делаю не так?

Как если бы вы пытались выполнить:
wp plugin status --path=$(/home/me/domains/example.com/public_html)
потому что содержимое внутри обратных кавычек вычисляется.
Вот хорошая статья об использовании обратных кавычек в командной строке.
Позвольте мне процитировать @rozcietrzewiacz:
Обратная кавычка — это не знак цитирования, она имеет особое значение. Всё, что вы пишете между обратными кавычками, вычисляется (выполняется) оболочкой перед основной командой [...]
Альтернативы:
wp plugin status --path=/home/me/domains/example.com/public_html
wp plugin status --path="/home/me/domains/example.com/public_html"
wp plugin status --path='/home/me/domains/example.com/public_html'
Когда я использую настройку wp-skeleton, мне нужно указывать папку ядра wp/
, а не папку выше, содержащую файл wp-config.php
.
Обновление:
В классе Runner есть:
/**
* Существуют ли файлы ядра WordPress?
*
* @return bool
*/
private function wp_exists() {
return is_readable( ABSPATH . 'wp-includes/version.php' );
}
и когда мы устанавливаем ABSPATH
с помощью
--path=/home/me/domains/example.com/public_html/
выглядит так, как будто мы используем:
/**
* Установить корень WordPress по заданному пути.
*
* @param string $path
*/
private static function set_wp_root( $path ) {
define( 'ABSPATH', rtrim( $path, '/' ) . '/' );
WP_CLI::debug( 'ABSPATH определен: ' . ABSPATH, 'bootstrap' );
$_SERVER['DOCUMENT_ROOT'] = realpath( $path );
}
и затем:
is_readable( '/home/me/domains/example.com/public_html/wp-includes/version.php' )
возвращает false, потому что при настройке wp-skeleton корневая директория:
/home/me/domains/example.com/public_html/wp/
Этот тест необходим, но недостаточен. Есть и другие тесты, например, метод Runner::find_wp_root()
.
Причина, по которой это работает, когда OP находится внутри:
/home/me/domains/example.com/public_html/
может быть связана с методом Runner::extract_subdir_path()
, который сканирует содержимое файла index.php
с помощью:
$index_code = file_get_contents( $index_path );
if ( !preg_match(
'|^\s*require\s*\(?\s*(.+?)/wp-blog-header\.php([\'"])|m',
$index_code,
$matches
)
) {
return false;
}
чтобы получить подкаталог, в котором находится файл wp-blog-header.php
, и установить его как $wp_path
.

Очень раздражает, что wp-cli предлагает это в ошибке. Но ни один из вариантов не работает :(

Да, это странно. Вы также получаете точно такие же ошибки при попытке альтернативных вариантов? @janw

То же самое, но без строки -bash: /home/me/domains/example.com/public_html/: is a directory
.

да, я ожидал, что ошибка -bash исчезнет. Когда я использую настройку wp-skeleton, мне нужно указывать на папку ядра wp/, а не на папку выше, содержащую файл wp-config.php. Не уверен, используешь ли ты какую-то особую настройку @janw

Да, я использую скелетон. Добавление ...mple.com/public_html/wp
действительно работает. Если ты добавишь эту часть, я приму ответ
