diff --git a/wp-content/themes/homeproz/archive-agent.php b/wp-content/themes/homeproz/archive-agent.php old mode 100644 new mode 100755 index e2b4943f..2539de65 --- a/wp-content/themes/homeproz/archive-agent.php +++ b/wp-content/themes/homeproz/archive-agent.php @@ -12,34 +12,26 @@ if (!defined('ABSPATH')) { get_header(); -// Query all published agents, then filter disabled and sort by order +// Query all published agents, ordered by menu_order (drag-drop sortable in admin) $all_agents = get_posts([ 'post_type' => 'agent', 'posts_per_page' => -1, 'post_status' => 'publish', + 'orderby' => 'menu_order', + 'order' => 'ASC', ]); -// Filter out disabled agents and add sorting data +// Filter out disabled agents $agents_data = []; foreach ($all_agents as $agent) { $disabled = get_field('agent_disabled', $agent->ID); if ($disabled) continue; - $order = get_field('agent_order', $agent->ID); $agents_data[] = [ 'post' => $agent, - 'order' => $order ? (int) $order : 10, ]; } -// Sort by order, then by title -usort($agents_data, function($a, $b) { - if ($a['order'] !== $b['order']) { - return $a['order'] - $b['order']; - } - return strcmp($a['post']->post_title, $b['post']->post_title); -}); - $agent_count = count($agents_data); ?> diff --git a/wp-content/themes/homeproz/inc/custom-post-types.php b/wp-content/themes/homeproz/inc/custom-post-types.php index 123fec64..4c2a47ab 100755 --- a/wp-content/themes/homeproz/inc/custom-post-types.php +++ b/wp-content/themes/homeproz/inc/custom-post-types.php @@ -229,10 +229,10 @@ function homeproz_register_agent_cpt() { 'rewrite' => array('slug' => 'agents', 'with_front' => false), 'capability_type' => 'post', 'has_archive' => true, - 'hierarchical' => false, + 'hierarchical' => true, 'menu_position' => 6, 'menu_icon' => 'dashicons-businessperson', - 'supports' => array('title', 'editor', 'thumbnail'), + 'supports' => array('title', 'editor', 'thumbnail', 'page-attributes'), 'show_in_rest' => true, ); @@ -240,6 +240,191 @@ function homeproz_register_agent_cpt() { } add_action('init', 'homeproz_register_agent_cpt'); +/** + * Enable Simple Page Ordering for agents post type + */ +function homeproz_enable_agent_sorting($sortable, $post_type) { + if ($post_type === 'agent') { + return true; + } + return $sortable; +} +add_filter('simple_page_ordering_is_sortable', 'homeproz_enable_agent_sorting', 10, 2); + +/** + * Register MLS Override Custom Post Type + * + * Allows CMS users to override MLS property settings (featured photo, etc.) + */ +function homeproz_register_mls_override_cpt() { + $labels = array( + 'name' => _x('MLS Editor', 'Post type general name', 'homeproz'), + 'singular_name' => _x('MLS Override', 'Post type singular name', 'homeproz'), + 'menu_name' => _x('MLS Editor', 'Admin Menu text', 'homeproz'), + 'name_admin_bar' => _x('MLS Override', 'Add New on Toolbar', 'homeproz'), + 'add_new' => __('Add New', 'homeproz'), + 'add_new_item' => __('Add New MLS Override', 'homeproz'), + 'new_item' => __('New MLS Override', 'homeproz'), + 'edit_item' => __('Edit MLS Override', 'homeproz'), + 'view_item' => __('View MLS Override', 'homeproz'), + 'all_items' => __('All Overrides', 'homeproz'), + 'search_items' => __('Search Overrides', 'homeproz'), + 'not_found' => __('No overrides found.', 'homeproz'), + 'not_found_in_trash' => __('No overrides found in Trash.', 'homeproz'), + ); + + $args = array( + 'labels' => $labels, + 'public' => false, + 'publicly_queryable' => false, + 'show_ui' => true, + 'show_in_menu' => true, + 'query_var' => false, + 'rewrite' => false, + 'capability_type' => 'post', + 'has_archive' => false, + 'hierarchical' => false, + 'menu_position' => 7, + 'menu_icon' => 'dashicons-edit-page', + 'supports' => array('title'), + 'show_in_rest' => false, + ); + + register_post_type('mls_override', $args); +} +add_action('init', 'homeproz_register_mls_override_cpt'); + +/** + * Add admin columns for MLS Override CPT + */ +function homeproz_mls_override_admin_columns($columns) { + $new_columns = array(); + foreach ($columns as $key => $value) { + $new_columns[$key] = $value; + if ($key === 'title') { + $new_columns['mls_id'] = __('MLS ID', 'homeproz'); + $new_columns['featured_photo'] = __('Featured Photo', 'homeproz'); + } + } + return $new_columns; +} +add_filter('manage_mls_override_posts_columns', 'homeproz_mls_override_admin_columns'); + +/** + * Populate admin columns for MLS Override CPT + */ +function homeproz_mls_override_admin_column_content($column, $post_id) { + switch ($column) { + case 'mls_id': + $mls_id = get_field('mls_override_id', $post_id); + echo $mls_id ? esc_html($mls_id) : '—'; + break; + case 'featured_photo': + $photo = get_field('mls_override_featured_photo', $post_id); + if ($photo && isset($photo['sizes']['thumbnail'])) { + echo ''; + } else { + echo '—'; + } + break; + } +} +add_action('manage_mls_override_posts_custom_column', 'homeproz_mls_override_admin_column_content', 10, 2); + +/** + * Make MLS ID column sortable + */ +function homeproz_mls_override_sortable_columns($columns) { + $columns['mls_id'] = 'mls_id'; + return $columns; +} +add_filter('manage_edit-mls_override_sortable_columns', 'homeproz_mls_override_sortable_columns'); + +/** + * Get MLS override data for a given MLS ID + * + * @param string $mls_id The MLS listing ID (e.g., "12345678") + * @return array|null Override data or null if not found + */ +function homeproz_get_mls_override($mls_id) { + static $cache = array(); + + if (!$mls_id) { + return null; + } + + // Check cache first + if (isset($cache[$mls_id])) { + return $cache[$mls_id]; + } + + // Query for override by MLS ID + $overrides = get_posts(array( + 'post_type' => 'mls_override', + 'posts_per_page' => 1, + 'post_status' => 'publish', + 'meta_query' => array( + array( + 'key' => 'mls_override_id', + 'value' => $mls_id, + 'compare' => '=', + ), + ), + )); + + if (empty($overrides)) { + $cache[$mls_id] = null; + return null; + } + + $override_post = $overrides[0]; + $override_data = array( + 'post_id' => $override_post->ID, + 'mls_id' => $mls_id, + 'featured_photo' => get_field('mls_override_featured_photo', $override_post->ID), + 'featured' => (bool) get_field('mls_override_featured', $override_post->ID), + ); + + $cache[$mls_id] = $override_data; + return $override_data; +} + +/** + * Get all MLS IDs that are marked as featured + * + * @return array Array of MLS IDs (listing_id format, e.g., "12345678") + */ +function homeproz_get_featured_mls_ids() { + static $cached_ids = null; + + if ($cached_ids !== null) { + return $cached_ids; + } + + $overrides = get_posts(array( + 'post_type' => 'mls_override', + 'posts_per_page' => -1, + 'post_status' => 'publish', + 'meta_query' => array( + array( + 'key' => 'mls_override_featured', + 'value' => '1', + 'compare' => '=', + ), + ), + )); + + $cached_ids = array(); + foreach ($overrides as $override) { + $mls_id = get_field('mls_override_id', $override->ID); + if ($mls_id) { + $cached_ids[] = $mls_id; + } + } + + return $cached_ids; +} + /** * Flush rewrite rules on theme activation */ @@ -247,6 +432,7 @@ function homeproz_rewrite_flush() { homeproz_register_property_cpt(); homeproz_register_property_taxonomies(); homeproz_register_agent_cpt(); + homeproz_register_mls_override_cpt(); flush_rewrite_rules(); } add_action('after_switch_theme', 'homeproz_rewrite_flush'); diff --git a/wp-content/themes/homeproz/page-about.php b/wp-content/themes/homeproz/page-about.php index 9903fdac..c977a0a2 100755 --- a/wp-content/themes/homeproz/page-about.php +++ b/wp-content/themes/homeproz/page-about.php @@ -42,7 +42,11 @@ get_header();
- HomeProz Real Estate Team + + HomeProz Real Estate Team
+
-

Meet Our Team

-

A dedicated group of real estate professionals committed to your success

+

+

'agent', 'posts_per_page' => -1, 'post_status' => 'publish', + 'orderby' => 'menu_order', + 'order' => 'ASC', ]); - // Filter out disabled agents and add sorting data + // Filter out disabled agents $agents_data = []; foreach ($all_agents as $agent) { $disabled = get_field('agent_disabled', $agent->ID); if ($disabled) continue; - $order = get_field('agent_order', $agent->ID); $agents_data[] = [ 'post' => $agent, - 'order' => $order ? (int) $order : 10, ]; } - - // Sort by order, then by title - usort($agents_data, function($a, $b) { - if ($a['order'] !== $b['order']) { - return $a['order'] - $b['order']; - } - return strcmp($a['post']->post_title, $b['post']->post_title); - }); ?> @@ -179,24 +179,30 @@ get_header();
+ \n111 East Clark Street, Albert Lea, MN 56007
\nBroker Brian Haugen - MN | Broker/Auctioneer Greg Jensen - MN, IA - 24-21"; + ?>
-

Broker Information

-

- HomeProz Real Estate LLC DBA LandProz Real Estate, LLC
- 111 East Clark Street, Albert Lea, MN 56007
- Broker Brian Haugen - MN | Broker/Auctioneer Greg Jensen - MN, IA - 24-21 -

+

+
+ +
'Ready to Work With Us?', - 'text' => 'Contact our team today to start your real estate journey.', - 'button_text' => 'Get in Touch', - 'button_url' => home_url('/contact/'), + 'title' => $cta_title, + 'text' => $cta_text, + 'button_text' => $cta_button_text, + 'button_url' => $cta_button_url, 'style' => 'accent', )); ?> diff --git a/wp-content/themes/homeproz/page-join.php b/wp-content/themes/homeproz/page-join.php old mode 100644 new mode 100755 index 14727276..709d85f2 --- a/wp-content/themes/homeproz/page-join.php +++ b/wp-content/themes/homeproz/page-join.php @@ -117,11 +117,13 @@ get_header(); 'agent', 'posts_per_page' => -1, 'post_status' => 'publish', + 'orderby' => 'menu_order', + 'order' => 'ASC', ]); // Filter out disabled agents @@ -129,19 +131,12 @@ get_header(); foreach ($all_agents as $agent) { $disabled = get_field('agent_disabled', $agent->ID); if (!$disabled) { - $order = get_field('agent_order', $agent->ID); $agents[] = [ 'post' => $agent, - 'order' => $order ? (int) $order : 10, ]; } } - // Sort by order - usort($agents, function($a, $b) { - return $a['order'] - $b['order']; - }); - // Limit to 4 $agents = array_slice($agents, 0, 4); ?>