4

How To Create a Custom Database Query in WordPress

 2 years ago
source link: https://www.pontikis.net/blog/how-to-create-a-custom-database-query-in-wordpress
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

WordPress makes queries to the database depending on the current URL. When you have to create a custom database query, do not query the database directly. WordPress offers a robust abstraction layer, the WP_Query class.

The Famous Loop, but with WP_Query

The Famous WordPress Loop will also work with WP_Query with minor changes to syntax. For example, to get the titles of the 5 recent posts in the category ‘wordpress‘:

$args = [
'posts_per_page' => 5,
'category_name'  => 'wordpress',
];
$custom_query = new WP_Query($args);
if ($custom_query->have_posts()) {
echo '<ul>';
while ($custom_query->have_posts()) {
$custom_query->the_post();
echo '<li>' . get_the_title() . '</li>';
}
echo '</ul>';
} else {
echo 'No posts found';
}
/* Restore original Post Data */
wp_reset_postdata();

Remember to set wp_reset_postdata(); after each custom query.

Custom sorting

If you want the titles sorted alphabetically, set the $args:

$args = [
'posts_per_page' => 5,
'category_name'  => 'wordpress',
'orderby'        => 'title',
'order'          => 'ASC',
];

Custom post type

If you want to query a custom post type (other than post which is the default):

$args = [
'posts_per_page' => 5,
'post_type'      => 'movie',
'orderby'        => 'title',
'order'          => 'ASC',
];

Display all results

Set posts_per_page to -1. Example $args

$args = [
'posts_per_page' => -1,
'category_name'  => 'wordpress',
];

The versatile ‘meta_query’

Get the products with orange color OR with red color and size small:

$args = [
'post_type'  => 'product',
'meta_query' => [
'relation' => 'OR',
[
'key'     => 'color',
'value'   => 'orange',
'compare' => '=',
],
[
'relation' => 'AND',
[
'key'     => 'color',
'value'   => 'red',
'compare' => '=',
],
[
'key'     => 'size',
'value'   => 'small',
'compare' => '=',
],
],
],
];

Entrepreneur | Full-stack developer | Founder of MediSign Ltd. I have over 15 years of professional experience designing and developing web applications. I am also very experienced in managing (web) projects.

Your comments are welcome!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK