[
'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(
['Luling, TX', 'Luling', 'TX'],
[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(
['Luling, TX', 'Luling', 'TX', '#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 Luling, TX
We Serve These Areas
Porta Potty Rentals Forest Hill, TXPorta Potty Rentals Worthington, MNPorta Potty Rentals Round Lake, ILPorta Potty Rentals Wenonah, NJPorta Potty Rentals Fairmount, INPorta Potty Rentals New Castle, INPorta Potty Rentals Salamanca, NYPorta Potty Rentals Rockton, ILPorta Potty Rentals Enochville, NCPorta Potty Rentals Tabor City, NCPorta Potty Rentals New Hackensack, NYPorta Potty Rentals Picayune, MSPorta Potty Rentals Wright, FLPorta Potty Rentals Round Lake Park, ILPorta Potty Rentals Versailles, MOPorta Potty Rentals Vista Santa Rosa, CAPorta Potty Rentals Bel Air, MDPorta Potty Rentals Warsaw, ILPorta Potty Rentals Washoe Valley, NVPorta Potty Rentals Northfield, NJPorta Potty Rentals Indianola, IAPorta Potty Rentals Platteville, WIPorta Potty Rentals Shannon Hills, ARPorta Potty Rentals Emerson, GAPorta Potty Rentals Harrison, OHPorta Potty Rentals Prairie Ridge, WAPorta Potty Rentals Herscher, ILPorta Potty Rentals Mammoth, AZPorta Potty Rentals Clara City, MNPorta Potty Rentals East Jordan, MIPorta Potty Rentals Verona, VAPorta Potty Rentals Islamorada Village Of Islands, FLPorta Potty Rentals Masonville, KYPorta Potty Rentals Johnson City, NYPorta Potty Rentals Kapaa, HIPorta Potty Rentals Pine Bush, NYPorta Potty Rentals Staunton, VAPorta Potty Rentals Parrish, ALPorta Potty Rentals Dacula, GAPorta Potty Rentals Central, LAPorta Potty Rentals Columbine Valley, COPorta Potty Rentals Williamsport, MDPorta Potty Rentals Norwood, OHPorta Potty Rentals Cameron Park, CAPorta Potty Rentals Pennsburg, PAPorta Potty Rentals Colonial Heights, TNPorta Potty Rentals Smith Valley, NVPorta Potty Rentals Prescott, ARPorta Potty Rentals South Hill, NYPorta Potty Rentals Semmes, AL