WordPress.org

Make WordPress Core

Opened 8 months ago

Closed 8 months ago

Last modified 8 months ago

#39211 closed defect (bug) (fixed)

is_page_template could return true on terms

Reported by: natereist Owned by: johnbillion
Milestone: 4.7.1 Priority: normal
Severity: normal Version: 4.7
Component: Posts, Post Types Keywords: has-patch has-unit-tests fixed-major
Focuses: template Cc:

Description

Since this function no longer checks is_page(), the ID from get_queried_object_id will always be used to check the post template slug - this ID is not guaranteed to be a post ID. If that ID matches a Post ID with that page template it will return true even though that template is not being loaded. If that ID matches with any Post ID that does not have page template set it will most likely return true is_page_template() with no argument.

Attachments (4)

39211.patch (489 bytes) - added by natereist 8 months ago.
Added an is_singular check to the file.
39211.2.patch (2.5 KB) - added by dlh 8 months ago.
39211.diff (1.8 KB) - added by dlh 8 months ago.
39211.3.patch (1.8 KB) - added by dlh 8 months ago.

Download all attachments as: .zip

Change History (18)

#1 follow-up: @johnbillion
8 months ago

  • Component changed from General to Posts, Post Types
  • Keywords needs-patch needs-unit-tests added
  • Milestone changed from Awaiting Review to 4.7.1

Introduced in [38951].

The is_page() check should have been replaced with an is_singular() check.

@natereist
8 months ago

Added an is_singular check to the file.

#2 @natereist
8 months ago

  • Keywords has-patch added; needs-patch removed

First try at a patch, if I need to do anything differently let me know.

#3 in reply to: ↑ 1 @swissspidy
8 months ago

  • Owner set to swissspidy
  • Status changed from new to assigned

The is_page() check should have been replaced with an is_singular() check.

Ditto.

@natereist Thanks! I'd add braces according to our coding standards, but otherwise that's correct.

I'll try to add some unit tests if nobody else gets to it.

#4 @dlh
8 months ago

@swissspidy I can work on tests if you haven't started.

#5 @swissspidy
8 months ago

@dlh Not yet, so feel free :-) Thanks in advance!

@dlh
8 months ago

#6 @dlh
8 months ago

39211.2.patch includes a test that creates an ID shared between a term and a post assigned a template, and checks is_page_template() after visiting the term.

I also included a related change to Tests_Query_Conditionals and Tests_Query_VerbosePageRules. Their setUp() methods currently call set_permalink_structure() before create_initial_taxonomies(), such that the initial taxonomies won't have added their permastructs before the first test runs. The patch would flip the order of those calls.

You should be able to see the effect of the current order by running just test_is_page_template_not_singular() without applying the change to the two setUp() methods. At least for me, go_to( get_term_link() ) fails during Tests_Query_Conditionals, so the assertInstanceOf() also fails. Everything passes the second time through with Tests_Query_VerbosePageRules.

If the change to setUp() isn't going to work, then I can find another approach for the new test.

#7 @swissspidy
8 months ago

  • Keywords has-unit-tests added; needs-unit-tests removed

Tests behave as described/intended. Thanks!

#8 @johnbillion
8 months ago

  • Keywords needs-testing added

See [38654] (and the related links on its ticket) for the reason the permastructure is set before the initial taxonomies are re-registered.

@dlh
8 months ago

@dlh
8 months ago

#9 @dlh
8 months ago

39211.3.patch tests with user instead of a term, which I don't think would require changing setUp().

#10 @johnbillion
8 months ago

  • Keywords commit added; needs-testing removed
  • Owner changed from swissspidy to johnbillion
  • Status changed from assigned to reviewing

#11 @johnbillion
8 months ago

  • Resolution set to fixed
  • Status changed from reviewing to closed

In 39599:

Posts, Post Types: Ensure is_page_template() can only return true when viewing a singular post query.

Props natereist, dlh
Fixes #39211

#12 @johnbillion
8 months ago

  • Keywords fixed-major added; commit removed
  • Resolution fixed deleted
  • Status changed from closed to reopened

#13 @dd32
8 months ago

  • Resolution set to fixed
  • Status changed from reopened to closed

In 39608:

Posts, Post Types: Ensure is_page_template() can only return true when viewing a singular post query.

Props natereist, dlh, johnbillion.
Merges [39599] to the 4.7 branch.
Fixes #39211.

#14 @ocean90
8 months ago

#39413 was marked as a duplicate.

Note: See TracTickets for help on using tickets.