How do I create a dynamic page?

The question:

I want to create something similar to what buddypress does with member pages. For eg;
http://www.example.com/members/foo

http://www.example.com/members/bar

etc.

I tried looking up the buddypress code and I see that they don’t use custom post type or a custom taxonomy. It also doesn’t look like they are using add_rewrite_rule() too.

I would like to have something similar, where my plugin will take ‘foo’ from the URL and generate content on basis of that. What’s the best way to do it?

UPDATE:

I followed instructions on this thread, which is exactly what I wanted: How to create a front end user profile with a friendly permalink

Here’s the code:

    add_filter( 'query_vars', 'analytics_rewrite_add_var' );
function analytics_rewrite_add_var( $vars )
{
    $vars[] = 'analytic';
    return $vars;
}
function add_analytic_rewrite_rule(){
    add_rewrite_tag( '%analytic%', '([^&]+)' );
    add_rewrite_rule(
        '^analytics/([^/]*)/?',
        'index.php?analytic=$matches[1]',
        'top'
    );
}
add_action('init', 'add_analytic_rewrite_rule');
add_action( 'template_redirect', 'analytics_rewrite_catch' );
function analytics_rewrite_catch()
{
    global $wp_query;

    if ( array_key_exists( 'analytic', $wp_query->query_vars ) ) {
        include ( get_stylesheet_directory() . '/html/analytics.php');
        exit;
    }
}

However, /analytics/foo/ still gives me a 404. What am I doing wrong?

The Solutions:

Below are the methods you can try. The first solution is probably the best. Try others if the first one doesn’t work. Senior developers aren’t just copying/pasting – they read the methods carefully & apply them wisely to each case.

Method 1

Here is the answer. And for future references, Deepak, you need to actually post the solution as an answer. Instead, you posted your answer within your own question and then made a comment about it. Please don’t do that.

function analytics_rewrite_add_var( $vars ) {
    $vars[] = 'analytic';
    return $vars;
}
add_filter( 'query_vars', 'analytics_rewrite_add_var' );

function add_analytic_rewrite_rule() {
    add_rewrite_tag( '%analytic%', '([^&]+)' );
    add_rewrite_rule(
        '^analytics/([^/]*)/?',
        'index.php?analytic=$matches[1]',
        'top'
    );
}
add_action('init', 'add_analytic_rewrite_rule');

function analytics_rewrite_catch() {
    global $wp_query;

    if ( array_key_exists( 'analytic', $wp_query->query_vars ) ) {
        include ( get_stylesheet_directory() . '/html/analytics.php');
        exit;
    }
}
add_action( 'template_redirect', 'analytics_rewrite_catch' );

Method 2

Thanks guy. I may have not been clear with my question. I was having this exact same problem:
How to create a front end user profile with a friendly permalink

I fixed it with the code I’ve pasted in my question above. I had forgotten to flush the rules, which MadLem on IRC asked me to do and it’s working now.

Sorry for not being clear, and thanks for taking time to answer 🙂


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

Leave a Comment