#php #wordpress #constants #config
#php #wordpress #константы #конфигурация
Вопрос:
Мне нужно получить имя пользователя, пароль и т.д. из wp-config
файла для подключения к пользовательской базе данных PDO.
В настоящее время у меня есть другой файл, в котором у меня есть эта информация, но я хотел бы использовать только wp-config
.
Итак, как я могу прочитать различные свойства wp-config
?
Ответ №1:
Я даже определил свои собственные константы в wp-config.php и сумел извлечь их в теме без каких-либо включений.
wp-config.php
define('DEFAULT_ACCESS', 'employee');
functions.php
echo "DEFAULT_ACCESS :".DEFAULT_ACCESS;
выводит DEFAULT_ACCESS :сотрудник
Комментарии:
1. Да, именно этим я сейчас и занимаюсь.
Ответ №2:
Вот такой же код.
// ...Call the database connection settings
require( path to /wp-config.php );
// ...Connect to WP database
$dbc = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
if ( !$dbc ) {
die( 'Not Connected: ' . mysql_error());
}
// Select the database
$db = mysql_select_db(DB_NAME);
if (!$db) {
echo "There is no database: " . $db;
}
// ...Formulate the query
$query = "
SELECT *
FROM `wp_posts`
WHERE `post_status` = 'publish'
AND `post_password` = ''
AND `post_type` = 'post'
";
// ...Perform the query
$result = mysql_query( $query );
// ...Check results of the query and terminate the script if invalid results
if ( !$result ) {
$message = '<p>Invalid query.</p>' . "n";
$message .= '<p>Whole query: ' . $query ."</p> n";
die ( $message );
}
// Init a variable for the number of rows of results
$num_rows = mysql_num_rows( $result );
// Print the number of posts
echo "$num_rows Posts";
// Free the resources associated with the result set
if ( $result ) {
mysql_free_result( $result );
mysql_close();
}
Комментарии:
1. Это не проблема, у меня уже есть доступ к функциям WP. Какой код я должен использовать для доступа к содержимому
wp-config.php
?2. Я изменил свой ответ с помощью некоторого примера. Код. Спасибо!
3. Я не знаю, почему я не думал.
wp-config
использует константы, поэтому я могу получить к ним доступ «напрямую». Спасибо Вирджилу 🙂4. Это не работает для меня, потому что wp-config.php пытается потребовать другие вещи, которые вызывают уведомления и предупреждения PHP, и сценарий, похоже, заканчивается на «Невозможно изменить информацию заголовка»… Не уверен, что я делаю не так. Даже если я использую @ в строке require и добавляю error_reporting(0); перед ним тот же вывод терминала.
Ответ №3:
Я бы просто включил файл, тогда у меня был бы доступ к переменной в нем varibales.
<?php
require_once('wp-config.php');
echo DB_NAME;
?>
Это предполагает, что вы находитесь на том же сервере, и вы можете получить доступ wp-config.php через файловую систему.
Если вы делаете это для плагина, эти значения уже доступны. Вам не нужно будет снова включать файл.
Комментарии:
1. Спасибо за простой и понятный ответ 🙂
Ответ №4:
Вы можете получить все глобальные константы из wp-config.php просто повторите константу вот так:
<?php
echo DB_HOST;
echo DB_NAME;
echo DB_USER;
echo DB_PASSWORD;
Ответ №5:
Вот функция для чтения всех определений WP DB:
function get_wordpress_data() {
$content = @file_get_contents( '../wp-config.php' );
if( ! $content ) {
return false;
}
$params = [
'db_name' => "/define. ?'DB_NAME'. ?'(.*?)'. /",
'db_user' => "/define. ?'DB_USER'. ?'(.*?)'. /",
'db_password' => "/define. ?'DB_PASSWORD'. ?'(.*?)'. /",
'db_host' => "/define. ?'DB_HOST'. ?'(.*?)'. /",
'table_prefix' => "/\$table_prefix. ?'(. ?)'. /",
];
$return = [];
foreach( $params as $key => $value ) {
$found = preg_match_all( $value, $content, $result );
if( $found ) {
$return[ $key ] = $result[ 1 ][ 0 ];
} else {
$return[ $key ] = false;
}
}
return $return;
}
это возвращает массив, подобный этому:
array (size=5)
'db_name' => string '.........'
'db_user' => string '.........'
'db_password' => string '.........'
'db_host' => string 'localhost'
'table_prefix' => string 'wp_'
Комментарии:
1. Очень полезный фрагмент, однако большая часть этого кода здесь неуместна.
Ответ №6:
Если вы хотите подключиться к БД, для текущих версий PHP рекомендуется использовать расширение mysqli (расширение mysql устареет):
require_once ("../wp-config.php"); // path to wp-config depends on your file locatoin
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
if ($mysqli->connect_errno) {
echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
Ответ №7:
Просто добавьте необходимое wp-load.php досье. вы можете использовать все функции WordPress, такие как get_recent_posts() и многие другие…