Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

How can I turn a URL like:

http://site.com/?project=5

into:

http://site.com/project/5/

?

I was looking the rewrite doc here: http://codex.wordpress.org/Class_Reference/WP_Rewrite#Examples

and came up with this

// Adding a new rule
function my_insert_rewrite_rules( $rules )
{
  $newrules = array();
  $newrules['(project)/(\d*)$'] = 'index.php?project=$matches[2]';
  return $newrules + $rules;
}

// Adding the id var so that WP recognizes it
function my_insert_query_vars( $vars )
{
    array_push($vars, 'project');
    return $vars;
}

add_filter( 'rewrite_rules_array','my_insert_rewrite_rules' );
add_filter( 'query_vars','my_insert_query_vars' );
add_action( 'wp', 'test');

function test()
{
 global $wp_rewrite;
 $wp_rewrite->flush_rules();
 if(isset($_GET['project'])){
   echo $_GET['project'];
   exit;
 }

};

but it doesn't work when I access for example http://site.com/project/2/

share|improve this question
    
what is a project? a custom post type? –  Milo May 7 '12 at 17:56
    
no. it's nothing, just a query variable i'm using –  Alexa May 7 '12 at 17:56
    
you can pass project as a query var, but your destination has to be something, like a page. –  Milo May 7 '12 at 19:33
add comment

2 Answers

up vote -2 down vote accepted

The PHP code is not enough, you need to edit your .htaccess file correspondingly. (You can do this with $wp_rewrite->mod_rewrite_rules(); somehow, or edit it manually.) However, be aware that URL rewriting is complicated stuff - are you sure you need it? If you are using pretty permalinks for posts/pages, chances are this will bork it up.

share|improve this answer
add comment

The simple way to do this is to create a page, and give it the slug project.

Then add your rewrite rule and query var:

add_action( 'init', 'my_insert_rewrite_rules' );
function my_insert_rewrite_rules(){
    add_rewrite_rule(
        'project/([0-9]+)/?$',
        'index.php?pagename=project&project=$matches[1]',
        'top' );
}

add_filter( 'query_vars', 'my_insert_query_vars' );
function my_insert_query_vars( $query_vars ){
    $query_vars[] = 'project';
    return $query_vars;
}

Then in your template, use get_query_var('project'); to retrieve the value of project.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.