| Server IP : 202.61.199.114 / Your IP : 216.73.217.139 Web Server : nginx/1.22.1 System : Linux de.arni-solutions.de 6.1.0-49-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.174-1 (2026-05-26) x86_64 User : web20 ( 1018) PHP Version : 8.4.23 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /tmp/ |
Upload File : |
<?php
require '/var/www/clients/client2/web20/web/wp-load.php';
global $wpdb;
// Canonical titles for non-country URLs
$canonical = array(
'/suchtberatung/' => 'Suchtberatung in Deutschland finden',
'/ratgeber/nachweiszeiten-drogen-thc-kokain-amphetamin/' => 'Nachweiszeiten von Drogen im Körper',
'/einfach-aufgeklaert/drogenpolitik/' => 'Drogenpolitik weltweit im Überblick',
'/drogentest/' => 'Drogentest kaufen',
'/drogentest/urintest/' => 'Urintest auf Drogen',
'/drogentest/speicheltest/' => 'Speicheltest auf Drogen',
'/ratgeber/thc-drogentest/' => 'THC im Drogentest nachweisen',
'/ratgeber/cannabis-am-steuer-2026-thc-grenzwert-fuehrerschein/' => 'Cannabis am Steuer – THC-Grenzwert und Führerschein',
'/informationen/cannabis-marihuanakonsum-nachweisen/' => 'Cannabis und Marihuana nachweisen',
'/erklaert-aufgeklaert/polizeikontrolle-muss-ich-einen-urintest-machen/' => 'Polizeikontrolle – Muss ich einen Urintest machen?',
'/blog/wie-lange-sind-pilze-magic-mushrooms-nachweisbar/' => 'Magic Mushrooms – Nachweiszeiten',
'/cannabis-grenzwerte/' => 'Cannabis-Grenzwerte im Straßenverkehr',
'/speicheltest/' => 'Speicheltest auf Drogen',
'/verkehrsmonitor/' => 'Verkehrsmonitor – Drogenunfälle in Deutschland',
'/informationen/' => 'Informationen zu Drogen',
'/ratgeber/mpu-drogen-abstinenznachweis-vorbereitung/' => 'MPU Vorbereitung – Drogen, Abstinenznachweis und Tipps',
'/drogentest/wischtest/' => 'Wischtest auf Drogen',
'/einfach-aufgeklaert/' => 'Einfach aufgeklärt – Ratgeber zu Drogentests',
'/blog/drogentest-gruende-fuer-ein-falsches-test-ergebnis/' => 'Drogentest – Gründe für ein falsches Testergebnis',
);
// Country-specific preposition overrides (slug => "Drogenpolitik {phrase}")
$country_phrases = array(
'iran' => 'im Iran',
'irak' => 'im Irak',
'libanon' => 'im Libanon',
'jemen' => 'im Jemen',
'oman' => 'im Oman',
'tschad' => 'im Tschad',
'kongo' => 'im Kongo',
'sudan' => 'im Sudan',
'niger' => 'im Niger',
'senegal' => 'im Senegal',
'kosovo' => 'im Kosovo',
'schweiz' => 'in der Schweiz',
'tuerkei' => 'in der Türkei',
'ukraine' => 'in der Ukraine',
'slowakei' => 'in der Slowakei',
'mongolei' => 'in der Mongolei',
'elfenbeinkueste' => 'an der Elfenbeinküste',
'dominikanische-republik' => 'in der Dominikanischen Republik',
'niederlande' => 'in den Niederlanden',
'usa' => 'in den USA',
'philippinen' => 'auf den Philippinen',
'bahamas' => 'auf den Bahamas',
'malediven' => 'auf den Malediven',
'vereinigte-arabische-emirate' => 'in den Vereinigten Arabischen Emiraten',
);
// Build lookup: slug => post_title for all drogenpolitik posts
$all_dp = $wpdb->get_results("SELECT ID, post_name, post_title, post_parent FROM {$wpdb->posts} WHERE post_type='drogenpolitik' AND post_status='publish'");
$slug_to_title = array();
$slug_to_parent = array();
foreach ($all_dp as $dp) {
$slug_to_title[$dp->post_name] = $dp->post_title;
$slug_to_parent[$dp->post_name] = $dp->post_parent;
}
// Generate canonical title for a drogenpolitik country/state URL
function get_dp_title($path, $slug_to_title, $slug_to_parent, $country_phrases) {
// Match /einfach-aufgeklaert/drogenpolitik/usa/{state}/
if (preg_match('#/einfach-aufgeklaert/drogenpolitik/usa/([a-z0-9-]+)/#', $path, $m)) {
$state_slug = $m[1];
$title = $slug_to_title[$state_slug] ?? ucfirst($state_slug);
return 'Drogenpolitik in ' . $title;
}
// Match /einfach-aufgeklaert/drogenpolitik/COUNTRY/CHILD/
if (preg_match('#/einfach-aufgeklaert/drogenpolitik/([a-z0-9-]+)/([a-z0-9-]+)/#', $path, $m)) {
$child_slug = $m[2];
$title = $slug_to_title[$child_slug] ?? ucfirst(str_replace('-', ' ', $child_slug));
return $title;
}
// Match /einfach-aufgeklaert/drogenpolitik/{country}/
if (preg_match('#/einfach-aufgeklaert/drogenpolitik/([a-z0-9-]+)/#', $path, $m)) {
$slug = $m[1];
// Check continent slugs
$continents = array('europa','asien','afrika','nordamerika','suedamerika','ozeanien');
if (in_array($slug, $continents)) {
$names = array('europa'=>'Europa','asien'=>'Asien','afrika'=>'Afrika','nordamerika'=>'Nordamerika','suedamerika'=>'Südamerika','ozeanien'=>'Ozeanien');
return 'Drogenpolitik in ' . $names[$slug];
}
if (isset($country_phrases[$slug])) {
return 'Drogenpolitik ' . $country_phrases[$slug];
}
$title = $slug_to_title[$slug] ?? ucfirst(str_replace('-', ' ', $slug));
return 'Drogenpolitik in ' . $title;
}
return null;
}
// Process all drogenpolitik posts
$posts = $wpdb->get_results("SELECT ID, post_title, post_content FROM {$wpdb->posts} WHERE post_type='drogenpolitik' AND post_status='publish'");
$updated = 0;
$link_changes = 0;
foreach ($posts as $p) {
$content = $p->post_content;
$new_content = $content;
// Find all <a> tags with href
$new_content = preg_replace_callback(
'/<a(\s[^>]*?)href=["\']([^"\']*)["\']([^>]*?)>/i',
function($match) use ($canonical, $slug_to_title, $slug_to_parent, $country_phrases, &$link_changes) {
$before_href = $match[1];
$href = $match[2];
$after_href = $match[3];
$full = $match[0];
// Only internal links
if (strpos($href, 'drogentest-online.de') === false && strpos($href, '/') !== 0) {
return $full;
}
// Get path
$path = parse_url($href, PHP_URL_PATH);
if (!$path) return $full;
$path = rtrim($path, '/') . '/';
// Determine canonical title
$new_title = null;
// Check fixed canonical map
if (isset($canonical[$path])) {
$new_title = $canonical[$path];
} else {
// Check if it's a drogenpolitik URL
$new_title = get_dp_title($path, $slug_to_title, $slug_to_parent, $country_phrases);
}
if ($new_title === null) {
return $full;
}
$escaped_title = esc_attr($new_title);
// Check if title already exists and matches
if (preg_match('/title=["\']([^"\']*)["\']/', $before_href . $after_href, $tm)) {
if ($tm[1] === $escaped_title || $tm[1] === $new_title) {
return $full; // Already correct
}
// Replace existing title
$attrs = $before_href . 'href="' . $href . '"' . $after_href;
$attrs = preg_replace('/title=["\'][^"\']*["\']/', 'title="' . $escaped_title . '"', $attrs);
$link_changes++;
return '<a' . $attrs . '>';
} else {
// Add title attribute
$link_changes++;
return '<a' . $before_href . 'href="' . $href . '" title="' . $escaped_title . '"' . $after_href . '>';
}
},
$new_content
);
if ($new_content !== $content) {
$wpdb->update($wpdb->posts, array('post_content' => $new_content), array('ID' => $p->ID));
$updated++;
}
}
echo "Updated $updated posts with $link_changes link title changes." . PHP_EOL;