WordPress : Générer des shortcodes par taxonomie
WordPress : shortcode de slider filtré par terme de taxonomie 📦
- 1· Objectif — Créer un slider via shortcode 
[slider type="design"]ou[slider type="develop"], qui n’affiche que les slides associées à un terme donné d’une taxonomie personnalisée. - 2· Solution — Utiliser 
WP_Queryavectax_querypour cibler un terme spécifique. - 3· Syntaxe du shortcode :
 
[slider type="design" nr="5"]
- 4· Attributs personnalisables :
type= slug du terme de la taxonomie (ex : « design »)nr= nombre de slides à afficher
 - 5· Astuce affichage — Le shortcode doit retourner du HTML, pas l’écho, sinon il s’affiche hors position. Utiliser 
ob_start()+return ob_get_clean(). 
➡️ Résultat : un slider modulaire et réutilisable par type, positionné correctement dans toutes les zones de contenu (éditeur, page builder, colonnes, etc.).
Vérifiez ce code :
function slide_group() {                    
        register_taxonomy('Group', 'slides', array(
           'hierarchical' => true /*visualizza come le categorie*/, 'label' => 'Group',
           'query_var' => true, 'rewrite' => true));}
     add_action('init', 'slide_group', 0);
function square_slider_template() {
            // Query Arguments
            $args = array(
                        'post_type' => 'slides',
                        'posts_per_page'    => 5
                    );  
            // The Query
            $the_query = new WP_Query( $args );
            // Check if the Query returns any posts
            if ( $the_query->have_posts() ) {
            // Start the Slider ?>
            <div class="flexslider">
                <ul class="slides">
                    <?php       
                    // The Loop
                    while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
                        <li>
                        <?php // Check if there's a Slide URL given and if so let's a link to it
                        if ( get_post_meta( get_the_id(), 'square_slideurl', true) != '' ) { ?>
                            <a href="<?php echo esc_url( get_post_meta( get_the_id(), 'square_slideurl', true ) ); ?>">
                        <?php }
                        // The Slide's Image
                        echo the_post_thumbnail();
                        // Close off the Slide's Link if there is one
                        if ( get_post_meta( get_the_id(), 'square_slideurl', true) != '' ) { ?>
                            </a>
                        <?php } ?>
                        </li>
                    <?php endwhile; ?>
                </ul><!-- .slides -->
            </div><!-- .flexslider -->
            <?php }
            // Reset Post Data
            wp_reset_postdata();
        }
    // Slider Shortcode
        function square_slider_shortcode() {
            ob_start();
            square_slider_template();
            $slider = ob_get_clean();
            return $slider;
        }
        add_shortcode( 'slider', 'square_slider_shortcode' );
Ce code crée un curseur basé sur le type de message personnalisé « slider » à l’aide de l’image miniature. J’ai également créé une taxonomie personnalisée.
Ce que je ferais, c’est créer une boucle « foreach » basée sur le terme de taxonomie qui crée un shortcode avec le nom du terme de taxonomie ( [design], [develop] etc. OU [slider type=design], [slider type= develop] ) qui contiennent uniquement les messages du taxonomy_term.
Par exemple, [design] contient/affiche uniquement le message avec la taxonomie de conception, [develop] contient/affiche uniquement le message avec la taxonomie de développement, etc.
MODIFIER/MISE À JOUR #2
j’en suis à cette étape :
    function square_slider_shortcode( $atts = array(), $content = '' )
{
    $atts = shortcode_atts( array(
                        'type'      => '00', // default type
                    ), $atts, 'square_slider' );
    // Sanitize input:
    $pid = sanitize_title( $atts['type'] );
    // Output
    return square_slider_template( $pid );    
}
add_shortcode( 'slider', 'square_slider_shortcode' );
function square_slider_template( $pid = '' )
{
$args = array(
    'post_type'       => 'slides',
    'p'           => $pid,
);  ?>
<?php
    // The Query
    $query = new WP_Query( $args );
    // Check if the Query returns any posts
    if ( $query->have_posts() ) {
    // Start the Slider ?>
    <div class="flexslider">
        <ul class="slides">
            <?php       
            // The Loop
            while ( $query->have_posts() ) : $query->the_post();
                for ($i = 1; $i <= 10; $i++):
                    $num_slide="slide_" . $i;
                    $slide = get_field($num_slide);
                    ?>                                      
                    <?php if (!empty($slide)): ?><li><img src="<?php echo $slide; ?>"></li>
                    <?php endif; ?>
            <?php endfor; ?> 
            <?php endwhile; ?>
        </ul><!-- .slides -->
    </div><!-- .flexslider -->
    <?php }
    // Reset Post Data
    wp_reset_postdata();
}
J’ai résolu de cette façon, je crée une boucle avec les diapositives et je vais créer le curseur. Ce n’est pas une manière intelligente ou la bonne manière, mais ça marche 🙂
MISE À JOUR : tout fonctionne mais le curseur apparaît toujours en haut de la page, indépendamment de la position dans l’éditeur.
J’ai essayé de le mettre dans un autre shortcode comme [one_third][slider type="98"][/one_third][one_third_last]casual words[/one_third_last]mais il apparaît en dehors de la balise div comme vous pouvez le voir dans l’image
Solution n°1 trouvée
Il semble que vous ayez besoin d’un shortcode à fermeture automatique.
http://codex.wordpress.org/Shortcode_API sera une excellente lecture pour commencer.
Solution n°2 trouvée
Vous souhaitez définir un nombre potentiellement énorme de shortcodes différents avec le même rappel de shortcode ?
Pourquoi ne définissez-vous pas un seul shortcode, avec un attribut term ? Par exemple
[sc term="london"]
ps:
Je pense que votre problème réside dans la $tax_term->namepartie, qui pourrait être une chaîne comme City of London et ce n’est pas un nom de shortcode valide. Essayez $tax_term->slugplutôt, mais je ne pense pas que ce soit une bonne stratégie !
Un autre problème est que vous définissez une fonction à l’intérieur de la boucle foreach. Cela devrait vous donner une erreur du type : Fatal error: Cannot redeclare examples_shortcode() ....
Vous devriez envisager de l’utiliser WP_DEBUGdans votre développement. Voici un bon point de départ.
Mise à jour:
Vous pourriez utiliser par exemple :
function square_slider_shortcode( $atts = array(), $content = '' )
{
    $atts = shortcode_atts( array(
                        'type'      => 'sport', // default type
                        'nr'        => 5,       // default number of slides
                    ), $atts, 'square_slider' );
    // Sanitize input:
    $type = sanitize_title( $atts['type'] );
    $nr   = (int) $atts['nr'];
    // Output
    return square_slider_template( $type, $nr );    
}
add_shortcode( 'slider', 'square_slider_shortcode' );
où:
function square_slider_template( $type = '', $nr = 5 )
{
    // Query Arguments
    $args = array(
        'post_type'       => 'slides',
        'posts_per_page'  => $nr,
        'tax_query'       => array(
             array(
                'taxonomy' => 'slides',
                'field'    => 'slug',
                'terms'    => $type,
             ),
        ),      
    );  
    // The Query
    $the_query = new WP_Query( $args );
    // ... etc ...
    return $html;
}
Alors votre syntaxe de shortcode serait:
[slider type="sport" nr="5"]
où vous pouvez maintenant modifier le terme ( type) et le nombre de diapositives ( nr) selon vos besoins.
Solution n°3 trouvée
Il semble que vous ayez besoin d’un shortcode à fermeture automatique.
http://codex.wordpress.org/Shortcode_API sera une excellente lecture pour commencer.
Solution n°4 trouvée
Vous souhaitez définir un nombre potentiellement énorme de shortcodes différents avec le même rappel de shortcode ?
Pourquoi ne définissez-vous pas un seul shortcode, avec un attribut term ? Par exemple
[sc term="london"]
ps:
Je pense que votre problème réside dans la $tax_term->namepartie, qui pourrait être une chaîne comme City of London et ce n’est pas un nom de shortcode valide. Essayez $tax_term->slugplutôt, mais je ne pense pas que ce soit une bonne stratégie !
Un autre problème est que vous définissez une fonction à l’intérieur de la boucle foreach. Cela devrait vous donner une erreur du type : Fatal error: Cannot redeclare examples_shortcode() ....
Vous devriez envisager de l’utiliser WP_DEBUGdans votre développement. Voici un bon point de départ.
Mise à jour:
Vous pourriez utiliser par exemple :
function square_slider_shortcode( $atts = array(), $content = '' )
{
    $atts = shortcode_atts( array(
                        'type'      => 'sport', // default type
                        'nr'        => 5,       // default number of slides
                    ), $atts, 'square_slider' );
    // Sanitize input:
    $type = sanitize_title( $atts['type'] );
    $nr   = (int) $atts['nr'];
    // Output
    return square_slider_template( $type, $nr );    
}
add_shortcode( 'slider', 'square_slider_shortcode' );
où:
function square_slider_template( $type = '', $nr = 5 )
{
    // Query Arguments
    $args = array(
        'post_type'       => 'slides',
        'posts_per_page'  => $nr,
        'tax_query'       => array(
             array(
                'taxonomy' => 'slides',
                'field'    => 'slug',
                'terms'    => $type,
             ),
        ),      
    );  
    // The Query
    $the_query = new WP_Query( $args );
    // ... etc ...
    return $html;
}
Alors votre syntaxe de shortcode serait:
[slider type="sport" nr="5"]
où vous pouvez maintenant modifier le terme ( type) et le nombre de diapositives ( nr) selon vos besoins.

0 commentaire