[
'name' => 'Porta Potty Rentals',
'template' => 'template-sub-porta-potty-rentals.html'
],
];
private static $template_cache = [];
private static $instance = null;
const MAX_URLS_PER_SITEMAP = 15000;
public function __construct() {
self::$instance = $this;
add_action('init', [$this, 'load_cities'], 5);
add_action('init', [$this, 'add_rewrite_rules'], 20);
add_action('init', [$this, 'add_sitemap_rewrites']);
add_filter('query_vars', [$this, 'add_query_vars']);
add_action('template_redirect', [$this, 'handle_template_redirect']);
}
public static function get_instance() {
return self::$instance;
}
public function load_cities() {
$file_path = plugin_dir_path(__FILE__) . $this->cities_file;
if (file_exists($file_path)) {
$json = file_get_contents($file_path);
$data = json_decode($json, true);
if (is_array($data)) {
foreach ($data as $city) {
if (isset($city['slug'], $city['name'], $city['state'])) {
$slug = strtolower($city['slug']);
$this->cities[$slug] = [
'name' => $city['name'],
'state' => strtoupper($city['state']),
'full' => $city['name'] . ', ' . strtoupper($city['state'])
];
}
}
}
}
}
public function add_rewrite_rules() {
// City home → dumpster-rentals-los-angeles/
add_rewrite_rule(
'^dumpster-rentals-([^/]+)/?$',
'index.php?dumpster_city=$matches[1]',
'top'
);
// Sub-service → porta-potty-rentals-los-angeles/ etc.
$sub_slugs = array_keys($this->sub_services);
$escaped = array_map('preg_quote', $sub_slugs);
$pattern = '^(' . implode('|', $escaped) . ')-([^/]+)/?$';
add_rewrite_rule(
$pattern,
'index.php?dumpster_sub_service=$matches[1]&dumpster_city=$matches[2]',
'top'
);
}
public function add_sitemap_rewrites() {
add_rewrite_rule('^sitemap-dumpster-index\.xml$', 'index.php?dumpster_sitemap=index', 'top');
add_rewrite_rule('^sitemap-dumpster-([0-9]+)\.xml$', 'index.php?dumpster_sitemap=$matches[1]', 'top');
}
public function add_query_vars($vars) {
$vars[] = 'dumpster_city';
$vars[] = 'dumpster_sub_service';
$vars[] = 'dumpster_sitemap';
return $vars;
}
public function handle_template_redirect() {
$sitemap = get_query_var('dumpster_sitemap');
if ($sitemap !== '') {
if ($sitemap === 'index') {
$this->render_sitemap_index();
} else {
$page = intval($sitemap);
if ($page > 0) $this->render_sitemap_page($page);
}
exit;
}
$city_slug = get_query_var('dumpster_city');
$sub_slug = get_query_var('dumpster_sub_service');
$city_slug = strtolower($city_slug);
if ($city_slug && isset($this->cities[$city_slug])) {
if ($sub_slug && array_key_exists($sub_slug, $this->sub_services)) {
$this->render_sub_service_page($city_slug, $sub_slug);
} elseif (!$sub_slug) {
$this->render_city_home_page($city_slug);
} else {
$this->set_404();
}
exit;
}
}
private function set_404() {
global $wp_query;
$wp_query->set_404();
status_header(404);
include get_404_template();
exit;
}
private function render_city_home_page($city_lower) {
$city = $this->cities[$city_lower];
$city_full = $city['full'];
$templates = ['template-city1.html', 'template-city2.html', 'template-city3.html', 'template-city4.html'];
$chosen = $templates[array_rand($templates)];
$content = $this->load_template($chosen);
$content = str_replace(
['Belleair Beach, FL', 'Belleair Beach', 'FL'],
[esc_html($city_full), esc_html($city['name']), esc_html($city['state'])],
$content
);
$content = str_replace('Porta Potty Rentals', 'Dumpster Rentals', $content);
$content .= $this->get_sub_services_list($city_lower);
$content .= $this->get_random_cities_footer();
echo $content;
}
private function render_sub_service_page($city_lower, $sub_slug) {
$city = $this->cities[$city_lower];
$city_full = $city['full'];
$service = $this->sub_services[$sub_slug];
$content = $this->load_template($service['template']);
$content = str_replace(
['Belleair Beach, FL', 'Belleair Beach', 'FL', '#ServiceName'],
[esc_html($city_full), esc_html($city['name']), esc_html($city['state']), esc_html($service['name'])],
$content
);
$content .= $this->get_sub_services_list($city_lower);
$content .= $this->get_random_cities_footer();
echo $content;
}
private function load_template($filename) {
if (!isset(self::$template_cache[$filename])) {
$file_path = plugin_dir_path(__FILE__) . $filename;
if (!file_exists($file_path)) {
wp_die("Template missing: $filename");
}
self::$template_cache[$filename] = file_get_contents($file_path);
}
return self::$template_cache[$filename];
}
private function get_sub_services_list($city_lower) {
$list = '
Our Waste Management Services in ' . esc_html($this->cities[$city_lower]['full']) . '
';
return $list;
}
private function get_random_cities_footer() {
$all_slugs = array_keys($this->cities);
shuffle($all_slugs);
$selected = array_slice($all_slugs, 0, 50);
$footer = '';
return $footer;
}
private function render_sitemap_index() {
header('Content-Type: application/xml; charset=UTF-8');
echo '';
echo '';
$total_urls = count($this->cities) * (1 + count($this->sub_services));
$pages = ceil($total_urls / self::MAX_URLS_PER_SITEMAP);
for ($i = 1; $i <= $pages; $i++) {
echo '' . esc_url(home_url("/sitemap-dumpster-{$i}.xml")) . '' . current_time('c') . '';
}
echo '';
exit;
}
private function render_sitemap_page($page) {
header('Content-Type: application/xml; charset=UTF-8');
echo '';
echo '';
$cities = array_keys($this->cities);
$sub_services = array_keys($this->sub_services);
$start = ($page - 1) * self::MAX_URLS_PER_SITEMAP;
$end = $start + self::MAX_URLS_PER_SITEMAP;
$current = 0;
// City pages first
foreach ($cities as $city_slug) {
if ($current >= $end) break;
if ($current >= $start) {
echo '' . esc_url(home_url("/dumpster-rentals-{$city_slug}/")) . '' . current_time('c') . 'weekly0.8';
}
$current++;
}
// Sub-service pages
foreach ($cities as $city_slug) {
foreach ($sub_services as $sub_slug) {
if ($current >= $end) break 2;
if ($current >= $start) {
echo '' . esc_url(home_url("/{$sub_slug}-{$city_slug}/")) . '' . current_time('c') . 'weekly0.6';
}
$current++;
}
}
echo '';
exit;
}
public function get_random_links($count = 300) {
$count = min(intval($count), 1000);
$slugs = array_keys($this->cities);
$sub_slugs = array_keys($this->sub_services);
if (empty($slugs)) return '';
$output = '';
$used = [];
for ($i = 0; $i < $count; $i++) {
if (mt_rand(0, 3) === 0) { // ~25% main page
$city_slug = $slugs[array_rand($slugs)];
$url = home_url("/dumpster-rentals-{$city_slug}/");
$text = "Dumpster Rentals " . $this->cities[$city_slug]['full'];
} else {
$city_slug = $slugs[array_rand($slugs)];
$sub_slug = $sub_slugs[array_rand($sub_slugs)];
$url = home_url("/{$sub_slug}-{$city_slug}/");
$text = $this->sub_services[$sub_slug]['name'] . " " . $this->cities[$city_slug]['full'];
}
if (in_array($url, $used)) { $i--; continue; }
$used[] = $url;
$output .= '
' . esc_html($text) . '';
}
$output .= '
';
return $output;
}
}
// Shortcode
add_shortcode('random_dumpster_links', function($atts) {
$atts = shortcode_atts(['count' => 300], $atts);
$instance = DumpsterRentalsDynamicPages::get_instance();
return $instance ? $instance->get_random_links($atts['count']) : '';
});
new DumpsterRentalsDynamicPages();
register_activation_hook(__FILE__, 'flush_rewrite_rules');
register_deactivation_hook(__FILE__, 'flush_rewrite_rules');
Our Waste Management Services in Belleair Beach, FL
We Serve These Areas
Porta Potty Rentals Winnebago, MNPorta Potty Rentals Clear Lake Shores, TXPorta Potty Rentals Barbourmeade, KYPorta Potty Rentals Albertville, ALPorta Potty Rentals Baxter, MNPorta Potty Rentals East Mountain, TXPorta Potty Rentals Spring Ridge, MDPorta Potty Rentals Linthicum, MDPorta Potty Rentals Camp Point, ILPorta Potty Rentals Keego Harbor, MIPorta Potty Rentals Winfield, MOPorta Potty Rentals Breckenridge, MIPorta Potty Rentals College Place, WAPorta Potty Rentals Baudette, MNPorta Potty Rentals Bandon, ORPorta Potty Rentals Algona, IAPorta Potty Rentals New Fairview, TXPorta Potty Rentals Lake Hiawatha, NJPorta Potty Rentals Fairfax, IAPorta Potty Rentals Salton City, CAPorta Potty Rentals Manistique, MIPorta Potty Rentals Brookhaven, MSPorta Potty Rentals Duenweg, MOPorta Potty Rentals Madison, MNPorta Potty Rentals Wasco, CAPorta Potty Rentals The Pinehills, MAPorta Potty Rentals Mesilla, NMPorta Potty Rentals Burgin, KYPorta Potty Rentals Erda, UTPorta Potty Rentals North Bend, NEPorta Potty Rentals South Boston, VAPorta Potty Rentals Ledbetter, KYPorta Potty Rentals Creedmoor, NCPorta Potty Rentals Crockett, TXPorta Potty Rentals Breckenridge, COPorta Potty Rentals Oswego, KSPorta Potty Rentals Arapahoe, WYPorta Potty Rentals Baxley, GAPorta Potty Rentals Vaiden, MSPorta Potty Rentals Kewaunee, WIPorta Potty Rentals Danville, ILPorta Potty Rentals Riverside, UTPorta Potty Rentals Belvidere, NJPorta Potty Rentals Ethete, WYPorta Potty Rentals Burnet, TXPorta Potty Rentals Elkins Park, PAPorta Potty Rentals Josephine, TXPorta Potty Rentals Asotin, WAPorta Potty Rentals University Of Pittsburgh Johnstown, PAPorta Potty Rentals Jacksonville Beach, FL