Files
ultimatemember/includes/ajax/class-pages.php
T
Mykyta Synelnikov 1d4d1e4f2f Update Ultimate Member to version 2.10.6
This release adds multiple enhancements, including WebP support, new filter hooks, license debugging, and improved extension upgrades. It also fixes issues like numeric field filtering, profile link handling, and dependencies with Action Scheduler. Cached assets should be regenerated post-upgrade.
2025-09-27 11:17:08 +03:00

102 lines
3.0 KiB
PHP

<?php
namespace um\ajax;
use WP_Query;
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* Class Pages
*
* @package um\ajax
*/
class Pages {
/**
* Pages constructor.
*/
public function __construct() {
add_action( 'wp_ajax_um_get_pages_list', array( $this, 'get_pages_list' ) );
}
/**
* AJAX callback for getting the pages list
*/
public function get_pages_list() {
check_ajax_referer( 'um-admin-nonce', 'nonce' );
// we will pass post IDs and titles to this array
$return = array();
$pre_result = apply_filters( 'um_admin_settings_get_pages_list', false );
if ( false === $pre_result ) {
$query_args = array(
'post_type' => 'page',
'post_status' => 'publish', // if you don't want drafts to be returned
'ignore_sticky_posts' => 1,
'posts_per_page' => 10, // how much to show at once
'paged' => ! empty( $_GET['page'] ) ? absint( $_GET['page'] ) : 1,
'orderby' => 'title',
'order' => 'asc',
);
if ( ! empty( $_GET['search'] ) ) {
$query_args['s'] = sanitize_text_field( $_GET['search'] ); // the search query
}
$field_id = ! empty( $_GET['field_id'] ) ? sanitize_text_field( $_GET['field_id'] ) : null;
if ( 'form__um_register_use_gdpr_content_id' === $field_id ) {
$predefined_ids = array();
$predefined_pages = array_keys( UM()->config()->get( 'predefined_pages' ) );
foreach ( $predefined_pages as $slug ) {
$p_id = um_get_predefined_page_id( $slug );
if ( empty( $p_id ) ) {
continue;
}
$predefined_ids[] = $p_id;
}
$predefined_ids = array_unique( $predefined_ids );
if ( ! empty( $predefined_ids ) ) {
$query_args['post__not_in'] = $predefined_ids;
}
}
/**
* Filters WP_Query arguments for getting pages visible in the dropdown fields in UM Settings.
*
* @since 2.10.6
* @hook um_admin_settings_get_pages_list_args
*
* @param {array} $query_args Get pages WP_Query arguments.
* @param {string} $field_id Dropdown field ID.
*
* @return {array} Get pages WP_Query arguments.
*/
$query_args = apply_filters( 'um_admin_settings_get_pages_list_args', $query_args, $field_id );
$search_results = new WP_Query( $query_args );
if ( $search_results->have_posts() ) {
while ( $search_results->have_posts() ) {
$search_results->the_post();
// shorten the title a little
$title = ( mb_strlen( $search_results->post->post_title ) > 50 ) ? mb_substr( $search_results->post->post_title, 0, 49 ) . '...' : $search_results->post->post_title;
$title = sprintf( __( '%s (ID: %s)', 'ultimate-member' ), $title, $search_results->post->ID );
$return[] = array( $search_results->post->ID, $title ); // array( Post ID, Post Title )
}
}
$return['total_count'] = $search_results->found_posts;
} else {
// got already calculated posts array from 3rd-party integrations (e.g. WPML, Polylang)
$return = $pre_result;
}
wp_send_json( $return );
}
}