1 - Shortcode affiche le résultat d'une requête WP
/******************************************************************************************
*
* Shortcode ap_{shortcode_de_la_requete}()
*
* Ecrit une liste de Posts ou de CPT
*
* @param $slug_cpt post_type ('post' ou par ex. 'ressource')
* $posts_per_page posts_per_page
* $categorie all', 'current', ID categorie
*
* @src https://developer.wordpress.org/reference/classes/wp_query/
*
/******************************************************************************************/
add_shortcode( 'ap_{shortcode_de_la_requete}', 'ap_{shortcode_de_la_requete}' ) ;
function ap_{shortcode_de_la_requete} ( $atts )
{
/* ATTRIBUTS */
extract( shortcode_atts( array(
'slug_cpt' => 'post' , // type de Post Type (post ou CPT)
'posts_per_page' => 'all' , // nb de résultats
'categorie' => 'all' , // 'all' si toutes les catégories
// 'current' si page d'archive de catégorie
// id de la catégorie
), $atts ) ) ;
/* REQUÊTE */
$requete = ap_req_{nom_de_la_requete} ( $slug_cpt, $posts_per_page, $categorie ) ;
/* ACF (contrôle si ACF est actif) */
`
if ( !function_exists('get_field') ) return;
/* HTML */
$contenu = '' ;
$i = 0 ;
$contenu .= '' ;
/* Boucle s/résultats */
if ( !empty( $requete ) )
{
if ( count ( $requete ) == 1 ) // si un seul Post dans la Catégorie, on l'affiche
{
$ID = $requete[0]->ID ;
$title = get_the_title( $ID ) ;
$content = $requete[0]->post_content ; // ATTENTION : get_the_content( $ID ) ne fctn pas
// (NSPP - ne sais pas pourquoi)
$contenu .= '<article>' ;
$contenu .= '<h2 class="entry-title">' ;
$contenu .= '<a href="' . get_permalink( $ID ) . '">' . $title . '</a>' ;
$contenu .= '</h2>' ;
$contenu .= '<div class="post-content">' ;
$contenu .= '<p>' . $content . '</p>' ;
$contenu .= '</div>' ;
$contenu .= '</article>' ;
}
else // sinon on affiche la liste des Posts ou des CPT
{
foreach ( $requete as $resultat )
{
$ID = $resultat->ID ;
$title = get_the_title( $ID ) ;
$contenu .= '<article>' ;
$contenu .= '<h2 class="entry-title">' ;
$contenu .= '<a href="' . get_permalink( $ID ) . '">' . $title . '</a>' ;
$contenu .= '</h2>' ;
$contenu .= '<div class="post-content">' ;
$contenu .= '<p>' . get_the_excerpt( $ID ) . '</p>' ;
$contenu .= '</div>' ;
$contenu .= '</article>' ;
}
}
}
else
{
$contenu .= '<p>Aucune ressource dans cette catégorie.</p>' ;
}
/* Restore original Post Data */
wp_reset_postdata();
ob_start() ;
echo do_shortcode( $contenu ) ;
$html = ob_get_contents() ;
ob_end_clean() ;
return $html;
}
2 - Fonction requête (associée au shortcode précédent) sur Posts ou CPT
/******************************************************************************************
*
* Fonction ap_req_{nom_de_la_requete}()
*
* Effectue des requêtes sur les Ressources (CPT)
*
* @param $slug_cpt post_type ('post' ou par ex. 'ressource')
* $posts_per_page posts_per_page
* $categorie all', 'current', ID categorie
*
* @src https://developer.wordpress.org/reference/classes/wp_query/
*
/******************************************************************************************/
function ap_req_{nom_de_la_requete} ( $slug_cpt, $posts_per_page, $categorie )
{
$args = array ( 'post_type' => $slug_cpt,
'post_status' => 'publish' ,
'posts_per_page' => $posts_per_page == 'all' ? -1 : $posts_per_page ,
) ;
/* CATÉGORIE */
if ( $categorie != 'all' ) // Si Catégorie courante ou ID
{
if ( $categorie == 'current' ) // Catégorie courante (page d'archive de catégorie)
{
// Src. https://wordpress.stackexchange.com/questions/18652/get-category-id-inside-category-template
$category = get_queried_object() ;
if ( 'post_type' == 'post') // Posts [NON TESTÉ]
{
$args['cat'] = $category->term_id ;
}
else // CPT
{
$args['tax_query'] = array (
array (
'taxonomy' => $category->taxonomy ,
'field' => 'term_id' , // ou 'slug'
'terms' => $category->term_taxonomy_id ,
),
) ;
}
}
else // ID de la Catégorie [NON TESTÉ]
{
$cat = $categorie ;
}
}
/* ORDRE [NON TESTÉ]
$args['meta_key'] = '{cle_dordre}' ;
$args['orderby'] = 'meta_value' ;
$args['order'] = 'DESC' ; */
$query_{nom_de_la_requete} = new WP_Query( $args ) ;
// echo '<pre>' ; print_r( $query_{nom_de_la_requete}->posts ) ; echo '</pre>' ;
wp_reset_postdata() ;
return $query_{nom_de_la_requete}->posts ;
}
4 - Fonction requête simple
function ap_reqDefinitions ( $lettre )
{
$args = array ( 'post_type' => 'definition_lexique' ,
'post_status' => 'publish' ,
'posts_per_page' => -1 ,
'orderby' => 'title' ,
'order' => 'ASC' ,
) ;
$args['starts_with'] = $lettre ;
$query_definitions = new WP_Query( $args ) ;
// echo '<pre>' ; print_r( $query_definitions->posts ) ; echo '</pre>' ;
wp_reset_postdata() ;
// return $query_definitions->posts ; Autre méthode (ex. foreach ( $appels_projets as $appel_projets, dans FTL)
return $query_definitions ;
}
3 - Shortcode affiche la liste des Catégories
/******************************************************************************************
*
* Shortcode ap_arborescence_categories()
*
* Ecrit l'aboresence d'une Catégorie
*
* @param $taxonomy ex. 'category', 'categorie_ressource'
* $categorie 'all', 'current', ID categorie
*
/******************************************************************************************/
//echo '<pre>' ; print_r( $list_categories ) ; echo '</pre>' ;
add_shortcode( 'ap_arborescence_categories', 'ap_arborescence_categories' ) ;
function ap_arborescence_categories ( $atts )
{
/* ATTRIBUTS */
extract( shortcode_atts( array(
'taxonomy' => 'category' , // taxonomie (post ou CPT)
'categorie' => 'all' , // 'all' si toutes les catégories
// 'current' si page d'archive de catégorie
// id de la catégorie
), $atts ) ) ;
// https://www.sitepoint.com/wordpress-categories-api/
$args = array(
'taxonomy' => $taxonomy ,
// 'child_of' => $cat ,
'hide_empty' => 0 , // affiche même les Catégories sans Posts
'exclude' => 1 , // Retire les 'Non classés'
'current_category' => 1 , // pas utile sur une page Archive
'show_option_none' => 'Aucun sous-chapitre' , // texte lorsqu'il n'y a pas de Catégorie Enfant
'show_count' => 1 , // affiche les nombres de Posts
'pad_counts' => 0 , // ne compte pas les Posts dans les Enfants
'title_li' => '' , // supprime le titre de la liste (mais ajouter des ul)
'echo' => 0 , // pour stocker le résultat au lieu de l'afficher directement
) ;
/* */
if ( $categorie == 'current' ) // Catégorie courante (page d'archive de catégorie)
{
// Src. https://wordpress.stackexchange.com/questions/18652/get-category-id-inside-category-template
$category = get_queried_object() ;
$cat = $category->term_id ;
}
else
{
$cat = $categorie ;
}
// FAIRE PLUTÔT : ALL, PUIS CURRENT, PUIS ELSE (ID CATEGORIE)
$args['child_of'] = $cat ;
$list_categories = wp_list_categories( $args ) ;
return '<ul class="liste-categories">' . $list_categories . '</ul>' ;
}