WordPress : Générer des shortcodes par taxonomie

Publié par Jean-Michel le

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
entrez la description de l'image ici

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.

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *