IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WordPress PHP Discussion :

Relation entre 2 CPT avec ACF


Sujet :

WordPress PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 200
    Par défaut Relation entre 2 CPT avec ACF
    Bonjour,

    J'aimerais réaliser une relation entre 2 CPT en évitant que l'utilisateur doive aller dans les 2 pour créer la liaison.

    Dans l'absolu, j'aimerais que l'utilisateur n'aille que dans un seul CPT (redaction) qui reste assez basique : Un champ titre, un champ texte, un champ image, un champ lien pour doc ou url, et enfin un champ sélecteur pour sélectionner son parent(créé avec ACF).

    Dans la hiérarchie du site, ces posts créés sont en fin de course, donc, sont uniquement que de post enfants. Ils s'afficheront avec "single.php".

    Le site contient bien évidement différents menu qui ont aussi différents sous-menu, une front-page.php pour la page d’accueil, pour les menus principaux on a les pages archive et pour les sous-menu des pages single.

    Les autres CPT sont les menus du site qui contiennent chacun leurs sous-menu respectif. L'utilisateur n'a pas à aller ici, d’où le faite que j'aimerais créer une relation parent/enfant qu'en allant dans le CPT enfant.

    Par exemple, dans ma page d'accueil(front-page.php), j'ai une partie "Entreprise" si je clic dessus, j'arrive sur "archive.creb.php" ou il y a "Bureau","Secrétariat" et "Régie", si je clique sur "Bureau" j'arrive sur "single.creb.php", dans cette partie, il y a "l'équipe" et "le calendrier", si je clique sur "l'équipe", j'arrive sur "single.php".

    La page l'équipe (tout comme la page "le calendrier") est un article rédigé par l'utilisateur.

    Du coup je cherche un moyen pour que, quand l'utilisateur créer un article, qu'il puisse choisir ou celui-ci va être(avec le champ sélecteur d'ACF), et donc choisir sont parent ET en +, que le lien de l'article s'affiche dans ce parent.

    Je sais faire ce genre d'opération en configurant un champ relationnel dans les 2 CPT concernés avec ACF, mais pas avec un seul.

    J'ai fait quelques recherches, notamment sur la doc d'ACF et j'ai trouvé ceci :

    https://www.advancedcustomfields.com.../relationship/
    https://www.advancedcustomfields.com...onship-fields/

    J'ai donc essayé d'adapter l'exemple d'ACF avec mon code mais c'est pas simple car pas tout à fait pareil... En schématisant l'exemple d'ACF au miens ça donne ceci :

    Nom : Sans titre2.png
Affichages : 246
Taille : 71,3 Ko

    Dans les 2 cas il y a bien une création de champ de sélection, sauf que dans l'exemple d'ACF son sélecteur choisi l'enfant et moi le parent. J'ai donc tenté d'inverser, en utilisant le code de single.location.php dans mon single.creb.php.... Mais ça ne marche pas.. ma page single.creb.php affiche une boucle de lien vers lui même

    Voilà... J'espère avoir été clair dans ma question ! En espérant avoir une réponse

    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 668
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 668
    Par défaut
    dans les exemples d'éléments que vous montrez, on a :
    • les éléments "bureau" "secrétaria" et "régie" qui sont les racines et n'ont donc pas de parent
    • le bureau a pour éléments enfants "l'équipe" et "le calendrier"

    c'est bien ça ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 200
    Par défaut
    Effectivement c'est bien cela ! Bureau, Secrétariat et Régie sont des archives, le seul parent en commun qu'ils ont est la page d'accueil du site, et Bureau à 2 enfants les pages "l'équipe" et "le calendrier" qui sont des single.php

  4. #4
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 668
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 668
    Par défaut
    dans ce cas je pense que le champ du type "relation" n'est pas une bonne idée mais plutot un champ "lien vers la publication" qui va enregistrer l'identifiant du parent.

    avec cette information vous pouvez donc récupérer le lien vers le parent.
    et pour avoir tous les enfants, vous pouvez utilisez "get_posts" pour récupérer les éléments qui ont l'élément courant en tant que parent.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 200
    Par défaut
    Alors petite faute de ma part... En faite Bureau, Secrétariat et Régie on bien un parent, et sont finalement des single, et non pas des archives. Ils sont les enfants de l'archive Entreprise, qui est lui même l'enfant de la page d'accueil !

    Pour faire simple voici le code :

    functions.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    function custom_post_type(){
        $arg = [
            'public'=> true,
            'label'=> 'ENTREPRISE',
            'show_in_rest' => true,
            'supports'=>array('title', 'thumbnail', 'excerpt'),
            'has_archive'=>true,
            'menu_icon'=> 'dashicons-welcome-view-site'
        ];
        register_post_type('ent', $arg);
     
        $arg = [
            'public'=> true,
            'label'=> 'redaction',
            'show_in_rest' => true,
            'supports'=>array('title', 'thumbnail', 'excerpt'),
            'has_archive'=>true,
            'menu_icon'=> 'dashicons-book-alt'
        ];
        register_post_type('redaction', $arg);
    }
    add_action('init', 'custom_post-type');
    archive-ent.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    <?php get_header(); ?>
    <!-- archive ent -->
    <main id="" class="">
        <div class="">
            <h1 class="">Archive ENT</h1>
            <?php
                if(have_posts()){?>
                    <div class="">
                        <div class="">
                            <?php while(have_posts()){
                                the_post();?>
                                <div class="">
                                   <a href="<?php the_permalink(); ?>">
                                      <?php
                                           the_title('<p>','</p>');
                                           the_post_thumbnail('');
                                      ?>
                                    </a>
                               </div>
                            <?php } ?>
                        </div>
                    </div>                
                <?php } ?>
        </div>
    </main>
     
    <?php get_footer(); ?>
    single-ent.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    <?php get_header(); ?>
    <!-- single ent -->
    <main id="" class="">
        <div class="">
            <h1 class="">single ENT</h1>
            <?php
                if(have_posts()){
                    while(have_posts()){
                        the_post();
                        the_title();
                        the_excerpt();
                        get_post();
                       // ici manque du code pour lister les articles enfants
                    };
                };
            ?>    
        </div>
    </main>
     
    <?php get_footer(); ?>
    single.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    <?php get_header(); ?>
    <!-- single creb -->
    <main id="" class="">
        <div class="">
            <h1 class="">single</h1>
            <?php
                if(have_posts()){
                    while(have_posts()){
                        the_post();
                        the_title();
                        $redac = get_field('texte');
                        if($redac){
                            echo $redac;
                        };
                        $img = get_field('img');
                        if($img){
                            echo wp_get_attachment_image($img, 'modale');
                        }
                        if (have_rows('liendocurl')){?>
                            <ul class="">
                                <?php while (have_rows('liendocurl')){
                                    the_row();
                                    $nom = get_sub_field('nomlien');
                                    $docurl = get_sub_field('urllien');?>
                                    <li>
                                        <a href="<?php echo $docurl; ?>" target="_blank">
                                            <?php echo $nom ?>
                                        </a>
                                    </li>
                               <?php } ?>
                            </ul>
                        <?php } 
                        $lien = get_field('relation');
                        // ici manque code pour retourner au parent
                    };
                };
            ?>    
        </div>
    </main>
     
    <?php get_footer(); ?>
    Voici quelques image de mon B-O :

    Nom : 2.png
Affichages : 244
Taille : 67,9 Ko

    Nom : 1.png
Affichages : 235
Taille : 55,5 Ko

    Pour la partie rédaction et sa configuration via ACF :

    Nom : 6.png
Affichages : 233
Taille : 85,1 Ko

    Nom : 3.png
Affichages : 235
Taille : 75,6 Ko

    Et donc lors de la création du post, j'ai bien un menu déroulant pour sélectionner son parent :

    Nom : 7.png
Affichages : 239
Taille : 3,4 Ko


    Voilà j'en suis là et je ne sais pas trop comment faire après avec "get_posts", j'imagine qu'il se mets dans la partie parent de l'article, c'est à dire dans single-ent.php...

  6. #6
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 668
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 668
    Par défaut
    et donc dans les paramètres du lien, vous avez "Filtrer par type de publication" sur "entreprise et redaction" ?

    pour get_posts, vous pouvez trouver la documentation là :
    https://developer.wordpress.org/refe...ons/get_posts/

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Relations entre les tables avec MySQL Query Browser
    Par HICHAM BOUAJANI dans le forum Outils
    Réponses: 0
    Dernier message: 21/07/2018, 23h24
  2. [AC-2010] Relation entre 2 tables avec conditions ?!
    Par PetitChris dans le forum Modélisation
    Réponses: 4
    Dernier message: 16/05/2014, 18h44
  3. relation entre 3 classe avec power AMC
    Par marwazmandar dans le forum PowerAMC
    Réponses: 4
    Dernier message: 21/06/2012, 15h39
  4. [AC-2003] les relations entre tables access avec un code vb.net
    Par Walid(Tun) dans le forum VBA Access
    Réponses: 5
    Dernier message: 13/10/2010, 22h31
  5. Réponses: 4
    Dernier message: 02/09/2009, 15h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo