Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

If I want to "safely" delete a post. I want to make sure that no link exists (within my blog) to "to-be-deleted" post. How do I do that?

share|improve this question
    
Not sure how to do this but maybe you cant try this: Move the post to trash and use a link checker plugin. If the link checker plugin is clever enough it should tell you any links linking to the post you have no longer visible on the site. –  Brady May 10 '11 at 9:22
1  
+1 for a great question. Idea would be to scan post content of all the posts but it can be a pain for a big site having a large no of posts. I would do it by saving a serialized array of links of a post in its postmeta (for new & for existing) and then query this meta info from postmeta table and scan through and return a arry of post IDs which link to the post being deleted. You can either halt it or make it to take whatever action you want. –  Ashfame May 10 '11 at 11:36
    
@Ashfame: Interesting suggestion. Now if you would create a plugin for it... –  Jan Fabry May 10 '11 at 13:00
    
Another +1 plus a fav. @Jan Fabry & @Ashfame - I'm sure you want to work together on this one! :) –  kaiser May 10 '11 at 17:31
    
@user3047 Don't you want to mark this one as solved? –  kaiser Sep 5 '11 at 8:26

4 Answers 4

up vote 6 down vote accepted

After reading this thread I saw that I might need this also sometimes. So here is the result:

The internal link checker plugin

It adds a meta box at your post edit screens that shows links to all posts who link internally to the currently displayed post. If you want to alter the output (add something for eg.), please use the provided filter. An example of how to use the filter can be found at the readme file.

The Plugin is GPL2 licensed. Maybe I'll also put it in the official repo to allow installation from inside your self hosted blog. Edit: Done.

...or at...

...or in our own

share|improve this answer
    
And thanks to @Drake for providing the sql query (please go & upvote his answer). –  kaiser May 10 '11 at 18:18
    
A bit rough but kinda works. If you have multiple links in the same post it will show duplicates. Accepted solution. –  user3047 Sep 6 '11 at 12:39
    
Thanks for the heads up. Wasn't aware of that. Will change in a future version. –  kaiser Sep 6 '11 at 13:26

There is no separate table or data structure that keeps post-to-post links, so the best way to do this is to search your posts for the URL of the post you want to delete. The search works on the HTML code of the post, so it will contain the full link, even if you don't see it in the visual editor.

Of course, you should also search through the pages, since they can also contain links to posts.

Another approach would be to use Google. If you search for link:http://example.com/2011/05/post-to-delete/ it will return all pages that link there. You can then also add site:example.com to limit the results to only pages on your site. Of course, this will not be as up-to-date as a search in your own current database.

share|improve this answer
    
Great idea. But the particular blog I'm dealing with is private... –  user3047 May 10 '11 at 13:47

Just use Google's Webmaster tools - it has a specific page showing internal links.

share|improve this answer

You can do a query like:

SELECT ID, post_title, post_date, post_content 
FROM wp_posts 
WHERE post_content 
LIKE '%your-post-title%' ORDER BY post_date

to get all posts that linked that old post order by date.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.