8726 sujets

Développement web côté serveur, CMS

Bonsoir,

Sur un ecommerce wordpress (woocommerce), je veux que mon client puisse créer des pages qui listent uniquement les produits d'une seule catégorie donc avec l'utilisation du shortcode woocommerce adéquat et ce pour des opérations commerciales ponctuelles.

Mais comme je fais un modèle de page spécifique, je ne veux pas que la page d'archive de ladite catégorie soit visuellement différente. Or l'utilisateur peut cliquer sur le menu page aussi bien que sur le menu catégorie. Et comme le slug de la catégorie sera différent à chaque nouvelle opération commerciale, je ne peux pas faire un modèle pour la page d'archive de la catégorie.

J'ai donc pensé détecter si l'on est sur une catégorie (si l'on a cliqué sur un lien de catégorie), et si c'est le cas, rechercher si une page existe avec le même slug et si elle existe, rediriger vers la page. Il suffira à mon client de créer une catégorie et une page dédiée avec le même slug.

Cela fonctionne bien, ma question est de savoir si je ne suis pas passé à côté d'un truc plus simple, ou si mon code n'est pas risqué (faire ce test à chaque affichage) :

function redirect_category_to_page() {
    // Si l'on est sur une catégorie
    if( is_product_category() ) {
        // On récupère la catégorie en cours
        $cat_en_cours = get_query_var( 'product_cat' );
        // On recherche une page possédant un slug équivalent à la catégorie en cours
        $args_posts = array(
            'post_type'      => 'page',
            'post_status'    => 'any',
            'name'           => $cat_en_cours,
            'posts_per_page' => 1,
        );
        $loop_posts = new WP_Query( $args_posts );
        if ( $loop_posts->have_posts() ) {
            // Si l'on trouve une telle page, on renvoie vers cette page
            wp_redirect(home_url( '/'.$cat_en_cours.'/' ), 301);
        }
    }
}
add_action('template_redirect', 'redirect_category_to_page');


Merci Smiley smile
Modifié par Manhattan (28 Dec 2016 - 17:29)