[wp-hackers] Taking over URL space
Dion Hulse (dd32)
wordpress at dd32.id.au
Thu Mar 1 11:56:04 UTC 2012
It looks like your generate_rewrite_rules callback is completely
wrong. $wp_review? $rules?
Using these filters is really old-school btw, using something like
add_rewrite_rule() is probably the best method.
But i'll leave this old example here for you:
http://dd32.id.au/files/wordpress/test-rewrite.php (ooh, it's over 2
years old.. )
On 1 March 2012 22:51, Phillip Lord <phillip.lord at newcastle.ac.uk> wrote:
>
>
> I thought this was what the flush_rules section achieved? I'd want this
> to happen programatically, though. Asking users to do this after
> installing the plugin does not seem good to me.
>
> Regardless, I have tried this and I still don't get the rewrite as I had
> expected. I think something is happening as /test returns 200, but a
> zero length file.
>
> Phil
>
> Chris Williams <chris at clwill.com> writes:
>
>> You need to go into the permalinks setting page, save the changes (even
>> without changing anything) and then your rewrite rules get invoked and
>> written.
>>
>> On 2/29/12 5:07 AM, "Phillip Lord" <phillip.lord at newcastle.ac.uk> wrote:
>>
>>>
>>>
>>>Thanks all for the comments. I have been trying these out, and with info
>>>from the WPrewrite documentation but can't get them to work.
>>>
>>>
>>>My plugin (complete with debug printouts!) looks like below. I have the
>>>template_redirect section working fine. I have a rule flusher on
>>>wp_loaded. The codex mentions this not as a long term solution because
>>>it's compute intensive.
>>>
>>>Then I have a generate_rewrite_rules filter. As far as I can tell it's
>>>never been called.
>>>
>>>I would like to try the add_rewrite_rule/add_rewrite_tag method, but I
>>>don't understand this. What are these two methods doing?
>>>
>>>Phil
>>>
>>>
>>>
>>>add_action( 'wp_loaded','my_flush_rules' );
>>>
>>>// flush_rules() if our rules are not yet included
>>>function my_flush_rules(){
>>> print( time() + "\n" );
>>> print( "4: my flush rules\n" );
>>> $rules = get_option( 'rewrite_rules' );
>>>
>>> if ( ! isset( $rules['test'] ) ) {
>>> print( "2: isset\n" );
>>> global $wp_rewrite;
>>> $wp_rewrite->flush_rules();
>>> }
>>>}
>>>
>>>
>>>add_filter( 'generate_rewrite_rules','test_phil_insert_rewrite_rules' );
>>>
>>>// Adding a new rule --- never called
>>>function test_phil_insert_rewrite_rules( $wp_review )
>>>{
>>> print( "insert rewrite rules\n" );
>>> $newrules = array
>>> (
>>> "test" => 'index.php?test-plugin=1&hello-world=1',
>>> );
>>>
>>> return $newrules + $rules;
>>>}
>>>
>>>
>>>
>>>// this bit is working
>>>add_filter( 'query_vars', 'test_query_vars' );
>>>
>>>function test_query_vars( $query_vars ){
>>> print( "test_query_vars\n" );
>>> $query_vars[] = "test-plugin";
>>> $query_vars[] = "hello-world";
>>>
>>> return $query_vars;
>>>}
>>>
>>>
>>>// this bit handles the request and it is working
>>>// as http://localhost/?test-plugin=1&hello-world=1 returns hello world
>>>function test_plugin_hello(){
>>> print( "test_plugin_hello" );
>>> $test_plugin = (boolean) get_query_var( 'test-plugin' );
>>> $hello_world = (boolean) get_query_var( 'hello-world' );
>>> if( !$test_plugin ) return;
>>>
>>> print( "Hello World" );
>>> exit();
>>>
>>>}
>>>add_action( 'template_redirect', 'test_plugin_hello' );
>>>
>>>
>>>
>>>Braydon <ronin at braydon.com> writes:
>>>
>>>> Here is another way to have new rules without using add_rewrite_rule:
>>>>
>>>> add_action( 'generate_rewrite_rules', 'my_rewrite_rules' );
>>>>
>>>> function my_rewrite_rules(){
>>>> global $wp_rewrite;
>>>> $rules = array(
>>>> 'myplugin/?$' => 'index.php?myplugin=1'
>>>> )
>>>> $wp_rewrite->rules =array_merge($rules,$wp_rewrite->rules);
>>>> }
>>>>
>>>> For using extensions on p, something like this could work:
>>>>
>>>> add_action('parse_request','my_parse_request' );
>>>>
>>>> function my_parse_request( &$request ) {
>>>> $post_id = $request->query_vars['p'];
>>>> // check if the post id has an extension
>>>> // also check the "Accept:" header
>>>> // add a new query_var for the extension, and change "p" variable
>>>>back to
>>>> an id
>>>> }
>>>>
>>>> However adding a new query_var for extension would be needed either way.
>>>>
>>>> add_filter( 'query_vars, 'my_query_vars' );
>>>>
>>>> function my_query_vars( $query_vars ){
>>>> $query_vars[] = 'myplugin';
>>>> $query_vars[] = 'ext';
>>>> return $query_vars;
>>>> }
>>>>
>>>> And then at the template redirect check for both the myplugin and ext
>>>> query_vars and then have your plugin handle those.
>>>>
>>>> On 02/21/2012 01:58 AM, Phillip Lord wrote:
>>>>> I was wondering whether someone could give me pointers in the right
>>>>> direction. I'm not after a complete solution! I was just hoping that
>>>>> someone with more knowledge of wordpress could tell me if I am heading
>>>>> in the right way.
>>>>>
>>>>> I wanted to write a new plugin which returns metadata about posts in a
>>>>> variety of different ways. To do this, I need to use various parts of
>>>>> the URL space, but I don't know how best to do this.
>>>>>
>>>>>
>>>>> Essentially, I want to do three things.
>>>>>
>>>>> 1) I would like to be able to use bits of the URL space from top level.
>>>>> So, for a wordpress at
>>>>>
>>>>> http://mydomain.org.uk
>>>>>
>>>>> I would like to be able to serve all requests to..
>>>>>
>>>>> http://mydomain.org.uk/myplugin
>>>>>
>>>>> My initial idea was to achieve all this with rewrite rules, but
>>>>> requiring users to modify .htaccess com. wp-rewrite seems the next
>>>>> option -- I can just rewrite requests to this and underlying rewrite
>>>>> plugin php?
>>>>>
>>>>>
>>>>> 2) I want to add support for file extension based access. So for a
>>>>> URL such as
>>>>>
>>>>> http://mydomain.org.uk/?p=46
>>>>>
>>>>> I'd like requests to
>>>>>
>>>>> http://mydomain.org.uk/?p=46.bib
>>>>>
>>>>> to be handled by my plugin, probably by sending the browser straight to
>>>>> a URL of the http://mydomain.org.uk/myplugin. I am not sure how well
>>>>> this would interact with pretty permalinks -- something of the form
>>>>>
>>>>> http://mydomain.org.uk/2012/02/02/mypost/
>>>>>
>>>>> looks daft with an extension
>>>>> http://mydomain.org.uk/2012/02/02/mypost/.bib
>>>>>
>>>>> However, as far as I can see this is a similar problem to the last.
>>>>>
>>>>> 3)
>>>>>
>>>>> And, finally, I'd like to provide a content negotiated solution. So
>>>>> requests to:
>>>>>
>>>>> http://mydomain.org.uk/?p=46
>>>>>
>>>>> will return different results depending on the content type in the
>>>>> Accept: header of the request; again, this will probably be implemented
>>>>> by forwarding the browser.
>>>>>
>>>>> This one seems to be the most taxing -- I can't do this with rewrite
>>>>> rules because it is the same in all cases.
>>>>>
>>>>> Any pointers gratefully received!
>>>>>
>>>>> Phil
>>>>>
>>>>> _______________________________________________
>>>>> wp-hackers mailing list
>>>>> wp-hackers at lists.automattic.com
>>>>> http://lists.automattic.com/mailman/listinfo/wp-hackers
>>>>>
>>>>> !DSPAM:4f436acf300322900114539!
>>>>>
>>>
>>>--
>>>Phillip Lord, Phone: +44 (0) 191 222 7827
>>>Lecturer in Bioinformatics, Email:
>>>phillip.lord at newcastle.ac.uk
>>>School of Computing Science,
>>>http://homepages.cs.ncl.ac.uk/phillip.lord
>>>Room 914 Claremont Tower, skype: russet_apples
>>>Newcastle University, msn: msn at russet.org.uk
>>>NE1 7RU twitter: phillord
>>>_______________________________________________
>>>wp-hackers mailing list
>>>wp-hackers at lists.automattic.com
>>>http://lists.automattic.com/mailman/listinfo/wp-hackers
>>
>> _______________________________________________
>> wp-hackers mailing list
>> wp-hackers at lists.automattic.com
>> http://lists.automattic.com/mailman/listinfo/wp-hackers
>>
>>
>
> --
> Phillip Lord, Phone: +44 (0) 191 222 7827
> Lecturer in Bioinformatics, Email: phillip.lord at newcastle.ac.uk
> School of Computing Science, http://homepages.cs.ncl.ac.uk/phillip.lord
> Room 914 Claremont Tower, skype: russet_apples
> Newcastle University, msn: msn at russet.org.uk
> NE1 7RU twitter: phillord
> _______________________________________________
> wp-hackers mailing list
> wp-hackers at lists.automattic.com
> http://lists.automattic.com/mailman/listinfo/wp-hackers
More information about the wp-hackers
mailing list