web-dev-qa-db-fra.com

Ajouter "page-a" slug au lien de catégorie si l'utilisateur visite le lien de catégorie de "page-a"

J'ai des pages de zone comme ci-dessous:

http://www.example.com/area1

http://www.example.com/area2

Sur chaque page de zone, les menus wp courants affichent des catégories . Pour illustrer:

Articles de menu:

-> catégorie1

-> catégorie2

J'ai défini mes paramètres de lien permanent comme ci-dessous:

Structure personnalisée: http://www.example.com/artiklar/%post_id%

Donc pour l'instant, mon URL de catégorie est:

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

Mais mes exigences sont lorsque la page de catégorie de visite utilisateur suppose category1 à partir de la page area say area1 alors l'URL de la catégorie devient comme ci-dessous:

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

Et si le menu de catégorie est visité de la zone 2, alors il devrait être:

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

S'il vous plaît suggérer, je ne me fais pas une idée en cherchant sur le web comment mettre en œuvre ce type de structure.

EDIT:

En essayant de préciser que je veux ajouter un slug de page à l'URL de la catégorie (page à partir de laquelle l'utilisateur visitera le lien de la catégorie, le slug de cette page sera ajouté à l'URL de la catégorie à la fin de l'URL)

1
jas

Vous voudriez filtrer le lien de catégorie pour ajouter la variable personnalisée au lien de catégorie. Vous pouvez utiliser le filtre get_term_link pour filtrer l'adresse du lien de catégorie.

Voici une idée très basique:

Supposons que nous, tirés de OP, il ne soit nécessaire d’ajouter la variable personnalisée qu'aux termes appartenant à la taxonomie intégrée dans la variable category, et uniquement lorsque nous sommes sur une page réelle et que nous souhaitons ajouter l’ID de la page comme valeur à l’URL, nous pouvons créer une fonction de filtre pour faire exactement cela, et en utilisant add_query_arg() , nous pouvons ajouter une nouvelle variable de requête, appelons-la frompage, à la URL.

Voici une fonction de base que vous pouvez étendre et modifier à votre guise. J'ai commenté le code pour le rendre facile à suivre

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

Vous pouvez ensuite récupérer la valeur comme suit:

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

Notez que j'ai utilisé filter_input ici pour obtenir la valeur $_GET. En effet, filter_input valide si la valeur transmise existe et la renvoie ou renvoie false. De plus, vous pouvez passer un filtre à utiliser sur la valeur, dans ce cas FILTER_VALIDATE_INT. Dans l’ensemble, c’est un moyen bien meilleur et plus sûr que $_GET( 'frompage) `

1
Pieter Goosen