WordPress.org

Make WordPress Core

Opened 5 years ago

Last modified 2 months ago

#20899 reviewing defect (bug)

is_home() should be able to be true when is_feed()

Reported by: nacin Owned by:
Milestone: Future Release Priority: normal
Severity: normal Version:
Component: Query Keywords: has-patch needs-testing has-unit-tests dev-feedback
Focuses: Cc:

Description

is_feed() is a special query flag that can be combined with other query flags — for example, is_author() && is_feed() for /author/admin/feed/.

But it can't be combined with is_home(), because is_home() is the fallback that is only set to true when a lot of other things are true — including is_feed(). This appears to be incorrect — is_home() should still be able to be true despite is_feed().

I tracked this down to [1449]. What kind of breakage could occur with this?

Attachments (4)

20899.diff (826 bytes) - added by stevenkword 2 years ago.
20899.2.diff (1.4 KB) - added by jubstuff 17 months ago.
20899.3.diff (4.3 KB) - added by swissspidy 10 months ago.
20899.4.diff (6.9 KB) - added by stevenkword 5 months ago.

Download all attachments as: .zip

Change History (36)

#1 @johnbillion
5 years ago

  • Cc johnbillion added

#2 @batmoo
5 years ago

  • Cc batmoo@… added

#3 @ocean90
5 years ago

#22031 was marked as a duplicate.

#5 @wonderboymusic
4 years ago

  • Keywords needs-patch reporter-feedback added; has-patch removed

How this make you feel now - still needed?

#6 @stevenkword
2 years ago

  • Keywords has-patch needs-testing added; needs-patch removed

Patch 20899.diff removes the is_feed check when assigning the value for the is_home query argument.

@stevenkword
2 years ago

#8 @stevenkword
2 years ago

Anyone have an argument against this?

#9 @johnbillion
22 months ago

  • Owner set to johnbillion
  • Status changed from new to reviewing

#10 @stevenkword
19 months ago

  • Milestone changed from Future Release to 4.5

This ticket was mentioned in Slack in #core by chriscct7. View the logs.


19 months ago

#12 @johnbillion
19 months ago

  • Keywords needs-unit-tests added; reporter-feedback removed

@jubstuff
17 months ago

#13 @jubstuff
17 months ago

The patch was not applying correctly anymore.

I refreshed it and added a unit test, even if I'm not sure about its location.

#14 @johnbillion
17 months ago

  • Keywords has-unit-tests 4.6-early added; needs-unit-tests removed
  • Milestone changed from 4.5 to Future Release

This smells like something that needs to go in earlier in the cycle, so we have more time to discover hard-to-spot bugs.

@jubstuff FYI, $this->assertQueryTrue() can be used for asserting conditional functions.

#15 @swissspidy
11 months ago

  • Keywords 4.6-early removed
  • Milestone changed from Future Release to 4.7

What about getting this into 4.7? I'll try to update the patch next week.

#16 @swissspidy
11 months ago

Feedback from @danielbachhuber:

I think this is going to break things
I've used is_home() a fair number of times to conditionally modify the main query where changing core's behavior would cause unintended behavior in the main feed

Source: https://wordpress.slack.com/archives/core/p1472220220006226

#17 @johnbillion
11 months ago

  • Owner johnbillion deleted

#18 @jorbin
11 months ago

@swissspidy if this is something you want to try, I think it needs to happen soon.

@swissspidy
10 months ago

#19 @swissspidy
10 months ago

Regarding my previous comment, Daniel did not exaggerate.

20899.3.diff makes the patch apply cleanly against trunk again. As you can see from the changed tests, this affects a few queries.

So if anyone's simply checking for is_home() to modify the query or something, they would likely need to add an && is_feed() check to it. But we don't know without more testing, right?

Is anyone not comfortable with testing this in trunk to see how this affects things?

#20 @swissspidy
10 months ago

  • Keywords dev-feedback added

This ticket was mentioned in Slack in #core by jeffpaul. View the logs.


10 months ago

#22 @swissspidy
10 months ago

  • Milestone changed from 4.7 to Future Release

Punting as per discussion in yesterday's bug scrub.

#23 @stevenkword
8 months ago

Another possible solution would be to add a new set of keys to WP_Query. e.g.) is_home_feed, is_author_feed, is_archive_feed, etc.

#24 @stevenkword
8 months ago

I'm starting to think that is an even better idea than I did yesterday. See #39157

#25 @stevenkword
5 months ago

20899.4.diff builds upon a patch created in #39157 as an attempt to solve this problem by adding two new getter methods and modifying the wp_query conditionals. This allows for the ability to distinguish between a home page and a home feed as well as between a custom feed and a regular feed. This solution should protect against the regression mentioned by @danielbachhuber and @swissspidy above. Unit test pass as of 4.7.2.

@stevenkword
5 months ago

#26 @swissspidy
5 months ago

Thanks @stevenkword!

The patch works as expected and makes sense from a logical point of view. Especially when used in combination with #30210. Because of backward compatibility, these query tags are a bit of an outlier and we'd need to make sure they're documented accordingly. No objections from me.

#27 @stevenkword
4 months ago

#11053 was marked as a duplicate.

This ticket was mentioned in Slack in #core by stevenkword. View the logs.


4 months ago

#29 @stevenkword
4 months ago

  • Milestone changed from Future Release to 4.8

#30 @dlh
4 months ago

Hi @stevenkword,

I tested 20899.4.diff and found it generally worked as expected, but I had a few questions and comments along the way. My apologies if I've missed previous discussions about these.

  • Should is_home_feed() and is_custom_feed() be mutually exclusive? I ask because if I register add_feed( 'foo', 'do_feed_rss2' ), then my feed will be available at example.com/foo/, and I think I might then assume I was still looking at a "home feed."
  • Should is_custom_feed() be true for invalid feeds? Currently it looks like it is. I suppose that's consistent with is_feed()?
  • Along those lines, I was curious about the benefits of having an "is custom feed" conditional as opposed to "is bundled feed"? Not that "is custom feed" is unhelpful, but it seems like it currently assumes that something is a custom feed if it isn't a core feed. An "is bundled feed" conditional might be able to tell you roughly the same thing but with more certainty because it could test against a known list of core feeds.
  • Currently, is_home() will be false when is_home_feed() or is_custom_feed() is true. I think this is expected behavior, but I'm noting it just in case.
  • Lastly, should the new _doing_it_wrong() calls use 4.8.0 for the version?

This ticket was mentioned in Slack in #core by obenland. View the logs.


2 months ago

#32 @obenland
2 months ago

  • Milestone changed from 4.8 to Future Release
Note: See TracTickets for help on using tickets.