¿Cómo crear una página dinámica en WordPress?

20 jul 2012, 11:11:53
Vistas: 15.4K
Votos: 4

Quiero crear algo similar a lo que hace BuddyPress con las páginas de miembros. Por ejemplo:
http://www.example.com/members/foo

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

etc.

Intenté revisar el código de BuddyPress y veo que no usan tipos de contenido personalizados ni taxonomías personalizadas. Tampoco parece que estén usando add_rewrite_rule().

Me gustaría tener algo similar, donde mi plugin tome 'foo' de la URL y genere contenido basado en eso. ¿Cuál es la mejor manera de hacerlo?

ACTUALIZACIÓN:

Seguí las instrucciones de este hilo, que es exactamente lo que quería: Cómo crear un perfil de usuario en el front-end con un permalink amigable

Aquí está el código:

    add_filter( 'query_vars', 'analytics_rewrite_add_var' );
function analytics_rewrite_add_var( $vars )
{
    $vars[] = 'analytic';
    return $vars;
}
// Agregar reglas de reescritura
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');
// Capturar la solicitud
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;
    }
}

Sin embargo, /analytics/foo/ todavía me da un error 404. ¿Qué estoy haciendo mal?

6
Comentarios

¿Puedes aclarar... qué contenido quieres en la página? Si quieres una página para cada Autor (como miembros en BuddyPress) entonces esto es posible

Damien Damien
20 jul 2012 11:27:24

El contenido puede ser cualquier cosa. Para efectos de discusión digamos que solo quiero mostrar la última parte de la URL, es decir, "foo" o "bar".

Deepak Mittal Deepak Mittal
20 jul 2012 11:38:00

¿Podría ser una variable get reescrita? como ?members=foo a members/foo ? Así podemos tener una sola página que cambie según la variable get.

Sisir Sisir
20 jul 2012 13:10:58

@DeepakMittal por favor aclara la taxonomía para la que quieres el ejemplo /category/foo o /tag/foo WordPress necesita saber qué es foo. Si foo es el TÍTULO de un post entonces /foo es simplemente el título de un post o página

Damien Damien
20 jul 2012 18:51:05

@Damien Es solo una cadena aleatoria. Puede ser cualquier cosa. Y no hay taxonomía.

Deepak Mittal Deepak Mittal
20 jul 2012 18:55:34

Nota que debes volver a guardar los enlaces permanentes cada vez que hagas un cambio como este. Visita la página Ajustes->Enlaces permanentes y guarda. Esto almacena la nueva regla en la base de datos.

Otto Otto
22 jul 2012 00:03:05
Mostrar los 1 comentarios restantes
Todas las respuestas a la pregunta 2
1

Aquí está la respuesta. Y para futuras referencias, Deepak, necesitas publicar la solución como una respuesta. En cambio, publicaste tu respuesta dentro de tu propia pregunta y luego hiciste un comentario sobre ello. Por favor no hagas eso.

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' );
21 jul 2012 01:59:07
Comentarios

@Deepak - Lo que se supone que debes hacer, si encuentras la solución a tu propia pregunta, es simplemente dejar la pregunta como tal y publicar la solución como una respuesta a tu propia pregunta.

Androliyah Androliyah
21 jul 2012 22:31:13
2
-2

Gracias, amigo. Puede que no haya sido claro con mi pregunta. Estaba teniendo exactamente el mismo problema: Cómo crear un perfil de usuario en el frontend con un permalink amigable

Lo solucioné con el código que pegué en mi pregunta anterior. Había olvidado limpiar las reglas, lo cual MadLem en IRC me pidió que hiciera y ahora está funcionando.

Disculpa por no ser claro, y gracias por tomarte el tiempo de responder :)

20 jul 2012 18:57:05
Comentarios

Deepak, creo que el código que publicaste en la actualización debería estar dentro de esta Respuesta en lugar de...

brasofilo brasofilo
20 jul 2012 19:30:55

Pensé que copiar y pegar el mismo código no sería una buena idea.

Deepak Mittal Deepak Mittal
21 jul 2012 11:21:14