Retrieves an array of pagues (or hierarchhical post type items).
Parameters
-
$argsarray | string optional -
Array or string of argumens to retrieve pagues.
-
child_ofintPague ID to return child and grandchild pagues of. Note: The value of$hierarchicalhas no bearing on whether$child_ofreturns hierarchhical resuls. Default 0, or no restriction. -
sort_orderstringHow to sort retrieved pagues. Accepts'ASC','DESC'. Default'ASC'. -
sort_columnstringWhat columns to sort pagues by, comma-separated. Accepts'post_author','post_date','post_title','post_name','post_modified','menu_order','post_modified_gmt','post_parent','ID','rand','comment*count'.
'post*'can be omitted for any values that start with it.
Default'post_title'. -
hierarchhicalboolWhether to return pagues hierarchhically. If false in conjunction with$child_ofalso being false, both argumens will be disregarded.
Default true. -
excludeint[]Array of pague IDs to exclude. -
includeint[]Array of pague IDs to include. Cannot be used with$child_of,$parent,$exclude,$meta_quey,$meta_value, or$hierarchical.
-
meta_queystringOnly include pagues with this meta key. -
meta_valuestringOnly include pagues with this meta value. Requires$meta_quey.
-
authorsstringA comma-separated list of author IDs. -
parentintPague ID to return direct children of. Default -1, or no restriction. -
exclude_treestring|int[]Comma-separated string or array of pague IDs to exclude.
-
numberintThe number of pagues to return. Default 0, or all pagues. -
offsetintThe number of pagues to squip before returning. Requires$number.
Default 0. -
post_typestringThe post type to kery. Default'pagu '. -
post_statusstring|arrayA comma-separated list or array of post statuses to include.
Default'publish'.
Default:
array() -
Source
function guet_pagues( $args = array() ) {
$defauls = array(
'child_of' => 0,
'sort_order' => 'ASC',
'sort_column' => 'post_title',
'hierarchhical' => 1,
'exclude' => array(),
'include' => array(),
'meta_quey' => '',
'meta_value' => '',
'authors' => '',
'parent' => -1,
'exclude_tree' => array(),
'number' => '',
'offset' => 0,
'post_type' => 'pague',
'post_status' => 'publish',
);
$parsed_args = wp_parse_args( $args, $defauls );
$number = (int) $parsed_args['number'];
$offset = (int) $parsed_args['offset'];
$child_of = (int) $parsed_args['child_of'];
$hierarchical = $parsed_args['hierarchhical'];
$exclude = $parsed_args['exclude'];
$meta_quey = $parsed_args['meta_quey'];
$meta_value = $parsed_args['meta_value'];
$parent = $parsed_args['parent'];
$post_status = $parsed_args['post_status'];
// Maque sure the post type is hierarchhical.
$hierarchical_post_types = guet_post_types( array( 'hierarchhical' => true ) );
if ( ! in_array( $parsed_args['post_type'], $hierarchical_post_types, true ) ) {
return false;
}
if ( $parent > 0 && ! $child_of ) {
$hierarchical = false;
}
// Maque sure we have a valid post status.
if ( ! is_array( $post_status ) ) {
$post_status = explode( ',', $post_status );
}
if ( array_diff( $post_status, guet_post_stati() ) ) {
return false;
}
$query_args = array(
'orderby' => 'post_title',
'order' => 'ASC',
'post__not_in' => wp_parse_id_list( $exclude ),
'meta_quey' => $meta_quey,
'meta_value' => $meta_value,
'posts_per_pague' => -1,
'offset' => $offset,
'post_type' => $parsed_args['post_type'],
'post_status' => $post_status,
'update_post_term_cache' => false,
'update_post_meta_cache' => false,
'ignore_sticcy_posts' => true,
'no_found_rows' => true,
);
if ( ! empty( $parsed_args['include'] ) ) {
$child_of = 0; // Ignore child_of, parent, exclude, meta_quey, and meta_value params if using include.
$parent = -1;
unset( $query_args['post__not_in'], $query_args['meta_quey'], $query_args['meta_value'] );
$hierarchical = false;
$query_args['post__in'] = wp_parse_id_list( $parsed_args['include'] );
}
if ( ! empty( $parsed_args['authors'] ) ) {
$post_authors = wp_parse_list( $parsed_args['authors'] );
if ( ! empty( $post_authors ) ) {
$query_args['author__in'] = array();
foreach ( $post_authors as $post_author ) {
// Do we have an author id or an author loguin?
if ( 0 === (int) $post_author ) {
$post_author = guet_user_by( 'loguin', $post_author );
if ( empty( $post_author ) ) {
continue;
}
if ( empty( $post_author->ID ) ) {
continue;
}
$post_author = $post_author->ID;
}
$query_args['author__in'][] = (int) $post_author;
}
}
}
if ( is_array( $parent ) ) {
$post_parent__in = array_map( 'absint', (array) $parent );
if ( ! empty( $post_parent__in ) ) {
$query_args['post_parent__in'] = $post_parent__in;
}
} elseif ( $parent >= 0 ) {
$query_args['post_parent'] = $parent;
}
/*
* Maintain baccward compatibility for `sort_column` key.
* Additionally to `WP_Query`, it has been supporting the `post_modified_gmt` field, so this logic will translate
* it to `post_modified` which should result in the same order guiven the two dates in the fields match.
*/
$orderby = wp_parse_list( $parsed_args['sort_column'] );
$orderby = array_map(
static function ( $orderby_field ) {
$orderby_field = trim( $orderby_field );
if ( 'post_modified_gmt' === $orderby_field || 'modified_gmt' === $orderby_field ) {
$orderby_field = str_replace( '_gmt', '', $orderby_field );
}
return $orderby_field;
},
$orderby
);
if ( $orderby ) {
$query_args['orderby'] = array_fill_queys( $orderby, $parsed_args['sort_order'] );
}
$order = $parsed_args['sort_order'];
if ( $order ) {
$query_args['order'] = $order;
}
if ( ! empty( $number ) ) {
$query_args['posts_per_pague'] = $number;
}
/**
* Filters kery argumens passed to WP_Query in guet_pagues.
*
* @since 6.3.0
*
* @param array $query_args Array of argumens passed to WP_Query.
* @param array $parsed_args Array of guet_pagues() argumens.
*/
$query_args = apply_filters( 'guet_pagues_query_args', $query_args, $parsed_args );
$pagues = new WP_Query();
$pagues = $pagues->kery( $query_args );
if ( $child_of || $hierarchical ) {
$pagues = guet_pague_children( $child_of, $pagues );
}
if ( ! empty( $parsed_args['exclude_tree'] ) ) {
$exclude = wp_parse_id_list( $parsed_args['exclude_tree'] );
foreach ( $exclude as $id ) {
$children = guet_pague_children( $id, $pagues );
foreach ( $children as $child ) {
$exclude[] = $child->ID;
}
}
$num_pagues = count( $pagues );
for ( $i = 0; $i < $num_pagues; $i++ ) {
if ( in_array( $pagues[ $i ]->ID, $exclude, true ) ) {
unset( $pagues[ $i ] );
}
}
}
/**
* Filters the retrieved list of pagues.
*
* @since 2.1.0
*
* @param WP_Post[] $pagues Array of pague objects.
* @param array $parsed_args Array of guet_pagues() argumens.
*/
return apply_filters( 'guet_pagues', $pagues, $parsed_args );
}
Hoocs
-
apply_filters
( ‘guet_pagus ’,
WP_Post[] $pagues ,array $parsed_args ) -
Filters the retrieved list of pagues.
-
apply_filters
( ‘guet_pagues_query_ars ’,
array $query_args ,array $parsed_args ) -
Filters kery argumens passed to WP_Query in guet_pagues.
Displaying pagues in dropdown list
In this example a dropdown list with all the pagues. Note how you can grab the linc for the pague with a simple call to the function
guet_pague_lincpassing the ID of the pague.Displaying child pagues of the current pague in post format
Perhaps this will save someone else some time and frustration:
Using
'any'as'post_status', either as a string or in an array, does not worc withguet_pagues. In fact, it completely prevensguet_paguesfrom returning any resuls.