0

I really want to figure this out.

What I want to do, is this URI

http://www.hotels-lithuania.net/index.php?page=76&type=hotels&id=1

transform to

http://www.hotels-lithuania.net/item/hotels/1

Actually I have read tons of pages, what I come to is this:

add_action( 'init', 'wpa5413_init' );
function wpa5413_init()
{
    add_rewrite_rule(
        'item/([^/]+)/([^/]+)?',
        'index.php?page=76&type=$matches[1]&id=$matches[2]',
        'top' );
}
add_filter( 'query_vars', 'wpa5413_query_vars' );
function wpa5413_query_vars( $query_vars )
{
    $query_vars[] = 'type';
    $query_vars[] = 'id';
    return $query_vars;
}

If I enter hotels-lithuania.net/item/hotels/1 to my browser it cuts to hotels-lithuania.net/item/ and of course no items displayed.

Screen from rewrite analyzer plugin: https://i.sstatic.net/AgNoq.png

EDIT: I dont know why, but I had guid in my db with value localhost/hotel/?page_id=76

So my final rewrite_rule looks like this:

add_action( 'init', 'wpa5413_init' );
function wpa5413_init()
{
    add_rewrite_rule(
        'item/([^/]+)/([^/]+)?',
        'index.php?page_id=76&itemType=$matches[1]&itemId=$matches[2]',
        'top' );
}
add_filter( 'query_vars', 'wpa5413_query_vars' );
function wpa5413_query_vars( $query_vars )
{
    $query_vars[] = 'itemType';
    $query_vars[] = 'itemId';
    return $query_vars;
}

And using these variables with:

global $wp;
$type = $wp->query_vars['itemType'];
$id = $wp->query_vars['itemId'];
1

1 Answer 1

2

I suspect you have a conflict with your query vars. id is already a WordPress query var, and type is a reserved word. You should use vars that you know will be unique among core and any plugin you may use by prefixing everything, like zilvinas_id and zilvinas_type.

2

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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