Есть несколько способов получения данных из БД в WordPress. Рассмотрим основные на примерах ниже.
Содержание
Пример № 1
Первый способ довольно простой, приведу его в виде сниппета:
<table border="1">
<tr>
<th>Firstname</th>
<th>Lastname</th>
<th>Points</th>
</tr>
<?php
global $wpdb;
$result = $wpdb->get_results ( "SELECT * FROM studentData" );
foreach ( $result as $print ) {
?>
<tr>
<td><?php echo $print->firstname;?></td>
<td><?php echo $print->lastname;?></td>
<td><?php echo $print->cityname;?></td>
</tr>
<?php
}
?>
</table>
Используем объект $wpdb
и с помощью него делаем запрос к Базе.
Пример № 2
Теперь разберем более серьезную ситуацию на следующем примере. Допустим у нас есть таблица:
1. id (Primary*)
2. user_ip
3. post_id
4. time
В которой есть 4 строки:
id : 245
user_ip : 245.346.234.22
post_id : 24434
time : 255464
id : 345
user_ip : 245.346.234.22
post_id : 23456
time : 23467
id : 567
user_ip : 245.346.234.22
post_id : 57436
time : 5678
id : 234
user_ip : 245.356.134.22
post_id : 2356
time : 45678
Мы хотим научиться использовать запросы MySQL в WordPress и у нас есть пару вопросов из данного примера - как отобразить все данные таблицы, как заменить данные, если условие совпало? Например, мы хотим изменить время, где user_ip = 245.356.134.22
.
Чтобы получить данные из таблицы базы данных мы используем следующий код:
<?php
$results = $wpdb->get_results( "SELECT * FROM $table_name"); // Query to fetch data from database table and storing in $results
if(!empty($results)) // Checking if $results have some values or not
{
echo "<table width='100%' border='0'>"; // Adding <table> and <tbody> tag outside foreach loop so that it wont create again and again
echo "<tbody>";
foreach($results as $row){
$userip = $row->user_ip; //putting the user_ip field value in variable to use it later in update query
echo "<tr>"; // Adding rows of table inside foreach loop
echo "<th>ID</th>" . "<td>" . $row->id . "</td>";
echo "</tr>";
echo "<td colspan='2'><hr size='1'></td>";
echo "<tr>";
echo "<th>User IP</th>" . "<td>" . $row->user_ip . "</td>"; //fetching data from user_ip field
echo "</tr>";
echo "<td colspan='2'><hr size='1'></td>";
echo "<tr>";
echo "<th>Post ID</th>" . "<td>" . $row->post_id . "</td>";
echo "</tr>";
echo "<td colspan='2'><hr size='1'></td>";
echo "<tr>";
echo "<th>Time</th>" . "<td>" . $row->time . "</td>";
echo "</tr>";
echo "<td colspan='2'><hr size='1'></td>";
}
echo "</tbody>";
echo "</table>";
}
Чтобы обновить поле времени, если у нас есть какое-то условие, то:
<?php
if($userip==245.356.134.22){ //Checking if user_ip field have following value
$wpdb->update(
$table_name,
array(
'time' => 'YOUR NEW TIME' // Entring the new value for time field
),
array('%d') // Specify the datatype of time field
);
}
Если вы хотите проверить, существует ли IP-адрес, который вы собираетесь вставить в базу данных, или нет, проверьте его следующим образом:
<?php
global $wpdb,$ip;
$results = $wpdb->get_results( "SELECT user_ip FROM $table_name"); //query to fetch record only from user_ip field
$new_ip = 245.356.134.22; //New Ip address storing in variable
if(!empty($results))
{
foreach($results as $row){
$old_ip = $row->user_ip; // putting the value of user_ip field in variable
if($new_ip==$old_ip){ // comparing new ip address with old ip addresses
$ip = 'Already Exist'; // if ip already exist in database then assigning some string to variable
}
}
}
if($ip = 'Already Exist'){ // Checking if variable have some string (It has some string only when if IP already exist in database as checked in if condition by comparing old ips with new ip)
//Insert query according to Ip already exist in database
}else{
//Insert query according to Ip doesn't exist in database
}
В общем, наилучший способ использовать (пример):
<?php $myrows = $wpdb->get_results( "SELECT id, name FROM mytable" ); ?>
Изучите официальную документацию по wpdb
.
Этот класс используется для взаимодействия с базой данных без использования необработанных операторов SQL. По умолчанию WordPress использует этот класс для создания экземпляра глобального объекта $wpdb
, предоставляя доступ к базе данных WordPress.
Вы можете заменить этот класс на свой собственный, установив глобальную переменную $wpdb
в файле wp-content/db.php для вашего класса. Класс wpdb по-прежнему будет включен, поэтому вы можете расширить его или просто использовать свой собственный.
Пример № 3
WordPress имеет множество встроенных функций, которые используются для извлечения данных из базы данных, WP_Query()
— одна из наиболее часто используемых и мощных функций.
<?php
// The Query
$the_query = new WP_Query( $args );
// The Loop
if ( $the_query->have_posts() ) {
echo '<ul>';
while ( $the_query->have_posts() ) {
$the_query->the_post();
echo '<li>' . get_the_title() . '</li>';
}
echo '</ul>';
} else {
// no posts found
}
/* Restore original Post Data */
wp_reset_postdata();
Используйте данные методы, но предварительно всегда изучайте документацию.