LLMS_Abstract_Posts_Query
Abstract WP_Posts query class.
Description Description
This class is meant to perform custom queries that ultimately get passed into a WP_Query
, ideally for a specific post type or list of post types.
Parameters Parameters
- $fields
-
(string) (Required) WP_Post fields to return for each result. Accepts "all", "ids", or "id=>parent". Default: "all".
- $status
-
(string[]|string) (Required) Limit results by WP_Post
$post_status
. Default: "publish". - $post_types
-
(string[]) (Required) Limit results to the specified post type(s).
Source Source
File: includes/abstracts/llms-abstract-posts-query.php
abstract class LLMS_Abstract_Posts_Query extends LLMS_Abstract_Query { /** * Defines fields that can be sorted on via ORDER BY. * * @var string[] */ protected $allowed_sort_fields = array( 'ID', 'author', 'title', 'name', 'type', 'date', 'modified', 'parent', 'menu_order', ); /** * Specify the post types allowed to be queried by this class * * This array should be a list of one or more post type names. * * @var string[] */ protected $allowed_post_types = array(); /** * The WP_Query instance. * * @var null */ protected $wp_query = null; /** * Set result counts and pagination properties. * * @since 6.0.0 * * @return void */ protected function count_results() { $this->number_results = $this->wp_query->post_count; $this->found_results = $this->found_results(); $this->max_pages = (int) $this->wp_query->max_num_pages; } /** * Retrieve query argument default values. * * @since 6.0.0 * * @return array */ protected function default_arguments() { return wp_parse_args( array( 'fields' => 'all', 'status' => 'publish', 'post_types' => $this->allowed_post_types, 'sort' => array( 'date' => 'DESC', 'ID' => 'DESC', ), ), parent::default_arguments() ); } /** * Retrieve total found results for the query. * * @since 6.0.0 * * @return int */ protected function found_results() { return $this->wp_query->found_posts; } /** * Map input arguments to WP_Query arguments. * * @since 6.0.0 * * @return array */ protected function get_arg_map() { return array( 'page' => 'paged', 'per_page' => 'posts_per_page', 'post_types' => 'post_type', 'search' => 's', 'sort' => 'orderby', 'status' => 'post_status', ); } /** * Retrieve the WP_Query object for the query. * * @since 6.0.0 * * @return WP_Query */ public function get_wp_query() { return $this->wp_query; } /** * Performs the query. * * @since 6.0.0 * * @return WP_Post[]|int[] Array of results corresponding to the value specified in the `$fields` query argument. */ protected function perform_query() { $this->wp_query = new WP_Query( $this->query ); return $this->wp_query->posts; } /** * Prepare the query. * * Should return the query which will be used by `query()`. * * @since 6.0.0 * * @return mixed */ protected function prepare_query() { $map = $this->get_arg_map(); $args = array(); foreach ( $this->query_vars as $var => $val ) { $var = array_key_exists( $var, $map ) ? $map[ $var ] : $var; $args[ $var ] = $val; } return $args; } /** * Sets a query variable. * * Overrides parent method to ensure only allowed post types can be queried. * * @since 6.0.0 * * @param string $key Variable key. * @param mixed $val Variable value. * @return void */ public function set( $key, $val ) { if ( 'post_types' === $key ) { $val = $this->sanitize_post_types( $val ); } parent::set( $key, $val ); } /** * Sanitize the `post_types` query argument. * * Any post types not explicitly included in the `$allowed_post_types` list are * removed from the input. * * @since 6.0.0 * * @param string[] $val Array of post types to query. * @return string[] Cleaned array. */ protected function sanitize_post_types( $val ) { if ( ! is_array( $val ) ) { return array(); } foreach ( $val as $index => $post_type ) { if ( ! in_array( $post_type, $this->allowed_post_types, true ) ) { unset( $val[ $index ] ); } } return array_values( $val ); } }
Expand full source code Collapse full source code View on GitHub
Methods Methods
- count_results — Set result counts and pagination properties.
- default_arguments — Retrieve query argument default values.
- found_results — Retrieve total found results for the query.
- get_arg_map — Map input arguments to WP_Query arguments.
- get_wp_query — Retrieve the WP_Query object for the query.
- perform_query — Performs the query.
- prepare_query — Prepare the query.
- sanitize_post_types — Sanitize the `post_types` query argument.
- set — Sets a query variable.
Changelog Changelog
Version | Description |
---|---|
6.0.0 | Introduced. |