web-dev-qa-db-fra.com

add_rewrite_rule et variable personnalisée

Je voulais faire quelque chose de similaire comme ça depuis longtemps. J'ai une url http://studionumberone.com/portfolio/obey-clothing/ qui montre simplement la galerie d'images jQuery, j'ai ensuite studionumberone.com/portfolio/obey-clothing/?view=all. Ce qui montre toutes les images de la galerie les unes au dessus des autres.

Je voudrais que l'URL soit studionumberone.com/portfolio/obey-clothing/all

Le type de message personnalisé fait simplement un élément de base:

<?php get_header(); 
$view = $_GET['view'];
?>
<?php if ($view == "all") { ?>
show all images
<?php } else { ?>
show gallery shortcode 
<?php } ?>
<?php get_footer(); ?>

J'ai essayé (pas de chance):

add_action( 'init', 'ss_permalinks' );
function ss_permalinks() {
    add_rewrite_rule(
        '([^/]+)/all/?',
        'index.php?view=all&service=$matches[1]',
        'top'
);
}
add_filter( 'query_vars', 'ss_query_vars' );
function ss_query_vars( $query_vars ) {
    $query_vars[] = 'view';
    return $query_vars;
}
3
westondeboer

Bonjour @westondeboer:

Puisque vous dites que votre type de message est 'portfolio', voici ce qui fonctionne sur mon site de test WordPress v3.0.4 avec un type de message personnalisé 'portfolio' défini. Il remplace tout le code que vous avez:

add_action('init','yoursite_init');
function yoursite_init() {
  global
  $wp,$wp_rewrite;
  $wp->add_query_var('view');
  $wp_rewrite->add_rule('portfolio/([^/]+)/all',
    'index.php?view=all&post_type=portfolio&name=$matches[1]', 'top');

  // Once you get working, remove this next line
  $wp_rewrite->flush_rules(false);  
}

Vous devez également vider vos règles de réécriture en enregistrant vos liens permanents dans la console d’administration. Faites-moi savoir si cela résout votre problème et si ce n'est pas le cas, donnez-moi des éclaircissements.

METTRE À JOUR

Vous devez également capturer le paramètre de requête différemment de l’utilisation de `$ _GET ['view'] '; l'un ou l'autre fonctionnera:

// Option 1
$view = {$GLOBALS['wp']->query_vars['view'];

// Option 2
global $wp;
$view = $wp->query_vars['view'];
6
MikeSchinkel