WordPress : Générer des shortcodes 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 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->name
partie, qui pourrait être une chaîne comme City of London et ce n’est pas un nom de shortcode valide. Essayez $tax_term->slug
plutô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_DEBUG
dans 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->name
partie, qui pourrait être une chaîne comme City of London et ce n’est pas un nom de shortcode valide. Essayez $tax_term->slug
plutô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_DEBUG
dans 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