最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

plugins - How can I force a "404 Not Found" error

programmeradmin2浏览0评论

I have a couple of pages that are populated with data from non-Wordpress tables in my database. https://pageURL/?asi_id=12345 causes the DB-lookup to get the correct data. If someone uses the wrong query-string I want a 404 error generated. I am at a point long after the headers have been generated when I discover the issue. I have tried several code fragments from this forum and others. They cause the "404-template" to be displayed by the status code is still 200 and not 404. I suspect that Google wants the correct status code.

Any ideas how I can force the error at this point in WP's loop?

I have a couple of pages that are populated with data from non-Wordpress tables in my database. https://pageURL/?asi_id=12345 causes the DB-lookup to get the correct data. If someone uses the wrong query-string I want a 404 error generated. I am at a point long after the headers have been generated when I discover the issue. I have tried several code fragments from this forum and others. They cause the "404-template" to be displayed by the status code is still 200 and not 404. I suspect that Google wants the correct status code.

Any ideas how I can force the error at this point in WP's loop?

Share Improve this question asked Jul 8, 2019 at 20:33 David SnowDavid Snow 311 bronze badge 1
  • 2 To send a real 404 you'd need to send the 404 status code via HTTP headers, which needs to happen before any markup is sent, if you're already in the loop then it's too late for that. The best you could hope for is just the template to look like a 404. The moment even a single character of the page gets sent out, the opportunity to send the HTTP header is gone – Tom J Nowell Commented Jul 8, 2019 at 21:14
Add a comment  | 

1 Answer 1

Reset to default 1

The short version is that you will need to do the lookup much sooner. As pointed out in comments, a 404 status can only be sent with the headers.

There are a few ways that you can solve this issue. I would do it with a class. That class would use a few hooks but most importantly, one would be early on, say "init", for example. That would be when I would have it figure out if it will be needed and do the lookup. That result, I would store in a protected variable.

Then, when it comes time to output the data, I could have another function in the class (called a method) just deal with the output (as the lookup already happened).

This would allow you to respond 404 if the lookup failed long before any content is sent.

There are other ways using hooks and global variables but I prefer classes.

  • If you need help getting to grips with hooks ask about them here.

  • If you want help understanding classes, that's Stack Exchange.

  • If this answer is not helpful enough, another one will be along sooner or later.

发布评论

评论列表(0)

  1. 暂无评论