lab.elastik

Wordpress - Bloc 3

Derniers cours : Wordpress

Les cours sont classés par ordre où ils ont été donnés, du plus récent au plus ancien.

Totalement désactiver les commentaires dans WordPress

Totalement désactiver les commentaires dans WordPress

Vous trouverez ici toutes les fonctions à introduire dans functions.php afin de totalement désactiver les fonctionnalités liées aux commentaires dans WordPress.
				
					add_action('admin_init', function () {
    // Redirect any user trying to access comments page
    global $pagenow;
     
    if ($pagenow === 'edit-comments.php') {
        wp_safe_redirect(admin_url());
        exit;
    }
 
    // Remove comments metabox from dashboard
    remove_meta_box('dashboard_recent_comments', 'dashboard', 'normal');
 
    // Disable support for comments and trackbacks in post types
    foreach (get_post_types() as $post_type) {
        if (post_type_supports($post_type, 'comments')) {
            remove_post_type_support($post_type, 'comments');
            remove_post_type_support($post_type, 'trackbacks');
        }
    }
});
 
// Close comments on the front-end
add_filter('comments_open', '__return_false', 20, 2);
add_filter('pings_open', '__return_false', 20, 2);
 
// Hide existing comments
add_filter('comments_array', '__return_empty_array', 10, 2);
 
// Remove comments page in menu
add_action('admin_menu', function () {
    remove_menu_page('edit-comments.php');
});
 
// Remove comments links from admin bar
add_action('init', function () {
    if (is_admin_bar_showing()) {
        remove_action('admin_bar_menu', 'wp_admin_bar_comments_menu', 60);
    }
});


				
			

Updates to ACF Field Functions in 5.11 & Registering Fields via PHP

Faire des requêtes personnalisées dans des Custom Post Types (CPT) contenant des Advanced Custom Fields (ACF)

Faire des requêtes personnalisées dans des Custom Post Types (CPT) contenant des Advanced Custom Fields (ACF)

Cet article fournit un exemple complet sur la manière dont je filtre les utilisateurs sur base de valeurs introduites via ACF (âge, genre…)

Etude cas d’une requête dans les Users

Dans quasiment tous les projets que je réalise en WordPress j’utilise des CPT combinés à des ACF. Dans mes pages j’utilise également régulièrement des filtres avec lesquels je charge en AJAX des contenus sur base de requêtes personnalisées. Ces requêtes sont basées sur des arrays qui contiennent:

  • le champ à comparer
  • la valeur à comparer avec la valeur contenue dans le champ de la DB
  • le type de comparaison « > = <« 

Il est ensuite possible d’inclure tous ces arrays dans la requête.

Dans l’exemple ci-dessous je charge des utilisateurs sur base de critères comme l’âge, la région, le genre etc. au moyen de la fonction get_users()

Dans cette fonction je passe les arrays que j’ai définis préalablement et que je décrirai plus bas

Requête au moyen de la fonction get_users() et meta_query

				
					$blogusers = get_users( array( 
    'role__in' => array(  'subscriber' ),
    //  'meta_key' => "genre",
     'meta_query' => array($arraygenre,$arrayage,$arrayregion,$arrayetudes,$arrayenfants),
     
     ) ); // recuperation des users sur base des filtres

				
			

Définition des arrays (que j’annule si une valeur vide est passée

				
					// filtre GENRE
// si pas de valeur dans ce filtre, on en fait un array vide comme ça pas pris en compte dans la requête
if ($genre == "tous") {
    $arraygenre = array();
} else {
    $arraygenre =  array(
        'key' => 'genre',
        'value' => $genre,
        'compare' => '='
    );
}


// filtre REGION
// si pas de valeur dans ce filtre, on en fait un array vide comme ça pas pris en compte dans la requête
if ($region == "tous") {
    $arrayregion = array();
} else {
    $arrayregion =  array(
        'key' => 'region',
        'value' => $region,
        'compare' => '='
    );
}


// filtre ETUDES
// si pas de valeur dans ce filtre, on en fait un array vide comme ça pas pris en compte dans la requête
if ($etudes == "tous") {
    $arrayetudes= array();
} else {
    $arrayetudes =  array(
        'key' => 'niveau_detudes',
        'value' => $etudes,
        'compare' => '='
    );
}


// filtre ENFANTS
// si pas de valeur dans ce filtre, on en fait un array vide comme ça pas pris en compte dans la requête
if ($enfants == "tous") {
    $arrayenfants= array();
} else {
    $arrayenfants =  array(
        'key' => 'enfants',
        'value' => $enfants,
        'compare' => '='
    );
}



// filtre AGE MIN ET MAX
$arrayage = array(
    array(
    'key' => 'age',
    'value' => $agemax,
    'compare' => '<='
    ),
        array(
            'key' => 'age',
            'value' => $agemin,
            'compare' => '>='
        )
);
				
			

Boucle à travers les résultats.

En suite je récupère toutes les valeurs dans une boucle while

				
					foreach ( $blogusers as $user ) {

    $author_id = $user->ID;
    $image = get_field('tsm_local_avatar', 'user_'.$author_id );
    $genre = get_field('genre', 'user_'.$author_id );
    $age = get_field('age', 'user_'.$author_id );
    $celibataire_depuis= get_field('celibataire_depuis', 'user_'.$author_id ); 

}
				
			

WordPress pagination post suivant et précédent avec image mise en avant

WordPress pagination post suivant et précédent avec image mise en avant

Pour les besoins d’un site qui présente des portraits, je devais pouvoir passer au post précédent et suivant au moyen d’un lient contenant le titre du post mais aussi l’image en avant. Voici le script complet.

J’ai ajouté une condition pour ne pas afficher précédent sur le premier post ni suivant sur le dernier

				
					<?php
// https://njengah.com/wordpress-next-previous-post-with-thumbnail-pagination/
$prev = get_previous_post();
$next = get_next_post();
?>

<?php if(!empty($prev->ID)) {   ?>
<a href="&lt;?php echo get_permalink( $prev-" data-wpel-link="internal">ID ); ?>">
<?php _e("Portrait pécédent", "thisishomemade"); ?><br>
<?php echo apply_filters( 'the_title', $prev->post_title ); ?>
<?php echo get_the_post_thumbnail($prev->ID, 'thumbnail'); ?>
</a>
<?php } ?>

<?php if(!empty($next->ID)){ ?>
<a href="&lt;?php echo get_permalink( $next-" data-wpel-link="internal">ID ); ?>">
<?php _e("Portrait suivant", "thisishomemade"); ?><br>
<?php echo apply_filters( 'the_title', $next->post_title ); ?>
<?php echo get_the_post_thumbnail($next->ID, 'thumbnail'); ?>
</a>
<?php } ?>
				
			

Une boucle est néanmoins possible au moyen de ce script.

merci à https://gist.github.com/banago/5603826 !

				
					<?php 
/**
 *  Infinite next and previous post looping in WordPress
 */
if( get_adjacent_post(false, '', true) ) { 
	previous_post_link('%link', '&larr; Previous Post');
} else { 
    $first = new WP_Query('posts_per_page=1&order=DESC'); $first->the_post();
    	echo '<a href="&#039; . get_permalink() . &#039;" data-wpel-link="internal">&larr; Previous Post</a>';
  	wp_reset_query();
}; 
    
if( get_adjacent_post(false, '', false) ) { 
	next_post_link('%link', 'Next Post &rarr;');
} else { 
	$last = new WP_Query('posts_per_page=1&order=ASC'); $last->the_post();
    	echo '<a href="&#039; . get_permalink() . &#039;" data-wpel-link="internal">Next Post &rarr;</a>';
    wp_reset_query();
}; 

?>
				
			

Comment ajouter les nouveaux CPT aux archives category & tag

Merci à pluginiz pour cette solution qui me sauve sur un projet

WordPress comment récupérer le slug du post (postslug)

Récupérer toutes les catégories / taxonomies associées à un post pour les afficher en tant que classe

Masquer les événements passés dans un agenda réalisé avec ACF

Comment ajouter des classes à un menu WordPress et à son container ? Par exemple pour le rendre compatible avec Bootstrap

Je développe régulièrement des thèmes WordPress à partir d’un layout fourni en Adobe XD ou autre et j’utilise essentiellement Bootstrap pour  pour son système de grille mais aussi pour sa navigation. Dans le component de navigation de Bootstrap une série de classes et d’ID sont nécessaires à son fonctionnement. Sur le container du menu, sur le menu en soi (élément UL) ainsi que sur les LI et les A à l’intérieur des LI.

Je décris ci-dessous les fonctions utilisés dans le fichier functions.php. J’y ajoute des arguments à la création du menu qu’il faudra donc ajouter à l’appel de la fonction <?php wp_nav_menu($args);  ?> dans le thème.

Dans l’exemple ci-dessous je vais vais décrire comment appliquer au menu WordPress les classes nécessaires à la création de la Navbar décrite dans la documentation de Bootstrap https://getbootstrap.com/docs/4.0/components/navbar/#nav 

UPDATE BOOTSTRAP 5 !!!

https://github.com/AlexWebLab/bootstrap-5-wordpress-navbar-walker

 

et modifier la ligne

'items_wrap' => '<ul id="%1$s" class="navbar-nav me-auto mb-2 mb-md-0 %2$s">%3$s</ul>',
comme ceci
'items_wrap' => '<ul id="%1$s" class="navbar-nav">%3$s</ul>',

Comment customiser l’interface du backend de WordPress en fonction des rôles d’utilisateurs

Pour un client qui a des éditeurs dans différentes organismes, il fallait impérativement que chaque éditeur ne voie que ce qu’il pouvait modifier.

J’ai donc trouvé des scripts à mettre dans le fichier functions.php qui me permettaient d’ajouter et supprimer des éléments dans le menu de l’admin.

Mais il me fallait ensuite encore cacher différents éléments sur toutes les pages. J’ai lors trouvé un script me permettant d’ajouter une feuille de style pour l’interface d’admin dans le thème du site ! Cela permet donc que le fichier css ne soit pas écrasé lors de la màj de WordPress.

Ensuite j’ai encore du trouver un script me permettant de mettre une classe dans le body de l’admin avec le rôle de l’utilisateur connecté. Cela me permet donc de m’adresser à chaque rôle individuellement dans mon fichier CSS.

Je compile ci-dessous tous les scripts tels que je les ai adaptés. Dans mes commentaires se trouvent les liens vers les sources originales.