web-dev-qa-db-ja.com

add_rewrite_ruleとカスタム変数

私は長い間このようなことをしたいと思っていました。私はURLを持っています http://studionumberone.com/portfolio/obey-clothing/ はちょうど画像のjqueryギャラリーを示しています、私はそれからstudionumberone.com/portfolio/obey-clothing /?view = allを持っています。ギャラリー内のすべての画像が上下に表示されます。

そのURLをstudionumberone.com/portfolio/obey-clothing/allにします。

カスタム投稿タイプは基本的なことをします。

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

私は試してみました(運が悪い):

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

こんにちは @westondeboer:

あなたの投稿タイプが'portfolio'であると言っているので、これは私のWordPress v3.0.4テストサイトで'portfolio'カスタム投稿タイプが定義されているもので動作するものです。それはあなたが持っているすべてのコードを置き換えます:

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

また、パーマリンクを管理コンソールに保存することでできる書き換えルールをフラッシュする必要があります。これであなたの問題が解決するかどうかを教えてください。解決しない場合は明確にしてください。

更新

また、 `$ _GET ['view'] 'を使うのとは違った方法でクエリパラメータをキャプチャする必要があります。どちらでも動作します。

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

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