/**
* Plugin Name: Ajax поиск
* Author URI: https://t.me/devnullik
* Author: under water
* Version: 1.0
*
* Requires at least: 2.5
* Requires PHP: 7.2
*
* License: GPL2
* License URI: https://www.gnu.org/licenses/gpl-2.0.html
**/
class AjaxSearch
{
public function __construct()
{
add_action('init', [$this, 'init']);
add_action('add_meta_boxes', array($this, 'addMetaBox'));
add_action('save_post', array($this, 'savePost'), 10, 3);
add_action('wp_enqueue_scripts', array($this, 'enqueueScripts'));
add_shortcode('edit-currencies', [$this, 'editCurrencies']);
add_shortcode('ajax-search-variations', [$this, 'ajaxSearchVariations']);
add_shortcode('ajax-search-variation-active', [$this, 'ajaxSearchVariationActive']);
}
public function init()
{
register_post_type('search-variations', [
'label' => null,
'labels' => [
'name' => 'Вариации поиска',
'singular_name' => 'Вариации поиска',
'add_new' => 'Добавить',
'add_new_item' => 'Добавить',
'edit_item' => 'Редактировать',
'new_item' => 'Вариации поиска',
'view_item' => 'Просмотреть',
'search_items' => 'Поиск',
'not_found' => 'Не найдено',
'not_found_in_trash' => 'Не найдено',
'parent_item_colon' => '',
'menu_name' => 'Вариации поиска',
],
'description' => '',
'menu_icon' => 'dashicons-media-document',
'publicly_queryable' => false,
'public' => true,
'exclude_from_search' => null,
'show_ui' => true,
'show_in_nav_menus' => false,
'show_in_menu' => true,
'rest_base' => null,
'menu_position' => 49,
'hierarchical' => true,
'supports' => ['title'],
'show_in_rest' => true,
'taxonomies' => [],
'has_archive' => true,
'rewrite' => true,
'query_var' => true
]);
register_post_type('currencies', [
'label' => null,
'labels' => [
'name' => 'Валюты',
'singular_name' => 'Валюты',
'add_new' => 'Добавить',
'add_new_item' => 'Добавить',
'edit_item' => 'Редактировать',
'new_item' => 'Валюты',
'view_item' => 'Просмотреть',
'search_items' => 'Поиск',
'not_found' => 'Не найдено',
'not_found_in_trash' => 'Не найдено',
'parent_item_colon' => '',
'menu_name' => 'Валюты',
],
'description' => '',
'menu_icon' => 'dashicons-money-alt',
'publicly_queryable' => false,
'public' => true,
'exclude_from_search' => null,
'show_ui' => true,
'show_in_nav_menus' => false,
'show_in_menu' => true,
'rest_base' => null,
'menu_position' => 49,
'hierarchical' => true,
'supports' => ['title'],
'show_in_rest' => true,
'taxonomies' => [],
'has_archive' => true,
'rewrite' => true,
'query_var' => true
]);
}
public function enqueueScripts()
{
$directory = plugins_url().'/ajax-search/';
wp_enqueue_style("AjaxSearch-style", "{$directory}assets/style.css");
wp_enqueue_script("AjaxSearch-cookie", "{$directory}assets/cookie.js", ['jquery'], null, true);
wp_enqueue_script("AjaxSearch-script", "{$directory}assets/script.js", ['AjaxSearch-cookie'], null, true);
global $wpdb;
$ress = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}postmeta WHERE meta_key = 'estate-price-object' AND meta_value != ''");
$curs = $arr = [];
$currencies = get_posts([
'numberposts' => -1,
'post_status' => 'publish',
'post_type' => 'currencies'
]);
foreach( $currencies as $cur ){
$curs[$cur->ID] = get_post_meta($cur->ID, '_currencies_course', true)*1;
}
foreach( $ress as $res ){
$prc = $res->meta_value*1;
$arr[$res->post_id] = [0 => $prc];
foreach( $curs as $id => $cur ){
$arr[$res->post_id][$id] = $cur * $prc;
}
}
wp_localize_script("AjaxSearch-script", 'currencies', $arr);
}
public function addMetaBox()
{
add_meta_box("AjaxSearch-box", 'AjaxSearch', [$this, 'metaBox'], 'search-variations', 'normal', 'high');
add_meta_box("AjaxSearch-box", 'AjaxSearch', [$this, 'metaBoxСurrencies'], 'currencies', 'normal', 'high');
}
public function savePost( $ID = null, $post = null, $update = null )
{
if( isset($_POST['AjaxSearch']) && is_array($_POST['AjaxSearch']) && $post ){
foreach( $_POST['AjaxSearch'] as $key => $val ){
update_post_meta($post->ID, $key, $val);
}
}
}
public function metaBox()
{
$postID = $_GET['post'];
include __DIR__ . '/meta-box.php';
}
public function metaBoxСurrencies()
{
$postID = $_GET['post'];
include __DIR__ . '/currencies.php';
}
public function ajaxSearchVariations()
{
echo '
'.static::getVariations().'
';
}
public function ajaxSearchVariationActive()
{
echo '';
}
public function editCurrencies()
{
$ul = '';
$posts = get_posts([
'numberposts' => -1,
'post_status' => 'publish',
'post_type' => 'currencies'
]);
foreach( $posts as $post ){
$ul .= '
'.$post->post_title.'
';
}
echo '
';
}
static function getVariations()
{
require_once __DIR__ . '/vendor/phpExcelReader/Excel/reader.php';
$variations = [];
$html = '';
$upload = wp_upload_dir();
$posts = get_posts([
'numberposts' => -1,
'post_status' => 'publish',
'post_type' => 'search-variations'
]);
if( is_array($posts) ){
foreach( $posts as $post ){
$variations[$post->ID] = [
'name' => get_post_meta($post->ID, '_variation_meta', true),
'icon' => get_post_meta($post->ID, '_variation_svg', true),
'title' => $post->post_title,
'vars' => []
];
$sht = get_post_meta($post->ID, '_variation_sht', true);
$fileID = get_post_meta($post->ID, '_variation_file', true);
$attached = get_post_meta($fileID, '_wp_attached_file', true);
$_key = get_post_meta($post->ID, '_variation_key', true);
$_val = get_post_meta($post->ID, '_variation_val', true);
if( is_readable($upload['basedir'].'/'.$attached) && isset($sht) && $sht*1 > -1 && isset($fileID) && $fileID*1 > -1 ){
$data = new Spreadsheet_Excel_Reader();
$data->setOutputEncoding('UTF-8');
$data->read($upload['basedir'].'/'.$attached);
$sheet = $data->sheets[$sht]['cells'];
$key = 0;
foreach( $sheet as $cols ){
if( $key > 0 ){
$variations[$post->ID]['vars'][$cols[$_key]][] = $cols[$_val];
}
$key++;
}
}
}
}
foreach( $variations as $item ){
$ul = "{$item['icon']}{$item['title']}
";
if( count($item['vars']) > 0 ){
$i = 0;
foreach( $item['vars'] as $val => $vars ){
$vars[] = $val;
$ul .= "$val";
$i++;
}
}
$html .= "";
}
return "$html
";
}
static function getSelectUl( $acfID )
{
global $wpdb;
$postID = $wpdb->get_var("SELECT post_id FROM {$wpdb->prefix}postmeta WHERE meta_key = '_variation_acf' AND meta_value = '$acfID'");
$post = get_post($postID);
$html = $active = '';
if( $postID && !empty($postID) && $post ){
require_once __DIR__ . '/vendor/phpExcelReader/Excel/reader.php';
$vars = [];
$upload = wp_upload_dir();
$sht = get_post_meta($post->ID, '_variation_sht', true);
$_key = get_post_meta($post->ID, '_variation_key', true);
$_val = get_post_meta($post->ID, '_variation_val', true);
$name = get_post_meta($post->ID, '_variation_meta', true);
$fileID = get_post_meta($post->ID, '_variation_file', true);
$attached = get_post_meta($fileID, '_wp_attached_file', true);
if( is_readable($upload['basedir'].'/'.$attached) && isset($sht) && $sht*1 > -1 && isset($fileID) && $fileID*1 > -1 ){
$data = new Spreadsheet_Excel_Reader();
$data->setOutputEncoding('UTF-8');
$data->read($upload['basedir'].'/'.$attached);
$sheet = $data->sheets[$sht]['cells'];
$key = 0;
foreach( $sheet as $cols ){
if( $key > 0 ){
$vars[$cols[$_key]][] = $cols[$_val];
}
$key++;
}
if( count($vars) > 0 ){
$k = 0;
foreach( $vars as $val => $arr ){
$arr[] = $val;
$check = '';
if( $k == 0 ){
$check = ' checked';
$active = $val;
}
$html .= ''.$val.'';
$k++;
}
}
}
}
if( !empty($html) ){
$html = '
';
}
return $html;
}
}
new AjaxSearch();
1.0MEGARIELTORhttps://megarieltor.comadminhttps://megarieltor.com/author/admin/Главнаяrich600338<blockquote class="wp-embedded-content" data-secret="CfsLQMvMhl"><a href="https://megarieltor.com/">Главная</a></blockquote><iframe sandbox="allow-scripts" security="restricted" src="https://megarieltor.com/embed/#?secret=CfsLQMvMhl" width="600" height="338" title="«Главная» — MEGARIELTOR" data-secret="CfsLQMvMhl" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" class="wp-embedded-content"></iframe><script>
/*! This file is auto-generated */
!function(d,l){"use strict";l.querySelector&&d.addEventListener&&"undefined"!=typeof URL&&(d.wp=d.wp||{},d.wp.receiveEmbedMessage||(d.wp.receiveEmbedMessage=function(e){var t=e.data;if((t||t.secret||t.message||t.value)&&!/[^a-zA-Z0-9]/.test(t.secret)){for(var s,r,n,a=l.querySelectorAll('iframe[data-secret="'+t.secret+'"]'),o=l.querySelectorAll('blockquote[data-secret="'+t.secret+'"]'),c=new RegExp("^https?:$","i"),i=0;i<o.length;i++)o[i].style.display="none";for(i=0;i<a.length;i++)s=a[i],e.source===s.contentWindow&&(s.removeAttribute("style"),"height"===t.message?(1e3<(r=parseInt(t.value,10))?r=1e3:~~r<200&&(r=200),s.height=r):"link"===t.message&&(r=new URL(s.getAttribute("src")),n=new URL(t.value),c.test(n.protocol))&&n.host===r.host&&l.activeElement===s&&(d.top.location.href=t.value))}},d.addEventListener("message",d.wp.receiveEmbedMessage,!1),l.addEventListener("DOMContentLoaded",function(){for(var e,t,s=l.querySelectorAll("iframe.wp-embedded-content"),r=0;r<s.length;r++)(t=(e=s[r]).getAttribute("data-secret"))||(t=Math.random().toString(36).substring(2,12),e.src+="#?secret="+t,e.setAttribute("data-secret",t)),e.contentWindow.postMessage({message:"ready",secret:t},"*")},!1)))}(window,document);
</script>