WordPress / WordPress/developer-blog-content
Tutorial: When you need query vars
Open
@oglekler is already working on this.
Since Jan 9, 2025.
flow: approved
plugin development
Tutorial
- Dominant language
- No language data
- Stars
- 50
- Forks
- 8
- PR merge metrics
- No merged PRs in 30d
Description
Discussed in https://github.com/WordPress/developer-blog-content/discussions/358
Originally posted by OlaIola December 9, 2024
I found out that the idea of query vars is difficult to grasp, and even experienced developers have difficulties with it.
I tried to explain the correct usage with the following example from the core but didn't succeed.
So, hopefully, there is someone who can explain it better.
add_rewrite_tag( '%sitemap%', '([^?]+)' );
add_rewrite_rule( '^wp-sitemap\.xml$', 'index.php?sitemap=index', 'top' );
add_rewrite_rule(
'^wp-sitemap-([a-z]+?)-(\d+?)\.xml$',
'index.php?sitemap=$matches[1]&paged=$matches[2]',
'top'
);
// Some other place
if ( get_query_var( 'sitemap' ) ) {
$sitemap = sanitize_text_field( get_query_var( 'sitemap' ) );
// ...
}
So, it looks like this idea needs more explanation about its usage and when it is just unnecessary haste.
Example I have:
file1.php
<?php
const ACTIONS_FEATURED_QUERY = 'actions_featured';
const ACTIONS_FEATURED_QUERY_ENABLED = true;
add_filter( 'query_vars', 'actions_add_query_vars' );
add_action( 'pre_get_posts', 'actions_modify_featured_query' );
function actions_add_query_vars( $vars ) {
$vars[] = ACTIONS_FEATURED_QUERY;
return $vars;
}
function actions_modify_featured_query( WP_Query $query ): void {
if ( ! actions_is_featured_query( $query ) ) {
return;
}
$meta_query = [
'relation' => 'AND',
[
ACTION_FEATURED_META . '_clause' => [
'key' => ACTION_FEATURED_META,
'compare' => '=',
'type' => 'NUMERIC',
'value' => 1,
],
ACTION_FEATURED_PRIORITY_META . '_clause' => [
'key' => ACTION_FEATURED_PRIORITY_META,
'compare' => 'EXISTS',
'type' => 'NUMERIC',
],
ACTION_START_META . '_clause' => [
'key' => ACTION_START_META,
'compare' => 'EXISTS',
'type' => 'NUMERIC',
],
[
'key' => ACTION_FINISH_META,
'value' => wp_date( 'Ymd' ),
'compare' => '>=',
],
]
];
$orderby = [
ACTION_FEATURED_PRIORITY_META . '_clause' => 'DESC',
ACTION_START_META . '_clause' => 'ASC',
];
$query->set( 'post_type', CPT_ACTIONS );
$query->set( 'posts_per_page', -1 );
$query->set( 'meta_query', $meta_query );
$query->set( 'orderby', $orderby );
}
file2.php
<?php
//
function actions_is_featured_query( WP_Query $query ): bool {
return ACTIONS_FEATURED_QUERY_ENABLED === $query->get( ACTIONS_FEATURED_QUERY );
}
function actions_get_featured(): array {
$query = new WP_Query(
[
ACTIONS_FEATURED_QUERY => ACTIONS_FEATURED_QUERY_ENABLED,
]
);
return $query->have_posts() ? $query->posts : [];
}
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.