web-dev-qa-db-fra.com

Générer des codes courts par taxonomie

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 un type de message personnalisé "curseur" à l'aide de la vignette. J'ai également créé une taxonomie personnalisée.
Ce que je voudrais faire est de créer une boucle "foreach" basée sur le terme taxonomie qui crée un shortcode avec le nom taxonomie-terme ([conception], [développement] etc. .. OR [type de curseur = conception], [type de curseur = développer]) ne contenant que les publications du taxonomy_term.
Par exemple, [design] contient/affiche uniquement la publication avec la taxonomie de conception, [develop] contient/affiche uniquement la publication avec la taxonomie de développement, etc.


EDIT/UPDATE # 2

Je 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 crée le curseur. Ce n'est pas une façon intelligente ou appropriée, mais ça marche :)
UPDATE: 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. enter image description here

1
dborghez

Vous souhaitez définir un nombre potentiellement important de codes abrégés différents avec le rappel identiqueshortcode?

Pourquoi ne définissez-vous pas un shortcode unique , avec un attribut term? Par exemple

[sc term="london"]

ps:

Je pense que votre problème réside dans la partie $tax_term->name, qui pourrait être une chaîne de caractères telle que City of London et ce n'est pas un nom de shortcode valide. Essayez plutôt $tax_term->slug, mais je ne pense pas que ce soit une bonne stratégie!

Un autre problème est que vous définissez une fonction dans la boucle foreach. Cela devrait vous donner une erreur comme: Fatal error: Cannot redeclare examples_shortcode() ....

Vous devriez envisager d'utiliser WP_DEBUG dans votre développement. Voici un bon point de départ.

Mettre à jour:

Vous pouvez 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 diapositives (nr) selon vos besoins.

4
birgire

Il semble que vous ayez besoin d'un shortcode à fermeture séparée.
http://codex.wordpress.org/Shortcode_API sera une excellente lecture pour commencer.

1
Abhik