web-dev-qa-db-fra.com

Afficher les pages et les articles dans les résultats de la recherche par catégorie

J'utilise "Mapper les catégories sur les pages" pour ajouter des catégories aux pages.

Lorsque j'appelle le lien http://mypage.com/category/catA+catB , je reçois tous mes articles associés aux catégories catA et catB. Ce que je recherche, c'est:

A) un moyen de faire quelque chose de similaire avec les pages: appelez http://mypage.com/pages/catA+catB et obtenez toutes les pages associées. aux catégories catA et catB

-ou-

B) un moyen d’obtenir les premières pages, puis les articles, sur la page de résultats de la recherche par catégorie, comme:

  • Une page
  • Une autre page
  • Quelques articles
  • Un autre article
  • Un article de plus
2
Hinek

Pour afficher les pages d'un index d'archives de catégories:

  1. Ajouter une taxonomie de catégorie à la variable Page post

    Les pages statiques, par défaut, ne sont associées à aucune taxonomie, y compris la taxonomie category. Vous devez donc enregistrer la taxonomie category pour le type d'article page, en utilisant register_taxonomy_for_object_type() :

    function wpse94150_register_category_taxonomy_for_page_post_type() {
        register_taxonomy_for_object_type( 'category', 'page' );
    }
    add_action( 'admin_init', 'wpse94150_register_category_taxonomy_for_page_post_type' );
    
  2. Créer des pages avec des catégories

    Auto-explicatif. Pour que les pages apparaissent dans un index d'archivage de catégories, vous devez disposer de pages ayant des catégories attribuées.

  3. Requête de filtre pour inclure le type de publication de page pour les pages d'index d'archives de catégories

    Ensuite, vous devez indiquer à WordPress d'inclure le 'page' après-type dans les résultats de la requête d'index d'archive de catégorie, en filtrant l'objet $query via pre_get_posts :

    function wpse94150_filter_pre_get_posts( $query ) {
        // Only modify the main loop query
        // on category archive index pages
        if ( $query->is_main_query && $query->is_category() ) {
            // Return both posts and pages
            $query->set( 'post_type', array( 'post', 'page' ) );
        }
    }
    add_action( 'pre_get_posts', 'wpse94150_filter_pre_get_posts' );
    
  4. Voir les pages d'index des archives de catégorie, maintenant avec les articles et les pages

    Accédez à example.com/category/cat-a et si des pages sont affectées à "Cat A", vous les verrez dans l'index des archives.

Modifier

  1. Où dois-je entrer le code de l'étape 3?

Je placerais le code de l'étape 3 au même endroit que celui de l'étape 1: idéalement dans un plug-in de fonctionnalité de site, ou comme sauvegarde moins idéale, dans le fichier functions.php d'un thème enfant.

Et 2. Ce changement sera-t-il stable si je mets à jour WordPress ou ses plugins?

Étant donné que ces modifications ne sont pas directement apportées à un fichier de base ou à un fichier de plug-in: oui, les modifications sont stables et évolutives. (À moins que WordPress ne modifie l'une des API ou des points d'ancrage sous-jacents, ce qui est extrêmement douteux.)

3
Chip Bennett

En fait, le plug-in "Mapper les catégories aux pages" a ses propres pages de paramètres avec une option " Afficher les pages sur les pages de catégorie ", qui fait exactement quoi Je voudrais.

De toute façon, j'ai marqué la réponse de Chip Bennett parce que cela résout le problème sans le plugin et qu'il est très détaillé. Merci Chip.

0
Hinek