File: /home/clinicamaciel/www/wp-content/plugins/trx_addons/cpt/properties/properties.php
<?php
/**
* ThemeREX Addons Custom post type: Properties
*
* @package WordPress
* @subpackage ThemeREX Addons
* @since v1.6.22
*/
// Don't load directly
if ( ! defined( 'TRX_ADDONS_VERSION' ) ) {
die( '-1' );
}
// -----------------------------------------------------------------
// -- Custom post type registration
// -----------------------------------------------------------------
// Define Custom post type and taxonomy constants for 'Properties'
if ( ! defined('TRX_ADDONS_CPT_PROPERTIES_PT') )
define('TRX_ADDONS_CPT_PROPERTIES_PT', trx_addons_cpt_param('properties', 'post_type'));
// Register post type and taxonomy
if (!function_exists('trx_addons_cpt_properties_init')) {
add_action( 'init', 'trx_addons_cpt_properties_init' );
function trx_addons_cpt_properties_init() {
global $TRX_ADDONS_STORAGE;
$TRX_ADDONS_STORAGE['post_types'][] = TRX_ADDONS_CPT_PROPERTIES_PT;
$TRX_ADDONS_STORAGE['meta_box_'.TRX_ADDONS_CPT_PROPERTIES_PT] = array(
"basic_section" => array(
"title" => esc_html__('Basic information', 'trx_addons'),
"desc" => wp_kses_data( __('Basic information about the property', 'trx_addons') ),
"type" => "section"
),
"before_price" => array(
"title" => esc_html__("Before price", 'trx_addons'),
"desc" => wp_kses_data( __('Specify any text to display it before the price', 'trx_addons') ),
"class" => "trx_addons_column-1_4",
"std" => "",
"type" => "text"
),
"price" => array(
"title" => esc_html__("Sale or Rent price", 'trx_addons'),
"desc" => wp_kses_data( __('Specify main price for this property', 'trx_addons') ),
"class" => "trx_addons_column-1_4",
"std" => "",
"type" => "text"
),
"price2" => array(
"title" => esc_html__("Second price", 'trx_addons'),
"desc" => wp_kses_data( __('Optional price for rental or square feet/m', 'trx_addons') ),
"class" => "trx_addons_column-1_4",
"std" => "",
"type" => "text"
),
"after_price" => array(
"title" => esc_html__("After price", 'trx_addons'),
"desc" => wp_kses_data( __('Specify any text to display it after the second price', 'trx_addons') ),
"class" => "trx_addons_column-1_4",
"std" => "",
"type" => "text"
),
"area_size" => array(
"title" => esc_html__("Area size", 'trx_addons'),
"desc" => wp_kses_data( __('Area size (only digits)', 'trx_addons') ),
"class" => "trx_addons_column-1_4",
"std" => "",
"type" => "text"
),
"area_size_prefix" => array(
"title" => esc_html__("Area size prefix", 'trx_addons'),
"desc" => wp_kses_data( __('Area size prefix (unit of measurement). Use ^ to make next digit as exponent, eg. m^2', 'trx_addons') ),
"class" => "trx_addons_column-1_4",
"std" => "",
"type" => "text"
),
"land_size" => array(
"title" => esc_html__("Land size", 'trx_addons'),
"desc" => wp_kses_data( __('Land area size (only digits)', 'trx_addons') ),
"class" => "trx_addons_column-1_4",
"std" => "",
"type" => "text"
),
"land_size_prefix" => array(
"title" => esc_html__("Land size prefix", 'trx_addons'),
"desc" => wp_kses_data( __('Land area size prefix (unit of measurement). Use ^ to make next digit as exponent, eq. m^2', 'trx_addons') ),
"class" => "trx_addons_column-1_4",
"std" => "",
"type" => "text"
),
"bedrooms" => array(
"title" => esc_html__("Bedrooms", 'trx_addons'),
"desc" => wp_kses_data( __('Bedrooms number (digits only)', 'trx_addons') ),
"class" => "trx_addons_column-1_4",
"std" => 0,
"options" => trx_addons_get_list_range(0, 10),
"type" => "select"
),
"bathrooms" => array(
"title" => esc_html__("Bathrooms", 'trx_addons'),
"desc" => wp_kses_data( __('Bathrooms number (digits only)', 'trx_addons') ),
"class" => "trx_addons_column-1_4",
"std" => 0,
"options" => trx_addons_get_list_range(0, 10),
"type" => "select"
),
"garages" => array(
"title" => esc_html__("Garages", 'trx_addons'),
"desc" => wp_kses_data( __('Garages number (digits only)', 'trx_addons') ),
"class" => "trx_addons_column-1_4",
"std" => 0,
"options" => trx_addons_get_list_range(0, 10),
"type" => "select"
),
"garage_size" => array(
"title" => esc_html__("Garage size", 'trx_addons'),
"desc" => wp_kses_data( __('Garage size. Eg. "2 auto" or "200 SqFt" or "45 m^2"', 'trx_addons') ),
"class" => "trx_addons_column-1_4",
"std" => "",
"type" => "text"
),
"built" => array(
"title" => esc_html__("Year built", 'trx_addons'),
"desc" => wp_kses_data( __('Specify or select the year when the property is built', 'trx_addons') ),
"class" => "trx_addons_column-1_2",
"std" => "",
"type" => "text"
),
"id" => array(
"title" => esc_html__("Property ID", 'trx_addons'),
"desc" => wp_kses_data( __('Property ID - it will help you search this property directly', 'trx_addons') ),
"class" => "trx_addons_column-1_2",
"std" => "",
"type" => "text"
),
"map_section" => array(
"title" => esc_html__('Location', 'trx_addons'),
"desc" => wp_kses_data( __('Address and location on the map', 'trx_addons') ),
"type" => "section"
),
"country" => array(
"title" => esc_html__("Country", 'trx_addons'),
"desc" => wp_kses_data( __("Select the property's country", 'trx_addons') ),
"class" => "trx_addons_column-1_2",
"std" => "",
"options" => array(),
"type" => "select"
),
"state" => array(
"title" => esc_html__("State", 'trx_addons'),
"desc" => wp_kses_data( __("Select the property's state", 'trx_addons') ),
"class" => "trx_addons_column-1_2",
"std" => "",
"options" => array(),
"type" => "select"
),
"city" => array(
"title" => esc_html__("City", 'trx_addons'),
"desc" => wp_kses_data( __("Select the property's city", 'trx_addons') ),
"class" => "trx_addons_column-1_2",
"std" => "",
"options" => array(),
"type" => "select"
),
"neighborhood" => array(
"title" => esc_html__("Neighborhood", 'trx_addons'),
"desc" => wp_kses_data( __("Select the property's neighborhood", 'trx_addons') ),
"class" => "trx_addons_column-1_2",
"std" => "",
"options" => array(),
"type" => "select"
),
"address" => array(
"title" => esc_html__("Address in the city", 'trx_addons'),
"desc" => wp_kses_data( __('Specify only street and building number', 'trx_addons') ),
"class" => "trx_addons_column-1_2",
"std" => "",
"type" => "text"
),
"zip" => array(
"title" => esc_html__("Zip", 'trx_addons'),
"desc" => wp_kses_data( __('Zip code', 'trx_addons') ),
"class" => "trx_addons_column-1_2",
"std" => "",
"type" => "text"
),
"show_map" => array(
"title" => esc_html__("Show map", 'trx_addons'),
"desc" => wp_kses_data( __("Show map on the property's single page", 'trx_addons') ),
"std" => "0",
"type" => "checkbox"
),
"marker" => array(
"title" => esc_html__("Google map marker", 'trx_addons'),
"desc" => wp_kses_data( __("Select image to represent this property on the Google map. If empty - use marker from 'Property type' or default marker", 'trx_addons') ),
"std" => "",
"dependency" => array(
"show_map" => array("not_empty")
),
"type" => "image"
),
"location" => array(
"title" => esc_html__("Google map location", 'trx_addons'),
"desc" => wp_kses_data( __('Click on the map or drag marker or find location by address', 'trx_addons') ),
"std" => "",
"type" => "googlemap"
),
"gallery_section" => array(
"title" => esc_html__('Gallery', 'trx_addons'),
"desc" => wp_kses_data( __('Images gallery for this property', 'trx_addons') ),
"type" => "section"
),
"gallery" => array(
"title" => esc_html__("Images gallery", 'trx_addons'),
"desc" => wp_kses_data( __("Select images to create gallery on the single page of this property", 'trx_addons') ),
"std" => "",
"multiple" => true,
"type" => "image"
),
"video" => array(
"title" => esc_html__("Video", 'trx_addons'),
"desc" => wp_kses_data( __('Specify URL with properties video from popular video hosting (Youtube, Vimeo)', 'trx_addons') ),
"std" => "",
"type" => "text"
),
"video_description" => array(
"title" => esc_html__("Description", 'trx_addons'),
"desc" => wp_kses_data( __('Specify short description to the video above', 'trx_addons') ),
"dependency" => array(
"video" => array("not_empty")
),
"std" => "",
"type" => "textarea"
),
"virtual_tour" => array(
"title" => esc_html__("Virtual Tour", 'trx_addons'),
"desc" => wp_kses_data( __('Enter virtual tour embeded code', 'trx_addons') ),
"std" => "",
"type" => "textarea"
),
"virtual_tour_description" => array(
"title" => esc_html__("Description", 'trx_addons'),
"desc" => wp_kses_data( __('Specify short description to the virtual tour above', 'trx_addons') ),
"dependency" => array(
"virtual_tour" => array("not_empty")
),
"std" => "",
"type" => "textarea"
),
"attachments" => array(
"title" => esc_html__("Attachments", 'trx_addons'),
"desc" => wp_kses_data( __("Select additional files to attach its to this property", 'trx_addons') ),
"std" => "",
"multiple" => true,
"type" => "media"
),
"attachments_description" => array(
"title" => esc_html__("Description", 'trx_addons'),
"desc" => wp_kses_data( __('Specify short description to the attachments above', 'trx_addons') ),
"dependency" => array(
"attachments" => array("not_empty")
),
"std" => "",
"type" => "textarea"
),
"floor_section" => array(
"title" => esc_html__('Floor plans', 'trx_addons'),
"desc" => wp_kses_data( __('Floor plans with short description', 'trx_addons') ),
"type" => "section"
),
"floor_plans_enable" => array(
"title" => esc_html__("Display floor plans", 'trx_addons'),
"desc" => wp_kses_data( __("Show/Hide floor plans on the single page with this property", 'trx_addons') ),
"std" => "0",
"type" => "checkbox"
),
"floor_plans" => array(
"title" => esc_html__("Floor plans", 'trx_addons'),
"desc" => wp_kses_data( __("Floor plans data fields", 'trx_addons') ),
"dependency" => array(
"floor_plans_enable" => '1'
),
"clone" => true,
"std" => array(array()),
"type" => "group",
"fields" => array(
"title" => array(
"title" => esc_html__("Plan title", 'trx_addons'),
"desc" => wp_kses_data( __('Current floor plan title', 'trx_addons') ),
"class" => "trx_addons_column-1_4",
"std" => "",
"type" => "text"
),
"area" => array(
"title" => esc_html__("Floor size", 'trx_addons'),
"desc" => wp_kses_data( __('Floor area size', 'trx_addons') ),
"class" => "trx_addons_column-1_4",
"std" => "",
"type" => "text"
),
"bedrooms" => array(
"title" => esc_html__("Bedrooms", 'trx_addons'),
"desc" => wp_kses_data( __('Bedrooms number or area', 'trx_addons') ),
"class" => "trx_addons_column-1_4",
"std" => "",
"type" => "text"
),
"bathrooms" => array(
"title" => esc_html__("Bathrooms", 'trx_addons'),
"desc" => wp_kses_data( __('Bathrooms number or area', 'trx_addons') ),
"class" => "trx_addons_column-1_4",
"std" => "",
"type" => "text"
),
"image" => array(
"title" => esc_html__("Floor plan image", 'trx_addons'),
"desc" => wp_kses_data( __("Select image with this floor's plan", 'trx_addons') ),
"class" => "trx_addons_column-1_2",
"std" => "",
"type" => "image"
),
"description" => array(
"title" => esc_html__("Description", 'trx_addons'),
"desc" => wp_kses_data( __('Specify short description for this floor (if need)', 'trx_addons') ),
"class" => "trx_addons_column-1_2",
"std" => "",
"type" => "textarea"
)
)
),
"details_section" => array(
"title" => esc_html__('Additional features', 'trx_addons'),
"desc" => wp_kses_data( __('Additional (custom) features for this property', 'trx_addons') ),
"type" => "section"
),
"details_enable" => array(
"title" => esc_html__("Display details", 'trx_addons'),
"desc" => wp_kses_data( __("Show/Hide additional features on the single page with this property", 'trx_addons') ),
"std" => "0",
"type" => "checkbox"
),
"details" => array(
"title" => esc_html__("Additional features", 'trx_addons'),
"desc" => wp_kses_data( __("Add more features for this property by pair title-value", 'trx_addons') ),
"dependency" => array(
"details_enable" => '1'
),
"clone" => true,
"std" => array(array()),
"type" => "group",
"fields" => array(
"title" => array(
"title" => esc_html__("Title", 'trx_addons'),
"desc" => wp_kses_data( __('Current feature title', 'trx_addons') ),
"class" => "trx_addons_column-1_2",
"std" => "",
"type" => "text"
),
"value" => array(
"title" => esc_html__("Value", 'trx_addons'),
"desc" => wp_kses_data( __('Floor area size', 'trx_addons') ),
"class" => "trx_addons_column-1_2",
"std" => "",
"type" => "text"
)
)
),
"agent_section" => array(
"title" => esc_html__('Agent', 'trx_addons'),
"desc" => wp_kses_data( __('What display in the Agent information block?', 'trx_addons') ),
"type" => "section"
),
"agent_type" => array(
"title" => esc_html__("Agent type", 'trx_addons'),
"desc" => wp_kses_data( __("What display in the Agent information block?", 'trx_addons') ),
"std" => "agent",
"options" => array(
"agent" => esc_html__('Agent', 'trx_addons'),
"author" => esc_html__('Author', 'trx_addons'),
"none" => esc_html__('Hide block', 'trx_addons')
),
"type" => "radio"
),
"agent" => array(
"title" => esc_html__("Select agent", 'trx_addons'),
"desc" => wp_kses_data( __("Select agent", 'trx_addons') ),
"std" => "0",
"options" => array(),
"dependency" => array(
"agent_type" => array("agent")
),
"type" => "select"
)
);
// Register post type and taxonomy
register_post_type( TRX_ADDONS_CPT_PROPERTIES_PT, array(
'label' => esc_html__( 'Properties', 'trx_addons' ),
'description' => esc_html__( 'Property Description', 'trx_addons' ),
'labels' => array(
'name' => esc_html__( 'Properties', 'trx_addons' ),
'singular_name' => esc_html__( 'Property', 'trx_addons' ),
'menu_name' => esc_html__( 'Properties', 'trx_addons' ),
'parent_item_colon' => esc_html__( 'Parent Item:', 'trx_addons' ),
'all_items' => esc_html__( 'All Properties', 'trx_addons' ),
'view_item' => esc_html__( 'View Property', 'trx_addons' ),
'add_new_item' => esc_html__( 'Add New Property', 'trx_addons' ),
'add_new' => esc_html__( 'Add New', 'trx_addons' ),
'edit_item' => esc_html__( 'Edit Property', 'trx_addons' ),
'update_item' => esc_html__( 'Update Property', 'trx_addons' ),
'search_items' => esc_html__( 'Search Property', 'trx_addons' ),
'not_found' => esc_html__( 'Not found', 'trx_addons' ),
'not_found_in_trash' => esc_html__( 'Not found in Trash', 'trx_addons' ),
),
'taxonomies' => array(TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_TYPE,
TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_STATUS,
TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_FEATURES,
TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_LABELS,
TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_COUNTRY,
TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_STATE,
TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_CITY,
TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_NEIGHBORHOOD
),
'supports' => trx_addons_cpt_param('properties', 'supports'),
'public' => true,
'hierarchical' => false,
'has_archive' => true,
'can_export' => true,
'show_in_admin_bar' => true,
'show_in_menu' => true,
'menu_position' => '53.3',
'menu_icon' => 'dashicons-admin-multisite',
'capability_type' => 'post',
'rewrite' => array( 'slug' => trx_addons_cpt_param('properties', 'post_type_slug') )
)
);
}
}
// Add 'Properties' parameters in the ThemeREX Addons Options
if (!function_exists('trx_addons_cpt_properties_options')) {
add_action( 'trx_addons_filter_options', 'trx_addons_cpt_properties_options');
function trx_addons_cpt_properties_options($options) {
trx_addons_array_insert_after($options, 'cpt_section', array(
// properties settings
'properties_info' => array(
"title" => esc_html__('Properties', 'trx_addons'),
"desc" => wp_kses_data( __('Settings of the properties archive', 'trx_addons') ),
"type" => "info"
),
'properties_blog_style' => array(
"title" => esc_html__('Blog archive style', 'trx_addons'),
"desc" => wp_kses_data( __('Style of the properties archive', 'trx_addons') ),
"std" => 'default_2',
"options" => apply_filters('trx_addons_filter_cpt_archive_styles',
trx_addons_components_get_allowed_layouts('cpt', 'properties', 'arh'),
TRX_ADDONS_CPT_PROPERTIES_PT),
"type" => "select"
),
'properties_single_style' => array(
"title" => esc_html__('Single property style', 'trx_addons'),
"desc" => wp_kses_data( __("Style of the single property's page", 'trx_addons') ),
"std" => 'default',
"options" => apply_filters('trx_addons_filter_cpt_single_styles', array(
'default' => esc_html__('Default', 'trx_addons'),
'tabs' => esc_html__('Tabs', 'trx_addons')
), TRX_ADDONS_CPT_PROPERTIES_PT),
"type" => "select"
),
'properties_marker' => array(
"title" => esc_html__('Default marker', 'trx_addons'),
"desc" => wp_kses_data( __('Default marker to show properties on the Google maps ', 'trx_addons') ),
"std" => '',
"type" => "image"
)
));
return $options;
}
}
// Fill 'options' arrays when its need in the admin mode
if (!function_exists('trx_addons_cpt_properties_before_show_options')) {
add_filter('trx_addons_filter_before_show_options', 'trx_addons_cpt_properties_before_show_options', 10, 2);
function trx_addons_cpt_properties_before_show_options($options, $post_type, $group='') {
if ($post_type == TRX_ADDONS_CPT_PROPERTIES_PT) {
foreach ($options as $id=>$field) {
// Recursive call for options type 'group'
if ($field['type'] == 'group' && !empty($field['fields'])) {
$options[$id]['fields'] = trx_addons_cpt_properties_before_show_options($field['fields'], $post_type, $id);
continue;
}
// Skip elements without param 'options'
if (!isset($field['options']) || count($field['options'])>0) continue;
// Fill the 'country' array
if ($id == 'country') {
$options[$id]['options'] = trx_addons_get_list_terms(false, TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_COUNTRY);
// Fill the 'state' array
} else if ($id == 'state') {
$options[$id]['options'] = trx_addons_array_merge(
array(esc_html__('- State -', 'trx_addons')),
trx_addons_get_list_terms(false, TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_STATE, array(
'meta_key' => 'country',
'meta_value' => !empty($options['country']['val'])
? $options['country']['val']
: trx_addons_array_get_first($options['country']['options'])
)));
// Fill the 'city' array
} else if ($id == 'city') {
if ($options['state']['val'] > 0)
$args = array(
'meta_query' => array(
array(
'type' => 'NUMERIC',
'key' => 'country',
'value' => !empty($options['country']['val'])
? $options['country']['val']
: trx_addons_array_get_first($options['country']['options'])
),
array(
'type' => 'NUMERIC',
'key' => 'state',
'value' => $options['state']['val']
)
)
);
else
$args = array(
'meta_key' => 'country',
'meta_value' => !empty($options['country']['val'])
? $options['country']['val']
: trx_addons_array_get_first($options['country']['options'])
);
$options[$id]['options'] = trx_addons_get_list_terms(false, TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_CITY, $args);
// Fill the 'neighborhood' array
} else if ($id == 'neighborhood') {
$args = array(
'meta_query' => array(
array(
'type' => 'NUMERIC',
'key' => 'country',
'value' => !empty($options['country']['val'])
? $options['country']['val']
: trx_addons_array_get_first($options['country']['options'])
),
array(
'type' => 'NUMERIC',
'key' => 'city',
'value' => !empty($options['city']['val'])
? $options['city']['val']
: trx_addons_array_get_first($options['city']['options'])
)
)
);
if ($options['state']['val'] > 0)
$args['meta_query'][] = array(
'type' => 'NUMERIC',
'key' => 'state',
'value' => $options['state']['val']
);
$options[$id]['options'] = trx_addons_array_merge(
array(esc_html__('- Neighborhood -', 'trx_addons')),
trx_addons_get_list_terms(false, TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_NEIGHBORHOOD, $args)
);
// Fill the 'agent' array
} else if ($id == 'agent') {
$options[$id]['options'] = trx_addons_get_list_posts(false, array(
'post_type' => TRX_ADDONS_CPT_AGENTS_PT,
'orderby' => 'title',
'order' => 'ASC'
)
);
}
}
}
return $options;
}
}
// Save some parameters (like 'price', 'agent', 'id', 'bedrooms', etc.) for search and sorting
// and store 'country', 'state', 'city' and 'neighborhood' as post's terms
if ( !function_exists( 'trx_addons_cpt_properties_save_post_options' ) ) {
add_filter('trx_addons_filter_save_post_options', 'trx_addons_cpt_properties_save_post_options', 10, 3);
function trx_addons_cpt_properties_save_post_options($options, $post_id, $post_type) {
if ($post_type == TRX_ADDONS_CPT_PROPERTIES_PT) {
global $post;
// Update post meta and post terms for search and sort
update_post_meta($post_id, 'trx_addons_properties_price', $options['price']);
update_post_meta($post_id, 'trx_addons_properties_area_size', $options['area_size']);
update_post_meta($post_id, 'trx_addons_properties_bathrooms', $options['bathrooms']);
update_post_meta($post_id, 'trx_addons_properties_bedrooms', $options['bedrooms']);
update_post_meta($post_id, 'trx_addons_properties_garages', $options['garages']);
update_post_meta($post_id, 'trx_addons_properties_id', $options['id']);
update_post_meta($post_id, 'trx_addons_properties_zip', $options['zip']);
update_post_meta($post_id, 'trx_addons_properties_address', $options['address']);
update_post_meta($post_id, 'trx_addons_properties_agent', $options['agent_type']=='none'
? 0
: ($options['agent_type']=='agent'
? $options['agent']
: -get_the_author_meta('ID', !empty($post->ID) && $post->ID==$post_id
? $post->post_author
: false)
)
);
wp_set_post_terms($post_id, array((int)$options['country']), TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_COUNTRY, false);
wp_set_post_terms($post_id, array((int)$options['state']), TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_STATE, false);
wp_set_post_terms($post_id, array((int)$options['city']), TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_CITY, false);
wp_set_post_terms($post_id, array((int)$options['neighborhood']), TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_NEIGHBORHOOD, false);
// Update min and max values of the bedrooms, bathrooms, area, price, etc.
trx_addons_cpt_properties_update_min_max();
}
return $options;
}
}
// Update min and max values of the bedrooms, bathrooms, area, price, etc.
if ( !function_exists( 'trx_addons_cpt_properties_update_min_max' ) ) {
function trx_addons_cpt_properties_update_min_max() {
global $wpdb;
$rez = $wpdb->get_results( "SELECT min(bedrooms.meta_value+0) as bed_min, max(bedrooms.meta_value+0) as bed_max,
min(bathrooms.meta_value+0) as bath_min, max(bathrooms.meta_value+0) as bath_max,
min(area.meta_value+0.0) as area_min, max(area.meta_value+0.0) as area_max,
min(price.meta_value+0.0) as price_min, max(price.meta_value+0.0) as price_max
FROM {$wpdb->posts}
INNER JOIN {$wpdb->postmeta} AS bedrooms ON {$wpdb->posts}.ID = bedrooms.post_id
INNER JOIN {$wpdb->postmeta} AS bathrooms ON {$wpdb->posts}.ID = bathrooms.post_id
INNER JOIN {$wpdb->postmeta} AS area ON {$wpdb->posts}.ID = area.post_id
INNER JOIN {$wpdb->postmeta} AS price ON {$wpdb->posts}.ID = price.post_id
WHERE 1=1
AND ({$wpdb->posts}.post_status='publish')
AND bedrooms.meta_key='trx_addons_properties_bedrooms'
AND bathrooms.meta_key='trx_addons_properties_bathrooms'
AND area.meta_key='trx_addons_properties_area_size'
AND price.meta_key='trx_addons_properties_price'",
ARRAY_A
);
update_option('trx_addons_properties_min_max', $rez[0]);
}
}
// Return min and max values of the bedrooms, bathrooms, area, price, etc.
if ( !function_exists( 'trx_addons_cpt_properties_get_min_max' ) ) {
function trx_addons_cpt_properties_get_min_max($key='') {
static $min_max=false;
if ($min_max === false)
$min_max = array_merge(array(
'bed_min' => 0,
'bed_max' => 10,
'bath_min' => 0,
'bath_max' => 10,
'area_min' => 0,
'area_max' => 1000,
'price_min' => 0,
'price_max' => 1000000
),
get_option('trx_addons_properties_min_max', array())
);
return empty($key) ? $min_max : $min_max[$key];
}
}
// Load required styles and scripts for the frontend
if ( !function_exists( 'trx_addons_cpt_properties_load_scripts_front' ) ) {
add_action("wp_enqueue_scripts", 'trx_addons_cpt_properties_load_scripts_front');
function trx_addons_cpt_properties_load_scripts_front() {
if (trx_addons_is_on(trx_addons_get_option('debug_mode'))) {
wp_enqueue_style( 'trx_addons-cpt_properties', trx_addons_get_file_url('cpt/properties/properties.css'), array(), null );
wp_enqueue_script('trx_addons-cpt_properties', trx_addons_get_file_url('cpt/properties/properties.js'), array('jquery'), null, true );
}
}
}
// Merge shortcode's specific styles into single stylesheet
if ( !function_exists( 'trx_addons_cpt_properties_merge_styles' ) ) {
add_action("trx_addons_filter_merge_styles", 'trx_addons_cpt_properties_merge_styles');
function trx_addons_cpt_properties_merge_styles($list) {
$list[] = 'cpt/properties/properties.css';
return $list;
}
}
// Merge shortcode's specific scripts into single file
if ( !function_exists( 'trx_addons_cpt_properties_merge_scripts' ) ) {
add_action("trx_addons_filter_merge_scripts", 'trx_addons_cpt_properties_merge_scripts');
function trx_addons_cpt_properties_merge_scripts($list) {
$list[] = 'cpt/properties/properties.js';
return $list;
}
}
// Load required styles and scripts for the backend
if ( !function_exists( 'trx_addons_cpt_properties_load_scripts_admin' ) ) {
add_action("admin_enqueue_scripts", 'trx_addons_cpt_properties_load_scripts_admin');
function trx_addons_cpt_properties_load_scripts_admin() {
wp_enqueue_script('trx_addons-cpt_properties', trx_addons_get_file_url('cpt/properties/properties.admin.js'), array('jquery'), null, true );
}
}
// Return true if it's properties page
if ( !function_exists( 'trx_addons_is_properties_page' ) ) {
function trx_addons_is_properties_page() {
return defined('TRX_ADDONS_CPT_PROPERTIES_PT')
&& !is_search()
&& (
(is_single() && get_post_type()==TRX_ADDONS_CPT_PROPERTIES_PT)
|| is_post_type_archive(TRX_ADDONS_CPT_PROPERTIES_PT)
|| is_tax(TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_TYPE)
|| is_tax(TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_STATUS)
|| is_tax(TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_FEATURES)
|| is_tax(TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_LABELS)
|| is_tax(TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_COUNTRY)
|| is_tax(TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_STATE)
|| is_tax(TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_CITY)
|| is_tax(TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_NEIGHBORHOOD)
);
}
}
// Return taxonomy for the current post type
if ( !function_exists( 'trx_addons_cpt_properties_post_type_taxonomy' ) ) {
add_filter( 'trx_addons_filter_post_type_taxonomy', 'trx_addons_cpt_properties_post_type_taxonomy', 10, 2 );
function trx_addons_cpt_properties_post_type_taxonomy($tax='', $post_type='') {
if ( defined('TRX_ADDONS_CPT_PROPERTIES_PT') && $post_type == TRX_ADDONS_CPT_PROPERTIES_PT )
$tax = TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_TYPE;
return $tax;
}
}
// Return link to the all posts for the breadcrumbs
if ( !function_exists( 'trx_addons_cpt_properties_get_blog_all_posts_link' ) ) {
add_filter('trx_addons_filter_get_blog_all_posts_link', 'trx_addons_cpt_properties_get_blog_all_posts_link', 10, 2);
function trx_addons_cpt_properties_get_blog_all_posts_link($link='', $args=array()) {
if ($link=='') {
if (trx_addons_is_properties_page()
&& (!is_post_type_archive(TRX_ADDONS_CPT_PROPERTIES_PT) || (int) trx_addons_get_value_gp('compare') == 1))
$link = '<a href="'.esc_url(get_post_type_archive_link( TRX_ADDONS_CPT_PROPERTIES_PT )).'">'
. esc_html__('All Properties', 'trx_addons')
. '</a>';
}
return $link;
}
}
// Return current page title
if ( !function_exists( 'trx_addons_cpt_properties_get_blog_title' ) ) {
add_filter( 'trx_addons_filter_get_blog_title', 'trx_addons_cpt_properties_get_blog_title');
function trx_addons_cpt_properties_get_blog_title($title='') {
if ( defined('TRX_ADDONS_CPT_PROPERTIES_PT') ) {
if ( is_post_type_archive(TRX_ADDONS_CPT_PROPERTIES_PT) ) {
if ( (int) trx_addons_get_value_gp('compare') == 1)
$title = esc_html__('Compare Properties', 'trx_addons');
else
$title = esc_html__('All Properties', 'trx_addons');
}
}
return $title;
}
}
// Parse query params from GET/POST and wp_query_parameters
if ( !function_exists( 'trx_addons_cpt_properties_query_params' ) ) {
function trx_addons_cpt_properties_query_params($params=array()) {
$q_obj = get_queried_object();
if ( ($value = trx_addons_get_value_gp('properties_keyword')) != '' ) $params['properties_keyword'] = sanitize_text_field($value);
if ( ($value = trx_addons_get_value_gp('properties_order')) != '' ) $params['properties_order'] = sanitize_text_field($value);
if ( is_single() && get_post_type()==TRX_ADDONS_CPT_AGENTS_PT) $params['properties_agent'] = (int) $q_obj->ID;
else if ( ($value = trx_addons_get_value_gp('properties_agent')) > 0 ) $params['properties_agent'] = (int) $value;
if ( is_tax(TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_NEIGHBORHOOD)) $params['properties_neighborhood'] = (int) $q_obj->term_id;
else if ( ($value = trx_addons_get_value_gp('properties_neighborhood')) > 0) $params['properties_neighborhood'] = (int) $value;
if ( is_tax(TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_CITY)) $params['properties_city'] = (int) $q_obj->term_id;
else if ( ($value = trx_addons_get_value_gp('properties_city')) > 0 ) $params['properties_city'] = (int) $value;
if ( is_tax(TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_STATE)) $params['properties_state'] = (int) $q_obj->term_id;
else if ( ($value = trx_addons_get_value_gp('properties_state')) > 0 ) $params['properties_state'] = (int) $value;
if ( is_tax(TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_COUNTRY)) $params['properties_country'] = (int) $q_obj->term_id;
else if ( ($value = trx_addons_get_value_gp('properties_country')) > 0 )$params['properties_country'] = (int) $value;
if ( is_tax(TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_TYPE)) $params['properties_type'] = (int) $q_obj->term_id;
else if ( ($value = trx_addons_get_value_gp('properties_type')) > 0 ) $params['properties_type'] = (int) $value;
if ( is_tax(TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_STATUS)) $params['properties_status'] = (int) $q_obj->term_id;
else if ( ($value = trx_addons_get_value_gp('properties_status')) > 0 ) $params['properties_status'] = (int) $value;
if ( is_tax(TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_LABELS)) $params['properties_labels'] = (int) $q_obj->term_id;
else if ( ($value = trx_addons_get_value_gp('properties_labels')) > 0 ) $params['properties_labels'] = (int) $value;
if ( ($value = trx_addons_get_value_gp('properties_bedrooms')) != '' ) $params['properties_bedrooms'] = sanitize_text_field($value);
if ( ($value = trx_addons_get_value_gp('properties_bathrooms')) != '' ) $params['properties_bathrooms'] = sanitize_text_field($value);
if ( ($value = trx_addons_get_value_gp('properties_area')) != '' ) $params['properties_area'] = sanitize_text_field($value);
if ( ($value = trx_addons_get_value_gp('properties_price')) != '' ) $params['properties_price'] = sanitize_text_field($value);
// Collect properties_features_xxx to the single param
foreach ($_GET as $k=>$v) {
if ( strpos($k, 'properties_features') === 0 ) {
if (!isset($params['properties_features'])) $params['properties_features'] = array();
$params['properties_features'][] = (int) $v;
}
}
return $params;
}
}
// Make new query to search properties or return $wp_query object if haven't search parameters
if ( !function_exists( 'trx_addons_cpt_properties_query_params_to_args' ) ) {
function trx_addons_cpt_properties_query_params_to_args($params=array(), $new_query=false) {
$params = trx_addons_cpt_properties_query_params($params);
$args = $keywords = array();
// Use only closest location
if (!empty($params['properties_neighborhood']))
$args = trx_addons_query_add_taxonomy($args, TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_NEIGHBORHOOD, $params['properties_neighborhood']);
else if (!empty($params['properties_city']))
$args = trx_addons_query_add_taxonomy($args, TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_CITY, $params['properties_city']);
else if (!empty($params['properties_state']))
$args = trx_addons_query_add_taxonomy($args, TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_STATE, $params['properties_state']);
else if (!empty($params['properties_country']))
$args = trx_addons_query_add_taxonomy($args, TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_COUNTRY, $params['properties_country']);
// Other params
if (!empty($params['properties_agent']))
$args = trx_addons_query_add_meta($args, 'trx_addons_properties_agent', $params['properties_agent']);
if (!empty($params['properties_type']))
$args = trx_addons_query_add_taxonomy($args, TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_TYPE, $params['properties_type']);
if (!empty($params['properties_status']))
$args = trx_addons_query_add_taxonomy($args, TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_STATUS, $params['properties_status']);
if (!empty($params['properties_labels']))
$args = trx_addons_query_add_taxonomy($args, TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_LABELS, $params['properties_labels']);
if (!empty($params['properties_features']))
foreach ($params['properties_features'] as $v)
$args = trx_addons_query_add_taxonomy($args, TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_FEATURES, $v);
if (!empty($params['properties_bedrooms']))
if ($params['properties_bedrooms']!=trx_addons_cpt_properties_get_min_max('bed_min').','.trx_addons_cpt_properties_get_min_max('bed_max'))
$args = trx_addons_query_add_meta($args, 'trx_addons_properties_bedrooms', $params['properties_bedrooms']);
if (!empty($params['properties_bathrooms']))
if ($params['properties_bathrooms']!=trx_addons_cpt_properties_get_min_max('bath_min').','.trx_addons_cpt_properties_get_min_max('bath_max'))
$args = trx_addons_query_add_meta($args, 'trx_addons_properties_bathrooms', $params['properties_bathrooms']);
if (!empty($params['properties_area']))
if ($params['properties_area']!=trx_addons_cpt_properties_get_min_max('area_min').','.trx_addons_cpt_properties_get_min_max('area_max'))
$args = trx_addons_query_add_meta($args, 'trx_addons_properties_area', $params['properties_area']);
if (!empty($params['properties_price']))
if ($params['properties_price']!=trx_addons_cpt_properties_get_min_max('price_min').','.trx_addons_cpt_properties_get_min_max('price_max'))
$args = trx_addons_query_add_meta($args, 'trx_addons_properties_price', $params['properties_price']);
if (!empty($params['properties_keyword']))
$keywords = array(
'relation' => 'OR',
array(
'key' => 'trx_addons_properties_address',
'value' => $params['properties_keyword'],
'type' => 'CHAR',
'compare' => 'LIKE'
),
array(
'key' => 'trx_addons_properties_zip',
'value' => $params['properties_keyword'],
'type' => 'CHAR',
'compare' => '='
),
array(
'key' => 'trx_addons_properties_id',
'value' => $params['properties_keyword'],
'type' => 'CHAR',
'compare' => '='
)
);
if (!empty($params['properties_order'])) {
$order = explode('_', $params['properties_order']);
if (count($order) == 1)
$order[] = 'asc';
if ($order[0] == 'price') {
$args['meta_key'] = 'trx_addons_properties_price';
$args['orderby'] = 'meta_value_num';
} else if ($order[0] == 'title')
$args['orderby'] = 'title';
else if ($order[0] == 'rand')
$args['orderby'] = 'rand';
else if ($order[0] == 'date')
$args['orderby'] = 'date';
if (!empty($args['orderby']))
$args['order'] = $order[1] == 'asc' ? 'ASC' : 'DESC';
}
// Add keywords
if (!empty($keywords)) {
if (empty($args['meta_query']))
$args['meta_query'] = $keywords;
else
$args['meta_query'] = array(
'relation' => 'AND',
$keywords,
array(
$args['meta_query']
)
);
}
// Prepare args for new query (not in 'pre_query')
if ($new_query) { // && count($args) > 0) {
$args = array_merge(array(
'post_type' => TRX_ADDONS_CPT_PROPERTIES_PT,
'post_status' => current_user_can('read_private_pages') && current_user_can('read_private_posts')
? array('publish', 'private')
: 'publish'
), $args);
$page_number = get_query_var('paged')
? get_query_var('paged')
: (get_query_var('page')
? get_query_var('page')
: 1);
if ($page_number > 1) {
$args['paged'] = $page_number;
$args['ignore_sticky_posts'] = true;
}
$ppp = get_option('posts_per_page');
if ((int) $ppp == 0) $ppp = 10;
$args['posts_per_page'] = (int) $ppp;
}
return $args;
}
}
// Add query vars to filter posts
if (!function_exists('trx_addons_cpt_properties_pre_get_posts')) {
add_action( 'pre_get_posts', 'trx_addons_cpt_properties_pre_get_posts' );
function trx_addons_cpt_properties_pre_get_posts($query) {
if (!$query->is_main_query()) return;
$post_type = $query->get('post_type');
if ($post_type == TRX_ADDONS_CPT_PROPERTIES_PT) {
// Filters and sort for the admin lists
if (is_admin()) {
$agent = trx_addons_get_value_gp('agent');
if ((int) $agent < 0)
$query->set('post_author', -$agent);
else if ((int) $agent > 0) {
$query->set('meta_key', 'trx_addons_properties_agent');
$query->set('meta_value', $agent);
}
// Filters and sort for the foreground lists
} else {
$args = trx_addons_cpt_properties_query_params_to_args();
if (is_array($args) && count($args) > 0) {
foreach ($args as $k=>$v)
$query->set($k, $v);
} else if ((int) trx_addons_get_value_gp('compare') == 1) {
$posts = array();
$list = trx_addons_get_value_gpc('trx_addons_properties_compare_list', array());
if (!empty($list)) $list = json_decode($list, true);
if (is_array($list)) {
foreach ($list as $k=>$v) {
$id = (int) str_replace('id_', '', $k);
if ($id > 0) $posts[] = $id;
}
}
if (count($posts) > 0) {
$query->set('post__in', $posts);
}
}
}
}
}
}
// Replace standard theme templates
//-------------------------------------------------------------
// Change standard single template for properties posts
if ( !function_exists( 'trx_addons_cpt_properties_single_template' ) ) {
add_filter('single_template', 'trx_addons_cpt_properties_single_template');
function trx_addons_cpt_properties_single_template($template) {
global $post;
if (is_single() && $post->post_type == TRX_ADDONS_CPT_PROPERTIES_PT)
$template = trx_addons_get_file_dir('cpt/properties/tpl.properties.single.php');
return $template;
}
}
// Change standard archive template for properties posts
if ( !function_exists( 'trx_addons_cpt_properties_archive_template' ) ) {
add_filter('archive_template', 'trx_addons_cpt_properties_archive_template');
function trx_addons_cpt_properties_archive_template( $template ) {
if ( is_post_type_archive(TRX_ADDONS_CPT_PROPERTIES_PT) ) {
if ((int) trx_addons_get_value_gp('compare') == 1)
$template = trx_addons_get_file_dir('cpt/properties/tpl.properties.compare.php');
else
$template = trx_addons_get_file_dir('cpt/properties/tpl.properties.archive.php');
}
return $template;
}
}
// Admin utils
// -----------------------------------------------------------------
// Create additional column in the posts list
if (!function_exists('trx_addons_cpt_properties_add_custom_column')) {
add_filter('manage_edit-'.trx_addons_cpt_param('properties', 'post_type').'_columns', 'trx_addons_cpt_properties_add_custom_column', 9);
function trx_addons_cpt_properties_add_custom_column( $columns ){
if (is_array($columns) && count($columns)>0) {
$new_columns = array();
foreach($columns as $k=>$v) {
if (!in_array($k, array('author', 'comments', 'date', 'taxonomy-'.TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_CITY)))
$new_columns[$k] = $v;
if ($k=='title') {
$new_columns['cpt_properties_image'] = esc_html__('Photo', 'trx_addons');
$new_columns['cpt_properties_id'] = esc_html__('ID', 'trx_addons');
$new_columns['taxonomy-'.TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_CITY] = esc_html__('City', 'trx_addons');
}
}
$new_columns['cpt_properties_price'] = esc_html__('Price', 'trx_addons');
$new_columns['cpt_properties_details'] = esc_html__('Details', 'trx_addons');
$columns = $new_columns;
}
return $columns;
}
}
// Fill custom columns in the posts list
if (!function_exists('trx_addons_cpt_properties_fill_custom_column')) {
add_action('manage_'.trx_addons_cpt_param('properties', 'post_type').'_posts_custom_column', 'trx_addons_cpt_properties_fill_custom_column', 9, 2);
function trx_addons_cpt_properties_fill_custom_column($column_name='', $post_id=0) {
static $meta_buffer = array();
if (empty($meta_buffer[$post_id])) $meta_buffer[$post_id] = get_post_meta($post_id, 'trx_addons_options', true);
$meta = $meta_buffer[$post_id];
if ($column_name == 'cpt_properties_image') {
$image = wp_get_attachment_image_src( get_post_thumbnail_id($post_id), trx_addons_get_thumb_size('masonry') );
if (!empty($image[0])) {
?><img class="trx_addons_cpt_column_image_preview trx_addons_cpt_properties_image_preview"
src="<?php echo esc_url($image[0]); ?>"
alt=""<?php if (!empty($image[1])) echo ' width="'.intval($image[1]).'"'; ?><?php
if (!empty($image[2])) echo ' height="'.intval($image[2]).'"'; ?>><?php
}
} else if ($column_name == 'cpt_properties_id') {
if (!empty($meta['id'])) {
?><div class="trx_addons_meta_row">
<span class="trx_addons_meta_data"><?php echo esc_html($meta['id']); ?></span>
</div><?php
}
} else if ($column_name == 'cpt_properties_price') {
if (!empty($meta['price'])) {
?><div class="trx_addons_meta_row">
<span class="trx_addons_meta_label"><?php echo wp_kses_post(trx_addons_prepare_macros($meta['before_price'])); ?></span>
<span class="trx_addons_meta_data"><?php echo esc_html(trx_addons_format_price($meta['price'])); ?></span>
<?php if (empty($meta['price2'])) { ?>
<span class="trx_addons_meta_label"><?php echo wp_kses_post(trx_addons_prepare_macros($meta['after_price'])); ?></span>
<?php } ?>
</div><?php
}
if (!empty($meta['price2'])) {
?><div class="trx_addons_meta_row">
<?php if (empty($meta['price'])) { ?>
<span class="trx_addons_meta_label"><?php echo wp_kses_post(trx_addons_prepare_macros($meta['before_price'])); ?></span>
<?php } ?>
<span class="trx_addons_meta_data"><?php echo esc_html(trx_addons_format_price($meta['price2'])); ?></span>
<span class="trx_addons_meta_label"><?php echo wp_kses_post(trx_addons_prepare_macros($meta['after_price'])); ?></span>
</div><?php
}
} else if ($column_name == 'cpt_properties_details') {
?><div class="trx_addons_meta_row">
<span class="trx_addons_meta_label"><?php esc_html_e('Published', 'trx_addons'); ?></span>
<span class="trx_addons_meta_label"><?php echo esc_html(get_the_date()); ?></span>
</div><?php
?><div class="trx_addons_meta_row">
<span class="trx_addons_meta_label"><?php esc_html_e('by', 'trx_addons'); ?></span>
<span class="trx_addons_meta_label"><?php the_author(); ?></span>
</div><?php
if ($meta['agent_type']!='none' && ($meta['agent_type']=='author' || $meta['agent']!=0)) {
?><div class="trx_addons_meta_row">
<span class="trx_addons_meta_label"><?php esc_html_e('Agent', 'trx_addons'); ?></span>
<span class="trx_addons_meta_label"><a href="<?php
echo esc_url(get_admin_url(null, 'edit.php?post_type='.TRX_ADDONS_CPT_PROPERTIES_PT
.'&agent='.intval($meta['agent'])));
?>"><?php
if ($meta['agent_type']=='author')
the_author();
else
echo esc_html(get_the_title($meta['agent']));
?></a>
</span>
</div><?php
}
}
}
}
// AJAX handler for the send_form action
//-----------------------------------------------------------------
if ( !function_exists( 'trx_addons_cpt_properties_ajax_send_sc_form' ) ) {
// Use 9 priority to early handling action (before standard handler from shortcode 'sc_form')
add_action('wp_ajax_send_sc_form', 'trx_addons_cpt_properties_ajax_send_sc_form', 9);
add_action('wp_ajax_nopriv_send_sc_form', 'trx_addons_cpt_properties_ajax_send_sc_form', 9);
function trx_addons_cpt_properties_ajax_send_sc_form() {
if ( !wp_verify_nonce( trx_addons_get_value_gp('nonce'), admin_url('admin-ajax.php') ) )
die();
parse_str($_POST['data'], $post_data);
if (empty($post_data['property_agent'])) return;
$agent_id = (int) $post_data['property_agent'];
$agent_email = '';
if ($agent_id > 0) { // Agent
$meta = get_post_meta($agent_id, 'trx_addons_options', true);
$agent_email = $meta['email'];
} else if ($agent_id < 0) { // Author
$user_id = abs($agent_id);
$user_data = get_userdata($user_id);
$agent_email = $user_data->user_email;
}
if (empty($agent_email)) return;
$property_id = !empty($post_data['property_id']) ? (int) $post_data['property_id'] : 0;
$property_title = !empty($property_id) ? get_the_title($property_id) : '';
$response = array('error'=>'');
$user_name = !empty($post_data['name']) ? stripslashes($post_data['name']) : '';
$user_email = !empty($post_data['email']) ? stripslashes($post_data['email']) : '';
$user_phone = !empty($post_data['phone']) ? stripslashes($post_data['phone']) : '';
$user_msg = !empty($post_data['message']) ? stripslashes($post_data['message']) : '';
// Attention! Strings below not need html-escaping, because mail is a plain text
$subj = $property_id > 0
? sprintf(__('Query on property "%s" from "%s"', 'trx_addons'), $property_title, $user_name)
: sprintf(__('Query on help from "%s"', 'trx_addons'), $user_name);
$msg = (!empty($user_name) ? "\n".sprintf(__('Name: %s', 'trx_addons'), $user_name) : '')
. (!empty($user_email) ? "\n".sprintf(__('E-mail: %s', 'trx_addons'), $user_email) : '')
. (!empty($user_phone) ? "\n".sprintf(__('Phone:', 'trx_addons'), $user_phone) : '')
. (!empty($user_msg) ? "\n\n".trim($user_msg) : '')
. "\n\n............. " . get_bloginfo('site_name') . " (" . esc_url(home_url('/')) . ") ............";
if (!wp_mail($agent_email, $subj, $msg)) {
$response['error'] = esc_html__('Error send message!', 'trx_addons');
}
echo json_encode($response);
die();
}
}
// trx_sc_properties
//-------------------------------------------------------------
/*
[trx_sc_properties id="unique_id" type="default" cat="category_slug or id" count="3" columns="3" slider="0|1"]
*/
if ( !function_exists( 'trx_addons_sc_properties' ) ) {
function trx_addons_sc_properties($atts, $content=null) {
$atts = trx_addons_sc_prepare_atts('trx_sc_properties', $atts, array(
// Individual params
"type" => "default",
"properties_type" => '',
"properties_status" => '',
"properties_labels" => '',
"properties_country" => '',
"properties_state" => '',
"properties_city" => '',
"properties_neighborhood" => '',
"googlemap_height" => 350,
"columns" => '',
"count" => 3,
"offset" => 0,
"orderby" => '',
"order" => '',
"ids" => '',
"slider" => 0,
"slider_pagination" => "none",
"slider_controls" => "none",
"slides_space" => 0,
"title" => "",
"subtitle" => "",
"description" => "",
"link" => '',
"link_image" => '',
"link_text" => esc_html__('Learn more', 'trx_addons'),
"title_align" => "left",
"title_style" => "default",
"title_tag" => '',
// Common params
"id" => "",
"class" => "",
"css" => ""
)
);
if (!empty($atts['ids'])) {
$atts['ids'] = str_replace(array(';', ' '), array(',', ''), $atts['ids']);
$atts['count'] = count(explode(',', $atts['ids']));
}
$atts['count'] = max(1, (int) $atts['count']);
$atts['offset'] = max(0, (int) $atts['offset']);
if (empty($atts['orderby'])) $atts['orderby'] = 'title';
if (empty($atts['order'])) $atts['order'] = 'asc';
$atts['slider'] = max(0, (int) $atts['slider']);
if ($atts['slider'] > 0 && (int) $atts['slider_pagination'] > 0) $atts['slider_pagination'] = 'bottom';
ob_start();
trx_addons_get_template_part(array(
'cpt/properties/tpl.properties.'.trx_addons_esc($atts['type']).'.php',
'cpt/properties/tpl.properties.default.php'
),
'trx_addons_args_sc_properties',
$atts
);
$output = ob_get_contents();
ob_end_clean();
return apply_filters('trx_addons_sc_output', $output, 'trx_sc_properties', $atts, $content);
}
}
// Add [trx_sc_properties] in the VC shortcodes list
if (!function_exists('trx_addons_sc_properties_add_in_vc')) {
function trx_addons_sc_properties_add_in_vc() {
if (!trx_addons_exists_visual_composer()) return;
add_shortcode("trx_sc_properties", "trx_addons_sc_properties");
vc_lean_map("trx_sc_properties", 'trx_addons_sc_properties_add_in_vc_params');
class WPBakeryShortCode_Trx_Sc_Properties extends WPBakeryShortCode {}
}
add_action('init', 'trx_addons_sc_properties_add_in_vc', 20);
}
// Return params
if (!function_exists('trx_addons_sc_properties_add_in_vc_params')) {
function trx_addons_sc_properties_add_in_vc_params() {
// If open params in VC Editor
$vc_edit = is_admin() && trx_addons_get_value_gp('action')=='vc_edit_form' && trx_addons_get_value_gp('tag') == 'trx_sc_properties';
$vc_params = $vc_edit && isset($_POST['params']) ? $_POST['params'] : array();
// Prepare lists
$country = $vc_edit && !empty($vc_params['properties_country']) ? $vc_params['properties_country'] : 0;
$state = $vc_edit && !empty($vc_params['properties_state']) ? $vc_params['properties_state'] : 0;
$city = $vc_edit && !empty($vc_params['properties_city']) ? $vc_params['properties_city'] : 0;
$neighborhood = $vc_edit && !empty($vc_params['properties_neighborhood']) ? $vc_params['properties_neighborhood'] : 0;
// List of states
$list_states = trx_addons_array_merge(array(0 => esc_html__('- State -', 'trx_addons')),
$country == 0
? array()
: trx_addons_get_list_terms(false, TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_STATE, array(
'meta_key' => 'country',
'meta_value' => $country
))
);
// List of cities
$args = array();
if ($state > 0)
$args = array(
'meta_key' => 'state',
'meta_value' => $state
);
else if ($country > 0)
$args = array(
'meta_key' => 'country',
'meta_value' => $country
);
$list_cities = trx_addons_array_merge(array(0 => esc_html__('- City -', 'trx_addons')),
count($args) == 0
? array()
: trx_addons_get_list_terms(false, TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_CITY, $args)
);
// List of neighborhoods
$list_neighborhoods = trx_addons_array_merge(array(0 => esc_html__('- Neighborhood -', 'trx_addons')),
$city == 0
? array()
: trx_addons_get_list_terms(false, TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_NEIGHBORHOOD, array(
'meta_key' => 'city',
'meta_value' => $city
))
);
// Prepare shortcode params
$params = array_merge(
array(
array(
"param_name" => "type",
"heading" => esc_html__("Layout", 'trx_addons'),
"description" => wp_kses_data( __("Select shortcode's layout", 'trx_addons') ),
"admin_label" => true,
'edit_field_class' => 'vc_col-sm-4',
"std" => "default",
'save_always' => true,
"value" => apply_filters('trx_addons_sc_type', array_flip(trx_addons_components_get_allowed_layouts('cpt', 'properties', 'sc')), 'trx_sc_properties' ),
"type" => "dropdown"
),
array(
"param_name" => "googlemap_height",
"heading" => esc_html__("Googlemap height", 'trx_addons'),
"description" => wp_kses_data( __("Specify height of the Google map with properties", 'trx_addons') ),
'edit_field_class' => 'vc_col-sm-4',
'dependency' => array(
'element' => 'type',
'value' => array('googlemap')
),
"std" => "350",
'save_always' => true,
"type" => "textfield"
),
array(
"param_name" => "properties_type",
"heading" => esc_html__("Type", 'trx_addons'),
"description" => wp_kses_data( __("Select the type to show properties that have it", 'trx_addons') ),
"admin_label" => true,
'edit_field_class' => 'vc_col-sm-4 vc_new_row',
"value" => array_merge(array(esc_html__('- Type -', 'trx_addons') => 0), array_flip(trx_addons_get_list_terms(false, TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_TYPE))),
"std" => "0",
"type" => "dropdown"
),
array(
"param_name" => "properties_status",
"heading" => esc_html__("Status", 'trx_addons'),
"description" => wp_kses_data( __("Select the status to show properties that have it", 'trx_addons') ),
"admin_label" => true,
'edit_field_class' => 'vc_col-sm-4',
"value" => array_merge(array(esc_html__('- Status -', 'trx_addons') => 0), array_flip(trx_addons_get_list_terms(false, TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_STATUS))),
"std" => "0",
"type" => "dropdown"
),
array(
"param_name" => "properties_labels",
"heading" => esc_html__("Label", 'trx_addons'),
"description" => wp_kses_data( __("Select the label to show properties that have it", 'trx_addons') ),
"admin_label" => true,
'edit_field_class' => 'vc_col-sm-4',
"value" => array_merge(array(esc_html__('- Label -', 'trx_addons') => 0), array_flip(trx_addons_get_list_terms(false, TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_LABELS))),
"std" => "0",
"type" => "dropdown"
),
array(
"param_name" => "properties_country",
"heading" => esc_html__("Country", 'trx_addons'),
"description" => wp_kses_data( __("Select the country to show properties from", 'trx_addons') ),
"admin_label" => true,
'edit_field_class' => 'vc_col-sm-3 vc_new_row',
'save_always' => true,
"value" => array_merge(array(esc_html__('- Country -', 'trx_addons') => 0), array_flip(trx_addons_get_list_terms(false, TRX_ADDONS_CPT_PROPERTIES_TAXONOMY_COUNTRY))),
"std" => "0",
"type" => "dropdown"
),
array(
"param_name" => "properties_state",
"heading" => esc_html__("State", 'trx_addons'),
"description" => wp_kses_data( __("Select the county/state to show properties from", 'trx_addons') ),
"admin_label" => true,
'edit_field_class' => 'vc_col-sm-3',
'save_always' => true,
"value" => array_flip($list_states),
"std" => "0",
"type" => "dropdown"
),
array(
"param_name" => "properties_city",
"heading" => esc_html__("City", 'trx_addons'),
"description" => wp_kses_data( __("Select the city to show properties from", 'trx_addons') ),
"admin_label" => true,
'edit_field_class' => 'vc_col-sm-3',
'save_always' => true,
"value" => array_flip($list_cities),
"std" => "0",
"type" => "dropdown"
),
array(
"param_name" => "properties_neighborhood",
"heading" => esc_html__("Neighborhood", 'trx_addons'),
"description" => wp_kses_data( __("Select the neighborhood to show properties from", 'trx_addons') ),
"admin_label" => true,
'edit_field_class' => 'vc_col-sm-3',
'save_always' => true,
"value" => array_flip($list_neighborhoods),
"std" => "0",
"type" => "dropdown"
)
),
trx_addons_vc_add_query_param(''),
trx_addons_vc_add_slider_param(),
trx_addons_vc_add_title_param(),
trx_addons_vc_add_id_param()
);
// Add dependencies to params
$params = trx_addons_vc_add_param_option($params, 'orderby', array(
"value" => array(
esc_html__('None', 'trx_addons') => 'none',
esc_html__('Price', 'trx_addons') => 'price',
esc_html__('Date', 'trx_addons') => 'date',
esc_html__('Title', 'trx_addons') => 'title',
esc_html__('Random', 'trx_addons') => 'rand'
)
)
);
$params = trx_addons_vc_add_param_option($params, 'columns', array(
'dependency' => array(
'element' => 'type',
'value' => array('default')
)
)
);
$params = trx_addons_vc_add_param_option($params, 'slider', array(
'dependency' => array(
'element' => 'type',
'value' => array('default', 'slider')
)
)
);
$params = trx_addons_vc_add_param_option($params, 'slider_pagination', array(
"value" => array(
esc_html__('None', 'trx_addons') => 'none',
esc_html__('Bottom', 'trx_addons') => 'bottom',
esc_html__('Bottom Outside', 'trx_addons') => 'bottom_outside',
esc_html__('Left', 'trx_addons') => 'left',
esc_html__('Right', 'trx_addons') => 'right'
)
)
);
return apply_filters('trx_addons_sc_map', array(
"base" => "trx_sc_properties",
"name" => esc_html__("Properties", 'trx_addons'),
"description" => wp_kses_data( __("Display selected properties", 'trx_addons') ),
"category" => esc_html__('ThemeREX', 'trx_addons'),
"icon" => 'icon_trx_sc_properties',
"class" => "trx_sc_properties",
"content_element" => true,
"is_container" => false,
"show_settings_on_create" => true,
"params" => $params
), 'trx_sc_properties' );
}
}
// Prepare slides with Properties data
//----------------------------------------------------------------------------
if (!function_exists('trx_addons_cpt_properties_slider_content')) {
add_filter('trx_addons_filter_slider_content', 'trx_addons_cpt_properties_slider_content', 10, 2);
function trx_addons_cpt_properties_slider_content($image, $args) {
if (get_post_type() == TRX_ADDONS_CPT_PROPERTIES_PT) {
$image['content'] = trx_addons_get_template_part_as_string('cpt/properties/tpl.properties.slider-slide.php',
'trx_addons_args_properties_slider_slide',
compact('image', 'args')
);
$image['image'] = $image['link'] = $image['url'] = '';
}
return $image;
}
}
// Include additional files
// Attention! Must be included after the post type 'Properties' registration
//----------------------------------------------------------------------------
if ( ($fdir = trx_addons_get_file_dir("cpt/properties/properties.taxonomy_type.php")) != '') { include_once $fdir; }
if ( ($fdir = trx_addons_get_file_dir("cpt/properties/properties.taxonomy_status.php")) != '') { include_once $fdir; }
if ( ($fdir = trx_addons_get_file_dir("cpt/properties/properties.taxonomy_features.php")) != '') { include_once $fdir; }
if ( ($fdir = trx_addons_get_file_dir("cpt/properties/properties.taxonomy_labels.php")) != '') { include_once $fdir; }
if ( ($fdir = trx_addons_get_file_dir("cpt/properties/properties.taxonomy_country.php")) != '') { include_once $fdir; }
if ( ($fdir = trx_addons_get_file_dir("cpt/properties/properties.taxonomy_state.php")) != '') { include_once $fdir; }
if ( ($fdir = trx_addons_get_file_dir("cpt/properties/properties.taxonomy_city.php")) != '') { include_once $fdir; }
if ( ($fdir = trx_addons_get_file_dir("cpt/properties/properties.taxonomy_neighborhood.php")) != '') { include_once $fdir; }
if ( ($fdir = trx_addons_get_file_dir("cpt/properties/properties.agents.php")) != '') { include_once $fdir; }
if ( ($fdir = trx_addons_get_file_dir("cpt/properties/widget.properties_compare.php")) != '') { include_once $fdir; }
if ( ($fdir = trx_addons_get_file_dir("cpt/properties/widget.properties_sort.php")) != '') { include_once $fdir; }
if ( ($fdir = trx_addons_get_file_dir("cpt/properties/widget.properties_search.php")) != '') { include_once $fdir; }
?>