1

私の WordPress サイトには、 にあるポートフォリオがありwww.mysite.com/portfolio/ます。ポートフォリオのセクションとアイテムは、私が作成したカスタム プラグインを通じて管理されます。のような個々のアイテムにアクセスし、www.mysite.com/portfolio/my-cool-photo「my-cool-photo」をクエリ文字列に入れて?portfolio_item=my-cool-photo、コードから読み取ることができるようにしたいと考えています。

プラグイン アクティベーション PHP ファイルには、次のコードがあります。

function add_rewrite_rules($wp_rewrite) {
    $new_rules = array(
        'portfolio/(.+)/?$' => 'index.php?&portfolio_item=$1'
    );

    $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}
add_action('generate_rewrite_rules', 'add_rewrite_rules');

function query_vars($public_query_vars) {
    $public_query_vars[] = "portfolio_item";

    return $public_query_vars;
}
add_filter('query_vars', 'query_vars');

これで書き換えルールが配列に追加されてOK。問題は、それが何もしていないことです。行ってみるとwww.mysite.com/portfolio/testing/「ちょっと恥ずかしいでしょ?」って。WordPress 404 エラーページ。明らかにリダイレクトが機能していないため、クエリ文字列は入力されませんが、これを行ったことを確認するためだけに:

global $wp_query, $wp_rewrite;
if ($wp_rewrite->using_permalinks()) {
    $searchKey = $wp_query->query_vars['portfolio_item'];
} else {
    $searchKey = $_GET['portfolio_item'];
}

...そして、クエリ文字列が渡されていないことを確認してください。

足りないものはありますか?

4

2 に答える 2

0

URL コードを書き換える例を次に示します。うまくいけば、これはユーザーに役立ちます。

http://www.domainname.com/test-page?urltags=ABCDのようなこの URL では、http://www.domainname.com/test-page/ABCDとして実行されます。

<?php
function add_my_rule() {    
    global $wp; 
    $wp->add_query_var('tags');
    add_rewrite_rule('test-page/([^/]*)','index.php?pagename=test-page&urltags=$matches[1]','top');
}
function add_my_tags() {
    add_rewrite_tag('%urltags%', '([^&]+)');
}
add_action('init', 'add_my_rule');
add_action('init', 'add_my_tags', 10, 0);
?>
于 2016-08-26T10:19:29.170 に答える