Come creare una pagina dinamica in WordPress?

20 lug 2012, 11:11:53
Visualizzazioni: 15.4K
Voti: 4

Voglio creare qualcosa di simile a quello che fa Buddypress con le pagine dei membri. Ad esempio: http://www.example.com/members/foo

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

etc.

Ho provato a esaminare il codice di Buddypress e vedo che non utilizzano custom post type o una tassonomia personalizzata. Inoltre, non sembra che stiano usando add_rewrite_rule().

Vorrei avere qualcosa di simile, dove il mio plugin prenderà 'foo' dall'URL e genererà contenuti in base a quello. Qual è il modo migliore per farlo?

AGGIORNAMENTO:

Ho seguito le istruzioni in questa discussione, che è esattamente ciò che volevo: Come creare un profilo utente front-end con un permalink amichevole

Ecco il codice:

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;  
    }  
}  

Tuttavia, /analytics/foo/ mi restituisce ancora un errore 404. Cosa sto sbagliando?

6
Commenti

puoi chiarire... qual è il contenuto della pagina che desideri? se vuoi una pagina per ogni Autore (come i membri in BuddyPress) allora questo è possibile

Damien Damien
20 lug 2012 11:27:24

Il contenuto può essere qualsiasi. Per amor di discussione diciamo che voglio semplicemente visualizzare l'ultima parte dell'URL, cioè "foo" o "bar".

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

potrebbe essere una variabile get riscritta? come ?members=foo in members/foo ? Così possiamo avere una pagina che cambia in base alla variabile get.

Sisir Sisir
20 lug 2012 13:10:58

@DeepakMittal per favore chiarisci la tassonomia che vuoi come esempio /category/foo oppure /tag/foo WordPress deve sapere cosa è foo. Se foo è il TITOLO di un post allora /foo è semplicemente un titolo di post o pagina

Damien Damien
20 lug 2012 18:51:05

@Damien È solo una stringa casuale. Può essere qualsiasi cosa. E non c'è una tassonomia.

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

Nota che devi ri-salvare i permalink ogni volta che fai un cambiamento come questo. Visita la pagina Impostazioni->Permalink e salva. Questo salva la nuova regola nel database.

Otto Otto
22 lug 2012 00:03:05
Mostra i restanti 1 commenti
Tutte le risposte alla domanda 2
1

Ecco la risposta. E per riferimento futuro, Deepak, devi effettivamente pubblicare la soluzione come risposta. Invece, hai pubblicato la tua risposta all'interno della tua domanda e poi hai aggiunto un commento al riguardo. Per favore, non farlo.

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 lug 2012 01:59:07
Commenti

@Deepak - Quello che dovresti fare, se trovi la soluzione alla tua domanda, è semplicemente lasciare la domanda così com'è e pubblicare la soluzione come risposta alla tua stessa domanda.

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

Grazie ragazzo. Forse non sono stato chiaro con la mia domanda. Avevo esattamente questo stesso problema: Come creare un profilo utente frontend con un permalink amichevole

L'ho risolto con il codice che ho incollato nella mia domanda sopra. Mi ero dimenticato di eseguire il flush delle regole, cosa che MadLem su IRC mi ha chiesto di fare e ora funziona.

Scusa se non sono stato chiaro, e grazie per aver dedicato del tempo a rispondere :)

20 lug 2012 18:57:05
Commenti

Deepak, penso che il codice che hai postato nell'aggiornamento dovrebbe essere all'interno di questa risposta invece...

brasofilo brasofilo
20 lug 2012 19:30:55

Pensavo che copiare-incollare lo stesso codice non fosse una buona idea.

Deepak Mittal Deepak Mittal
21 lug 2012 11:21:14