web-dev-qa-db-ja.com

ユーザーが "page-a"からカテゴリリンクにアクセスした場合は、 "page-a"スラッグをカテゴリリンクに追加します

以下のようなエリアページがあります。

http://www.example.com/area1

http://www.example.com/area2

各エリアページには、一般的なWPメニューがカテゴリを表示しています。説明する:

メニュー項目

- >カテゴリ1

- >カテゴリ2

以下のように私のパーマリンク設定を設定しました:

カスタム構造体:http://www.example.com/artiklar/%post_id%

だから今のところ私のカテゴリのURLは次のとおりです。

http://www.example.com/artiklar/category/category1

しかし、私の要件は、ユーザーがカテゴリページからカテゴリページcategory1を言うと仮定した場合ですarea1するとカテゴリURLは以下のようになります。

http://www.example.com/artiklar/category/category1?tag=area1

そしてカテゴリメニューがエリア2から訪問されるなら、それはそれであるべきです:

http://www.example.com/artiklar/category/category1?tag=area2

提案してください、私はウェブ上でこの種の構造を実装する方法を検索することによって何のアイデアも得られていません。

編集:

カテゴリURLにスラッグを追加することをより明確にするために(ユーザーがカテゴリリンクにアクセスするページから、そのページのスラッグがURLの最後にカテゴリURLに追加される)

1
jas

カテゴリリンクをフィルタリングして、カスタム変数をカテゴリリンクに追加します。カテゴリリンクアドレスをフィルタするために get_term_link フィルタを使用することができます。

これは非常に基本的な考え方です。

OPから取り出して、分類法categoryのビルドに属する用語にのみカスタム変数を追加する必要があり、実際のページ上にあり、URLにページIDを値として追加する場合にのみ、と仮定します。それを正確に行うためのフィルタ関数を作成することができます。そして、 add_query_arg() を使用して、新しいクエリ変数を追加できます。それをfrompageと呼びます。 URL.

これが基本的な機能で、あなたが適当と思うように拡張したり変更したりすることができます。分かりやすくするためにコードにコメントを付けました。

add_filter( 'term_link', function ( $termlink, $term, $taxonomy )
{
    // If this is not a page, return the unmodified term link
    if ( !is_page() ) // Change this to what is specific to your needs
        return $termlink;

    // Only target the build in taxonomy 'category'
    if ( $taxonomy !== 'category' ) // Adjust to your exact taxonomy
        return $termlink;

    // Get the current viewed paged id
    $current_id = get_queried_object_id();

    // Make sure we actually have a value, if not, return the term link
    if ( $current_id == 0 )
        return $termlink;

    // If we reached this point, we are good to go and should add our query var to the URL
    $termlink = esc_url( add_query_arg( ['frompage' => $current_id], $termlink ) );

    return  $termlink;
}, 10, 3 );

その後、次のように値を取得できます。

$value = filter_input( INPUT_GET, 'frompage', FILTER_VALIDATE_INT ); 
if ( $value )
    echo $value;

ここではfilter_inputの値を取得するために$_GETを使用しています。これは、そのfilter_inputが渡された値が存在するかどうかを検証し、それを返すかfalseを返すためです。また、値に使用するフィルタを渡すこともできます。この場合はFILTER_VALIDATE_INTです。結局のところ、それは$_GET( 'frompage)よりずっと良くて安全な方法です。

1
Pieter Goosen