web-dev-qa-db-ja.com

WordpressのURL書き換え正規表現

書き換えとして追加するために、このURLを正規表現テンプレートに書き込む方法を学習しようとしていますが、問題があります。私は自分でそれを理解するために様々な正規表現サンドボックスを試してみましたが、テストのためにここから式をコピーするとき、それらは例えば '/'を許しません: enter image description here

私は2つの分類法(雑誌、号)を持つカスタム投稿タイプ(出版物)を持っています。これは私が見栄えの良いURLを作成しようとしています。

だから私はこれをどうやって変換することができるかを調べるためにここに来ました

index.php?post_type=publications&magazine=test-mag&issue=2016-aug

出力可能なテンプレート化された正規表現( publication magazine および issue は定数)への変換

http://example.com/test-mag/2016-aug/

そのページから記事がフォローされている場合は、拡張の余地があることを願います。

前もって感謝します。

3
4t0m1c

ワードプレスのドキュメントから - https://codex.wordpress.org/Using_Permalinks

投稿の複数のカテゴリで%category%を使用する

1つの投稿に複数のカテゴリを割り当てると、パーマリンクに表示できるのは1つだけです。カテゴリはアルファベット順に並んでいます。サブカテゴリの各グループでは、順番もアルファベット順になります。 (カテゴリの管理を参照)。通常通り、投稿はすべてのカテゴリからアクセス可能です。

ただし、スラッグlistpublicationsを使用してページを作成し、次のコードを追加することで、必要なものに到達できます。

add_action('init', 'rewrite');
add_filter('query_vars', 'query_vars');

function rewrite(){
    add_rewrite_rule('listpublications/([^/]+)/([^/]+)/?$', 'index.php?pagename=listpublications&magazine=$matches[1]&issue=$matches[2]','top');
}

function query_vars($query_vars) {
    $query_vars[] = 'magazine';
    $query_vars[] = 'issue';
    return $query_vars;
}

それでは設定 - >パーマリンクに行き、保存をクリックしてください。これは新しい書き換え規則を追加するので、これは 非常に重要です です。

テーマフォルダ内にpage-listpublications.phpという名前のテンプレートファイルを作成し、フッターとヘッダーの間に次のコードを追加します。

 global $wp_query;

    $query_args = array(
    // show all posts matching this query
        'posts_per_page'    =>   -1,
    // show the 'publications' custom post type
        'post_type'         =>   'publications',
        // query for you custom taxonomy stuff
        'taq_query' => array(
            array(
                'taxonomy'  =>   'magazine',
                'field'     =>   'slug',
                'terms'     =>   $wp_query->query_vars['magazine']
                ),
            array(
                'taxonomy'  =>   'issue',
                'field'     =>   'slug',
                'terms'     =>   $wp_query->query_vars['issue']
                )
            )

        );

   //fetch results from DB
    $query = new WP_Query( $query_args );

    if ($query->have_posts()):  while ($query->have_posts()): $query->the_post(); 
     // do something sweet with the results
    the_content();

www.yourdomain.com/listpublications/test-mag/2016-augにアクセスすると、テスト雑誌および2016年8月号のすべての出版物が表示されます。

お役に立てれば :)

1
Florian