Astra_Target_Rules_Fields::astra_get_posts_by_query()
Ajax handeler to return the posts based on the search query.
Description
When searching for the post/pages only titles are searched for.
Source
File: classes/modules/target-rule/class-astra-target-rules-fields.php
public function astra_get_posts_by_query() {
check_ajax_referer( 'astra-addon-get-posts-by-query', 'nonce' );
$search_string = isset( $_POST['q'] ) ? sanitize_text_field( $_POST['q'] ) : ''; // phpcs:ignore WordPress.Security.NonceVerification.Missing
$data = array();
$result = array();
$args = array(
'public' => true,
'_builtin' => false,
);
$output = 'names'; // names or objects, note names is the default.
$operator = 'and'; // also supports 'or'.
$post_types = get_post_types( $args, $output, $operator );
$post_types['Posts'] = 'post';
$post_types['Pages'] = 'page';
foreach ( $post_types as $key => $post_type ) {
$data = array();
add_filter( 'posts_search', array( $this, 'search_only_titles' ), 10, 2 );
$query = new WP_Query(
array(
's' => $search_string,
'post_type' => $post_type,
'posts_per_page' => - 1,
)
);
if ( $query->have_posts() ) {
while ( $query->have_posts() ) {
$query->the_post();
$title = get_the_title();
$title .= ( 0 != $query->post->post_parent ) ? ' (' . get_the_title( $query->post->post_parent ) . ')' : '';
$id = get_the_id();
$data[] = array(
'id' => 'post-' . $id,
'text' => $title,
);
}
}
if ( is_array( $data ) && ! empty( $data ) ) {
$result[] = array(
'text' => $key,
'children' => $data,
);
}
}
$data = array();
wp_reset_postdata();
$args = array(
'public' => true,
);
$output = 'objects'; // names or objects, note names is the default.
$operator = 'and'; // also supports 'or'.
$taxonomies = get_taxonomies( $args, $output, $operator );
foreach ( $taxonomies as $taxonomy ) {
$terms = get_terms(
$taxonomy->name,
array(
'orderby' => 'count',
'hide_empty' => 0,
'name__like' => $search_string,
)
);
$data = array();
$label = ucwords( $taxonomy->label );
if ( ! empty( $terms ) ) {
foreach ( $terms as $term ) {
$term_taxonomy_name = ucfirst( str_replace( '_', ' ', $taxonomy->name ) );
$data[] = array(
'id' => 'tax-' . $term->term_id,
'text' => $term->name . ' archive page',
);
$data[] = array(
'id' => 'tax-' . $term->term_id . '-single-' . $taxonomy->name,
'text' => 'All singulars from ' . $term->name,
);
}
}
if ( is_array( $data ) && ! empty( $data ) ) {
$result[] = array(
'text' => $label,
'children' => $data,
);
}
}
// return the result in json.
wp_send_json( $result );
}
Expand full source code Collapse full source code View on Trac
Changelog
| Version | Description |
|---|---|
| 1.0.0 | Introduced. |