Σε περίπτωση μαζικής αλλαγής links (πχ, μεταφορά blog), αν θέλουμε να αλλάξουμε όλα τα link, είναι δύσκολο να γίνει με το χέρι, ειδικά σε περιπτώσεις που έχουμε πάρα πολλούς εσωτερικούς συνδέσμους.
Ένας εύκολος τρόπος, είναι χρησιμοποιώντας το παρακάτω snippet:
(πριν το snippet, να πω το κλασσικό οτι κατα πάσα πιθανότητα δεν δουλεύει σε ΟΛΕΣ τις περιπτώσεις, οπότε κάποια link θα σας ξεφύγουν. 100%. Μην πείτε οτι δεν σας προειδοποίησα! :P )
Και επειδή φαίνεται χάλια εδώ, δείτε το στο Github!
(πριν το snippet, να πω το κλασσικό οτι κατα πάσα πιθανότητα δεν δουλεύει σε ΟΛΕΣ τις περιπτώσεις, οπότε κάποια link θα σας ξεφύγουν. 100%. Μην πείτε οτι δεν σας προειδοποίησα! :P )
$regexp = "<a\s[^>]*src=(\"??)([^\" >]*?)\\1[^>]*>(.*)<\/a>";
if(preg_match_all("/$regexp/siU", $postbody, $matches, PREG_SET_ORDER)) {
foreach($matches as $match) {
// $match[2] = το URL που βρέθηκε στο A tag
// $match[3] = το κείμενο που βρέθηκε στο A tag
$isin = strpos($match[2], "dimitrisp.eu/blog"); //Εδώ μπαίνει το αρχικό link
if ($isin !== FALSE) {
$thislink = str_replace("http://dimitrisp.eu/blog", "", $match[2]); //Κι εδώ μπαίνει το αρχικό link... Θα μπορούσαμε να το τρέξουμε κατευθείαν, αλλα σώζει πόρους σε περίπτωση εκατοντάδων συνδέσμων.
$thislink = str_replace(".html", "", $thislink); //Όπου .html, βάζουμε την κατάλληξη που είχαμε στα αρχεία του blog. Αν δεν είχε κατάλληξη, τότε απλά κάνουμε σχόλιο αυτή τη γραμμή.
//Internal link detected... Post's slug is: $thislink
$thislink = "http://blog.dimitrisp.eu/" . $thislink; // Όπου http://blog.dimitrisp.eu/, μπαίνει το καινούριο URL.
$postbody = str_replace($match[2], $thislink, $postbody);
}
}
}
Και επειδή φαίνεται χάλια εδώ, δείτε το στο Github!