Merci à pluginiz pour cette solution qui me sauve sur un projet
Les cours sont classés par ordre où ils ont été donnés, du plus récent au plus ancien.
Merci à pluginiz pour cette solution qui me sauve sur un projet
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>',
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.
// add pages to admin menu
//https://stackoverflow.com/questions/39978561/how-to-add-custom-link-on-wordpress-admin-sidebar
add_action( 'admin_menu', 'linked_url' );
function linked_url() {
add_menu_page( 'linked_url', 'FAQ', 'read', '/post.php?post=29&amp;amp;action=edit', '', 'dashicons-text', 50 );
add_menu_page( 'linked_url', 'Liens utiles', 'read', '/post.php?post=49&amp;amp;action=edit', '', 'dashicons-admin-links', 55 );
// on va ajouter le lien vers la page d'accueil uniquement pour éditeur plus bas
}
// si lien externe dans admin menu
// add_action( 'admin_menu' , 'linkedurl_function' );
// function linkedurl_function() {
// global $menu;
// $menu[1][2] = "http://www.example.com";
// }
&amp;amp;nbsp;
add_action( 'admin_menu', 'add_admin_menu_separator' );
function add_admin_menu_separator()
{
add_menu_page( '', '', 'read', 'wp-menu-separator', '', '', '21' );
add_menu_page( '', '', 'read', 'wp-menu-separator', '', '', '56' );
// add_submenu_page( 'edit.php?post_type=page', 'wp-menu-separator', '', 'read', '11', '' );
}
// remove elements from editor menu
function remove_menus(){
// get current login user's role
$roles = wp_get_current_user()->roles;
// test role
if( !in_array('editor',$roles)){
return;
}
//remove menu from site backend.
remove_menu_page( 'index.php' ); //Dashboard
remove_menu_page( 'edit.php' ); //Posts
remove_menu_page( 'upload.php' ); //Media
remove_menu_page( 'edit-comments.php' ); //Comments
remove_menu_page( 'themes.php' ); //Appearance
remove_menu_page( 'plugins.php' ); //Plugins
// remove_menu_page( 'profile.php' ); //profile
// remove_menu_page( 'users.php' ); //Users
remove_menu_page( 'tools.php' ); //Tools
remove_menu_page( 'options-general.php' ); //Settings
// remove_menu_page( 'edit.php?post_type=page' ); //Pages
// remove_menu_page('edit.php?post_type=testimonial'); // Custom post type 1
// remove_menu_page('edit.php?post_type=homeslider'); // Custom post type 2
remove_menu_page( 'WPML' );
remove_menu_page( 'Traductions' );
remove_menu_page( 'wpml_manage_languages' );
remove_menu_page( 'sitepress-multilingual-cms/menu/languages.php' );
remove_menu_page( 'admin.php?page=wpml-translation-management/menu/translations-queue.php' );
remove_menu_page( 'admin.php' );
// remove_menu_page( '#toplevel_page_wpml-translation-management-menu-translations-queue' );
// ajout lien vers page d'accueil
add_menu_page( 'linked_url', 'Page d\'accueil', 'read', '/post.php?post=5&action=edit', '', 'dashicons-admin-home', 0 );
add_menu_page( 'linked_url', 'Page Contact', 'read', '/post.php?post=286&action=edit&lang=fr', '', 'dashicons-email-alt', 30 );
}
add_action( 'admin_menu', 'remove_menus' , 100 );
// add lang class to <body>
function append_language_class($classes) {
$classes[] = 'lang-' . ICL_LANGUAGE_CODE;
return $classes;
}
add_filter('body_class', 'append_language_class');
/**
* Enqueue a script in the WordPress admin on edit.php.
*
* @param int $hook Hook suffix for the current admin page.
*/
function wpdocs_selectively_enqueue_admin_script( $hook ) {
if ( 'post.php' != $hook ) {
return;
}
wp_enqueue_script( 'my_custom_script', get_stylesheet_directory_uri() . '/js/scripts-admin.js', array(), '1.0' );
}
add_action( 'admin_enqueue_scripts', 'wpdocs_selectively_enqueue_admin_script', PHP_INT_MAX );
// pour pouvoir styliser admin (et masquer éléments)
// custom admin style sheet
function my_admin_head() {
echo '<link href="'.get_stylesheet_directory_uri().'/css/wp-admin.css" rel="stylesheet" type="text/css">';
}
add_action('admin_head', 'my_admin_head');
Ce petit tuto a pour but de vous permettre de créer en quelques minutes seulement votre propre thème en WordPress. Ce tuto s’adresse à tout public qui est à l’aise avec le HTML & le CSS. Il permet d’aller chercher tous les contenus WordPress pour les intégrer dans une production HTML & CSS pré-existante. Ou à faire dans un 2e temps une fois tous les contenus WordPress affichés.
Pour obtenir un premier résultat, il suffit de :
/* Theme Name: NOM DE VOTRE THEME
URI: http://www.VOTRE-SITE.COM
Description: DESCRIPTION DE VOTRE THEME.
Version: 1.0
Author: VOTRE NOM
*/
Maintenant que nous avons affiché le contenu de notre page index.php en activant le thème, passons en revue les quelques tags WP les plus utiles pour commencer, je pense notamment à:
function ajouter_style() {
wp_enqueue_style( 'monstyle', get_stylesheet_uri() );
}
add_action( 'wp_enqueue_scripts', 'ajouter_style', PHP_INT_MAX );
Nous allons maintenant créer une boucle qui permet d’afficher tous les aritcles / posts. Par défaut ils seront affichés par ordre antéchronologique (les plus récent en premier)
labels->singular_name );
// Display post type slug
echo 'Post Type Slug: ' . esc_html( $post_type_obj->name );
?>
On peut aussi filtrer les boucles pour n’afficher que ce qui nous intéresse.
Requête plus complexe permettant de passer plus d’arguments. plus d’infos
'prof'
);
// 2) exécuter la requête et lancer la boucle
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) {
while ( $the_query->have_posts() ) {
$the_query->the_post();
?>
Dans functions.php, ajouter le code suivant
//activer image mise en avant
add_theme_support( 'post-thumbnails' );
//créer des propres tailles
add_image_size( 'images-moyennes', 312, 255, true );
add_image_size( 'images-grandes', 527, 390, true );
Lorsque l’on veut afficher cette taille personnalisée, on peut le faire de cette façon
On peut encore ajouter une fonction pour que ces tailles soient disponibles dans le menu dropdown des médias dans le contenu des articles
__('Images Moyennes'),
'images-grendes' => __('Images Grandes'),
));
} ?>
Vous verrez que par défaut il ne vous est pas possible d’ajouter un menu. Il faut le spécifier à WordPress. Dans le fichier functions.php, copier le code suivant:
// ajouter une zone de menu
register_nav_menu( 'primary', __( 'Navigation Menu' ) );
Ensuite dans votre thème, vous pouvez appeler votre menu de cette façon
On peut aussi passer toute une série d’arguments dans le menu, comme ici: pas de container autour du UL, un ID et des classes sur le UL
false, // Ne pas mettre de container
'menu_class' => 'navbar-nav fw-bold justify-content-end align-items-center flex-grow-1', // Ajouter des classes à
'menu_id' => 'navbar', // Ajouter un ID à
));
?>
Dans functions, copier ce code:
//personaliser "lire la suite"
function modify_read_more_link() {
return 'lire la suite...';
}
add_filter( 'the_content_more_link', 'modify_read_more_link' );
Ensuite dans le style personaliser la classe more-link
Dans functions, copier ce code:
// Enregistrer une zone appelée 'Ma zone de widgets'
function add_widget_Support() {
register_sidebar( array(
'name' => 'Ma zone de widgets',
'id' => 'zone-widgets',
'before_widget' => '',
'after_widget' => '',
'before_title' => '',
'after_title' => '
',
) );
}
// Hook the widget initiation and run our function
add_action( 'widgets_init', 'add_Widget_Support' );
// puis mettre ceci dans le thème à l'endroit désiré:
// Enregistrer une zone appelée 'Ma zone de widgets'
function add_widget_Support() {
register_sidebar( array(
'name' => 'Ma zone de widgets',
'id' => 'zone-widgets',
'before_widget' => '',
'after_widget' => '',
'before_title' => '',
'after_title' => '
',
) );
register_sidebar( array(
'name' => 'Ma zone de widgets 2',
'id' => 'zone-widgets-2',
'before_widget' => '',
'after_widget' => '',
'before_title' => '',
'after_title' => '
',
) );
}
// Hook the widget initiation and run our function
add_action( 'widgets_init', 'add_Widget_Support' );
// puis mettre ceci dans le thème à l'endroit désiré:
>
Pour terminer, il faut encore ajouter les 2 fonctions qui permettent à WordPress d’ajouter tout le code nécessaire au bon fonctionnement des plugins etc.
slug.'">'.$category->name.' ';
}
}
echo '
';
if (!empty($couleurs)) {
foreach ($couleurs as $couleur) {
echo '#'.$couleur->name.' ';
}
}
?>
I ran into this problem when I realised that there was a bug in Safari which brakes the column-count property in the print version. Since I didn’t find a solution for this (and I didn’t want o revamp the entire structure) we agreed with the customer on displaying a message to Safari users once they hit CTRL+P or CMD+P.
I combine the detection of CTRL+P or CMD+P press and the browser used :
document.addEventListener("keydown", function (event) {
// event.stopPropagation();
// event.preventDefault();
if(event.ctrlKey && event.keyCode == 80) // pour CTRL
{
console.log("CTRL + P was pressed!");
var ua = navigator.userAgent.toLowerCase();
if (ua.indexOf('safari') != -1) {
if (ua.indexOf('chrome') > -1) {
//alert("1chrome") // Chrome
} else {
alert("For best printing experience please use one of the following browsers // Pour une meilleure expérience d'impression, veuillez utiliser l'un des navigateurs suivants: Chrome, Firefox, Edge, Opera... autre que Safari!") // Safari
}
}
}
else if(event.metaKey && event.keyCode == 80) { // pour CMD mac
console.log("CMD + P was pressed!");
var ua = navigator.userAgent.toLowerCase();
if (ua.indexOf('safari') != -1) {
if (ua.indexOf('chrome') > -1) {
alert("1chrome") // Chrome
} else {
alert("For best printing experience please use one of the following browsers // Pour une meilleure expérience d'impression, veuillez utiliser l'un des navigateurs suivants: Chrome, Firefox, Edge, Opera... autre que Safari!") // Safari
}
}
}
else
{
// console.log("Something else was pressed.");
}
}); // document add listener
Cet article de yesyouweb répertorie les propriétés CSS les plus couramment utilisées.
https://yesyouweb.com/css3-guide-reference/