You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
224 lines
4.6 KiB
PHP
224 lines
4.6 KiB
PHP
<?php
|
|
/**
|
|
* The Schema AJAX
|
|
*
|
|
* @since 1.0.0
|
|
* @package RankMath
|
|
* @subpackage RankMathPro
|
|
* @author MyThemeShop <admin@mythemeshop.com>
|
|
*/
|
|
|
|
namespace RankMathPro\Schema;
|
|
|
|
use MyThemeShop\Helpers\Param;
|
|
|
|
defined( 'ABSPATH' ) || exit;
|
|
|
|
/**
|
|
* Ajax class.
|
|
*/
|
|
class Ajax {
|
|
|
|
use \RankMath\Traits\Hooker;
|
|
use \RankMath\Traits\Ajax;
|
|
|
|
/**
|
|
* The Constructor.
|
|
*/
|
|
public function __construct() {
|
|
$this->ajax( 'fetch_from_url', 'fetch_from_url' );
|
|
$this->ajax( 'get_conditions_data', 'get_conditions_data' );
|
|
}
|
|
|
|
/**
|
|
* Fetch from url.
|
|
*/
|
|
public function fetch_from_url() {
|
|
$this->verify_nonce( 'rank-math-ajax-nonce' );
|
|
$this->has_cap_ajax( 'general' );
|
|
|
|
$url = Param::post( 'url', false, FILTER_VALIDATE_URL );
|
|
if ( ! $url || strtolower( substr( $url, 0, 4 ) ) !== 'http' ) {
|
|
$this->error( esc_html__( 'No url found.', 'rank-math-pro' ) );
|
|
}
|
|
|
|
$parser = new Parser();
|
|
$output = $parser->from_url( $url );
|
|
|
|
if ( is_wp_error( $output ) ) {
|
|
$this->error( $output->get_error_message() );
|
|
}
|
|
|
|
$this->success( [ 'json' => $output ] );
|
|
}
|
|
|
|
/**
|
|
* Get posts/terms/author data.
|
|
*/
|
|
public function get_conditions_data() {
|
|
$this->verify_nonce( 'rank-math-ajax-nonce' );
|
|
$this->has_cap_ajax( 'general' );
|
|
|
|
$method = 'singular' === Param::get( 'category', false ) ? 'get_singular' : 'get_terms';
|
|
$data = $this->{$method}(
|
|
Param::get( 'userInput', false ),
|
|
Param::get( 'type', false ),
|
|
Param::get( 'value', false ),
|
|
Param::get( 'postTaxonomy', false )
|
|
);
|
|
|
|
$this->success( [ 'data' => $data ] );
|
|
}
|
|
|
|
/**
|
|
* Get posts by searched string & post type.
|
|
*
|
|
* @param string $search Searched String.
|
|
* @param string $type Post Type.
|
|
* @param int $value Object ID.
|
|
* @param int $taxonomy Is taxonomy.
|
|
*/
|
|
private function get_singular( $search, $type, $value, $taxonomy ) {
|
|
if ( 'null' === $search && $value ) {
|
|
|
|
if ( $taxonomy && taxonomy_exists( $taxonomy ) ) {
|
|
$data = [
|
|
'value' => $value,
|
|
'title' => get_term( $value )->name,
|
|
];
|
|
} else {
|
|
$data = [
|
|
'value' => $value,
|
|
'title' => get_the_title( $value ),
|
|
];
|
|
}
|
|
|
|
return $data;
|
|
}
|
|
|
|
if ( $taxonomy && 'all' !== $taxonomy ) {
|
|
$terms = get_terms(
|
|
[
|
|
'taxonomy' => $taxonomy,
|
|
'fields' => 'id=>name',
|
|
'search' => $search,
|
|
'hide_empty' => false,
|
|
]
|
|
);
|
|
|
|
if ( empty( $terms ) ) {
|
|
return [];
|
|
}
|
|
|
|
foreach ( $terms as $id => $name ) {
|
|
$data[] = [
|
|
'value' => $id,
|
|
'title' => $name,
|
|
];
|
|
}
|
|
|
|
return $data;
|
|
}
|
|
|
|
$posts = get_posts(
|
|
[
|
|
'post_type' => $type,
|
|
's' => $search,
|
|
'numberposts' => -1,
|
|
]
|
|
);
|
|
|
|
if ( empty( $posts ) ) {
|
|
return [];
|
|
}
|
|
|
|
$data = [];
|
|
foreach ( $posts as $post ) {
|
|
$data[] = [
|
|
'value' => $post->ID,
|
|
'title' => $post->post_title,
|
|
];
|
|
}
|
|
|
|
return $data;
|
|
}
|
|
|
|
/**
|
|
* Get terms by searched string and taxonomy.
|
|
*
|
|
* @param string $search Searched String.
|
|
* @param string $type Object type.
|
|
* @param int $value Term ID.
|
|
* @param string $taxonomy Taxonomy name.
|
|
*/
|
|
private function get_terms( $search, $type, $value, $taxonomy ) {
|
|
$data = [];
|
|
if ( 'author' === $type ) {
|
|
return $this->get_authors( $search, $value );
|
|
}
|
|
|
|
if ( 'null' === $search && $value ) {
|
|
$term = get_term_by( 'id', absint( $value ), $type );
|
|
return [
|
|
'value' => $value,
|
|
'title' => ! empty( $term ) ? $term->name : '',
|
|
];
|
|
}
|
|
|
|
$terms = get_terms(
|
|
[
|
|
'taxonomy' => $type,
|
|
'search' => $search,
|
|
'hide_empty' => false,
|
|
]
|
|
);
|
|
|
|
if ( ! empty( $terms ) ) {
|
|
foreach ( $terms as $term ) {
|
|
$data[] = [
|
|
'value' => $term->term_id,
|
|
'title' => $term->name,
|
|
];
|
|
}
|
|
}
|
|
|
|
return $data;
|
|
}
|
|
|
|
/**
|
|
* Get terms by searched string and taxonomy.
|
|
*
|
|
* @param string $search Searched String.
|
|
* @param int $value Term ID.
|
|
*/
|
|
private function get_authors( $search, $value ) {
|
|
if ( 'null' === $search && $value ) {
|
|
$author = get_user_by( 'id', $value );
|
|
|
|
return [
|
|
'value' => $value,
|
|
'title' => ! empty( $author ) ? $author->display_name : '',
|
|
];
|
|
}
|
|
|
|
$data = [];
|
|
$authors = get_users(
|
|
[
|
|
'search' => '*' . $search . '*',
|
|
'search_columns' => [ 'display_name', 'user_nicename', 'user_login', 'user_email' ],
|
|
]
|
|
);
|
|
|
|
if ( ! empty( $authors ) ) {
|
|
foreach ( $authors as $author ) {
|
|
$data[] = [
|
|
'value' => $author->ID,
|
|
'title' => $author->data->display_name,
|
|
];
|
|
}
|
|
}
|
|
|
|
return $data;
|
|
}
|
|
}
|