[wp-hackers] Possible bug with endpoints

Seamus Leahy leahy at au.org
Fri May 18 19:32:56 GMT 2007




On 5/18/07 2:04 PM, "Jennifer Hodgdon" <yahgrp at poplarware.com> wrote:

> Seamus --
> 
> I may be wrong, but I don't think you can change the endpoint code as
> you are suggesting, because I think it will break the use of endpoints
> of this form:
> 
>      existingurl/testendpoint/val/
> 
> Endpoints of this form work with the existing rewrite code, and tell
> it to set up q['testendpoint'] = 'val' in the query vars. This is used
> for things like tags, language switching, etc., and appears to be what
> the endpoint code was set up to do, rather than just having
> 
>      existingurl/testendpoint/
> 
> with no trailing value, as you are trying to do.

You may very well be correct there. I went off for on the little
documentation I found
<http://codex.wordpress.org/User:DavidHouse/WP_Rewrite_API#add_endpoint.28.2
9>:

    add_endpoint()
    Add a new endpoint like /trackback/

Also, if I try existingurl/testendpoint/fooval/, I cannot find any reference
to testendpoint or fooval when doing a var_dump of $wp_query with the
original code.  I assume that those values would exist in $wp_query (I could
wrong).
 
> By the way, did you try isset instead of empty, in your redirect
> function? It is possible that that will fix your issue, but i am not
> sure without testing it (or reading the query parsing code more than I
> have time to do at the moment).

When I try using isset(), it always returns true because
get_query_var/$wp_query->get will return an empty string instead of null if
nothing is found.

> Hope this helps clarify --
>      Jennifer
> 
> 
> Seamus Leahy wrote [in part]:
>> I think I have found a bug with rewrite endpoints, but I would like for
>> someone with more experience and knowledge to check it out since I am a
>> newbie at hacking WordPress.
> 
> [snipped]
> 
>> 
>> I created a test plugin and I did the testing with WP 2.2.
>> The plugin:
>> 
>> -----------------------------------------------------------------
>> <?php
>> /*
>> Plugin Name: Test Endpoint
>> Plugin URI:
>> Description: 
>> Version: 1.0
>> Author: Seamus Leahy
>> */
>> function TestEndpoint(){
>>     add_action('init', 'TestEndpointInit');
>>      add_action('template_redirect', 'TestEndpointRedirect');
>> }
>> 
>> function TestEndpointInit(){
>>     global $wp_rewrite;
>>     $wp_rewrite->add_endpoint("testendpoint", EP_ALL);
>>      $wp_rewrite->flush_rules();
>> }
>> 
>> function TestEndpointRedirect(){
>>     $my_var = get_query_var('testendpoint');
>> 
>>     if (empty($my_var)){
>>          return;
>>      }
>>     
>>     die( '<h1>We hit the endpoint: testendpoint!</h1>');
>> 
>> }
>> 
>> TestEndpoint();
>> 
>> ?>
>> -----------------------------------------------------------------
>> 
>> The test:
>>   1. Install the plugin and activate it
>>   2. Go to an existing page, append to the URL "/testendpoint/", and go to
>> the new URL
>>      - Expected results: " We hit the endpoint: testendpoint!"
>>      - Actually results: The original page without the endpoint
>>   3. Change the file /wp_include/rewrite.php as stated above
>>   4. Repeat step 2
>>       - Actually results:  " We hit the endpoint: testendpoint!"
> 

Seamus.
leahy at au.org | x220



More information about the wp-hackers mailing list