Compare commits

..

9 Commits

Author SHA1 Message Date
Nonimart
6d7485dbcf FIX theme prefixing function remove rank math to avoid errors
All checks were successful
continuous-integration/drone/push Build is passing
2025-10-28 17:20:05 +01:00
Gilles Van Assche
259f22641d Fix Hide litespeed in the admin 2025-10-24 09:36:28 +02:00
Gilles Van Assche
1e668d4383 Fix scroll to the thanks message after form submission 2025-10-23 15:36:35 +02:00
Gilles Van Assche
4619080ebb Fix appearance and alert on the NL part 2025-09-26 16:42:50 +02:00
Gilles Van Assche
65da02dd62 Fix filtering and columns acf 2025-09-26 16:42:21 +02:00
Gilles Van Assche
eb4830a478 Fix taxonomy checkfield behavior 2025-09-26 11:19:05 +02:00
Gilles Van Assche
67611f7838 Fix accroche in violet 2025-09-25 15:00:53 +02:00
Gilles Van Assche
b0d46454aa FIX Titles and accroche front page 2025-09-16 11:24:47 +02:00
Gilles Van Assche
9112b5c3a8 Fix inversion Fr Nl Namur 2025-09-11 10:49:33 +02:00
7 changed files with 252 additions and 71 deletions

View File

@ -53,10 +53,19 @@
get_template_part("template-components/heading-box", null, array( get_template_part("template-components/heading-box", null, array(
"pageIcon" => $pageIcon, "pageIcon" => $pageIcon,
"title" => $currentPage->post_title ?? "", "title" => $currentPage->post_title ?? "",
"description" => __("Cherchez une entreprise ou un artisan", "metiers-patrimoine-theme"), "description" => __("Cherchez une entreprise", "metiers-patrimoine-theme"),
)); ));
?> ?>
<section class="accroche-sectio text-center">
<?php if(ICL_LANGUAGE_CODE=='fr'): ?>
<p class="text-primary">Trouvez un professionnel pour rénover une ancienne menuiserie, un balcon, un vitrail,<br/> ou tout autre élément ancien qui caractérise votre bâtiment.</p>
<?php elseif(ICL_LANGUAGE_CODE=='nl'): ?>
<p class="text-primary">Zoek een vakman voor het renoveren van oud schrijnwerk, een balkon, <br/>een glas-in-loodraam of andere oude elementen die karakteristiek zijn voor uw gebouw.</p>
<?php endif; ?>
</section>
<section class="artisans-posts"> <section class="artisans-posts">
<?php get_template_part("template-parts/artisan-filter-sidebar", null, array("foundPosts" => $initialPosts->found_posts)); ?> <?php get_template_part("template-parts/artisan-filter-sidebar", null, array("foundPosts" => $initialPosts->found_posts)); ?>

View File

@ -4,7 +4,7 @@
SUPPRIMER LA COLONNE RANK MATH SEO SI ELLE EST PRÉSENTE SUPPRIMER LA COLONNE RANK MATH SEO SI ELLE EST PRÉSENTE
------------------------------------------------------------------------*/ ------------------------------------------------------------------------*/
function remove_rank_math_seo_column_for_artisans($columns) function artisans_patrimoine_remove_rank_math_seo_column_for_artisans($columns)
{ {
if (isset($columns['rank_math_seo_details'])) { if (isset($columns['rank_math_seo_details'])) {
unset($columns['rank_math_seo_details']); unset($columns['rank_math_seo_details']);
@ -13,7 +13,7 @@ function remove_rank_math_seo_column_for_artisans($columns)
} }
// Appliquer le filtre uniquement pour le post type "artisans" // Appliquer le filtre uniquement pour le post type "artisans"
add_filter('manage_artisans_posts_columns', 'remove_rank_math_seo_column_for_artisans', 20); add_filter('manage_artisans_posts_columns', 'artisans_patrimoine_remove_rank_math_seo_column_for_artisans', 20);
// ACF SAVE POST // ACF SAVE POST
@ -35,20 +35,36 @@ add_action('acf/save_post', 'save_acf_post_mdp_status');
function metiers_patrimoine_artisans_add_acf_posts_columns($columns) function metiers_patrimoine_artisans_add_acf_posts_columns($columns)
{ {
global $current_screen; global $current_screen;
$my_current_lang = apply_filters('wpml_current_language', NULL);
// SUPPRIMER LA COLONNE 'date' // SUPPRIMER LA COLONNE 'date'
if (isset($columns['date'])) { if (isset($columns['date'])) {
unset($columns['date']); unset($columns['date']);
} }
$customColumns = array(
'metiers' => 'Métiers', if($my_current_lang == 'nl'):
'elements' => 'Éléments du bâtiment', $customColumns = array(
'conseiller' => 'Conseiller', 'metiers' => 'Métiers',
'state' => 'État', //'elements' => 'Éléments du bâtiment',
'mdpstatus' => 'Statut de travail', 'conseiller' => 'Conseiller',
'lastmodified' => 'Dernière modification', 'state' => 'État',
'onlinedate' => 'Mise en ligne' 'lastmodified' => 'Dernière modification',
); 'onlinedate' => 'Mise en ligne',
'remark' => 'Remarque'
);
else:
$customColumns = array(
'metiers' => 'Métiers',
//'elements' => 'Éléments du bâtiment',
'conseiller' => 'Conseiller',
'state' => 'État',
'mdpstatus' => 'Statut de travail',
'lastmodified' => 'Dernière modification',
'onlinedate' => 'Mise en ligne',
'remark' => 'Remarque'
);
endif;
$new_admin_col_arrays = array_slice($columns, 0, 2, true) + $customColumns + array_slice($columns, 2, count($columns) - 2, true); $new_admin_col_arrays = array_slice($columns, 0, 2, true) + $customColumns + array_slice($columns, 2, count($columns) - 2, true);
return array_merge($new_admin_col_arrays); return array_merge($new_admin_col_arrays);
} }
@ -59,9 +75,9 @@ add_filter('manage_artisans_posts_columns', 'metiers_patrimoine_artisans_add_acf
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------
GESTION DE LA VALEUR DE CHAQUE COLONNE GESTION DE LA VALEUR DE CHAQUE COLONNE
------------------------------------------------------------------------*/ ------------------------------------------------------------------------*/
function metiers_patrimoine_artisans_handle_posts_custom_columns($column) function metiers_patrimoine_artisans_handle_posts_custom_columns($column, $post_id)
{ {
$post_id = get_the_ID(); //$post_id = get_the_ID();
if ($column == 'conseiller') { if ($column == 'conseiller') {
$conseiller = get_field('conseiller', $post_id); $conseiller = get_field('conseiller', $post_id);
@ -106,24 +122,24 @@ function metiers_patrimoine_artisans_handle_posts_custom_columns($column)
echo '<p class="no-results"> × </p>'; echo '<p class="no-results"> × </p>';
} }
} }
if ($column == 'elements') { // if ($column == 'elements') {
$terms = get_the_terms_organised_by_parent('elementsbatiments', $post_id); // $terms = get_the_terms_organised_by_parent('elementsbatiments', $post_id);
if ($terms) { // if ($terms) {
$parent_terms = array_filter($terms, function ($term) { // $parent_terms = array_filter($terms, function ($term) {
return $term->parent == 0; // return $term->parent == 0;
}); // });
echo '<div class="admin-column-metiers-container">'; // echo '<div class="admin-column-metiers-container">';
foreach ($terms as $term) { // foreach ($terms as $term) {
echo '<a href="' . get_edit_term_link($term->term_id, 'metiers', 'artisans') . '" class="admin-column-taxonomy-term">'; // echo '<a href="' . get_edit_term_link($term->term_id, 'metiers', 'artisans') . '" class="admin-column-taxonomy-term">';
echo esc_html($term->name); // echo esc_html($term->name);
echo '</a>'; // echo '</a>';
} // }
echo '</div >'; // echo '</div >';
} else { // } else {
echo '<p class="no-results"> × </p>'; // echo '<p class="no-results"> × </p>';
} // }
} // }
if ($column == 'lastmodified') { if ($column == 'lastmodified') {
// $last_modified_date = get_the_modified_date('j F Y \à H:i', $post_id); // $last_modified_date = get_the_modified_date('j F Y \à H:i', $post_id);
@ -136,9 +152,72 @@ function metiers_patrimoine_artisans_handle_posts_custom_columns($column)
if (!$published_date) return; if (!$published_date) return;
echo $published_date; echo $published_date;
} }
if ($column == 'remark') {
$last_action = get_field('last_action', $post_id);
//write_log($post_id);
//write_log($last_action);
if (!isset($last_action) || empty($last_action)) return; $remark = $last_action['comments'];
if (!isset($remark) || empty($remark)) return;
// $conseillerDatas = get_userdata($conseiller);
// if (!isset($conseillerDatas->display_name)) return;
echo $remark;
}
} }
add_action('manage_artisans_posts_custom_column', 'metiers_patrimoine_artisans_handle_posts_custom_columns', 10, 2); add_action('manage_artisans_posts_custom_column', 'metiers_patrimoine_artisans_handle_posts_custom_columns', 10, 2);
/* ------
// Fonction pour charger les posts avec leurs ACF
-------*/
function load_posts_with_acf() {
// Vérifie si ACF est activé
if ( ! function_exists('get_field') ) {
return [];
}
// Récupère les posts (exemple : tous les articles publiés)
$posts_query = new WP_Query([
'post_type' => 'artisans', // Change selon ton besoin (page, custom post type...)
'posts_per_page' => -1, // Tous les posts
]);
$posts_data = [];
if ( $posts_query->have_posts() ) {
while ( $posts_query->have_posts() ) {
$posts_query->the_post();
$post_id = get_the_ID();
// Récupère les champs ACF (automatique ou spécifiques)
//$acf_fields = get_fields($post_id); // Renvoie tous les champs ACF du post
// Structure des données
$posts_data[$post_id] = [
'id' => $post_id,
'acf' => [
'conseiller' => get_field('conseiller', $post_id),
'mdp_status' => get_field('mdp_status', $post_id),
'last_action' => get_field('last_action', $post_id),
]
];
}
wp_reset_postdata();
}
return $posts_data;
}
// Variable globale accessible partout
global $global_posts_with_acf;
$global_posts_with_acf = load_posts_with_acf();
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------
GESTION DU FILTRAGE GESTION DU FILTRAGE
@ -148,6 +227,9 @@ function metiers_patrimoine_filter_posts_declare_dropdowns()
{ {
global $typenow; global $typenow;
global $wp_meta_boxes; global $wp_meta_boxes;
global $global_posts_with_acf;
//write_log($global_posts_with_acf);
$post_type = (isset($_GET['post_type'])) ? $_GET['post_type'] : 'post'; $post_type = (isset($_GET['post_type'])) ? $_GET['post_type'] : 'post';
if ($post_type !== 'artisans') return; if ($post_type !== 'artisans') return;
@ -159,25 +241,24 @@ function metiers_patrimoine_filter_posts_declare_dropdowns()
$mdp_status_choices = isset($mdp_status_datas['choices']) ? $mdp_status_datas['choices'] : null; $mdp_status_choices = isset($mdp_status_datas['choices']) ? $mdp_status_datas['choices'] : null;
// $meta_key = 'mdp_status';
// $values = get_posts([
// 'post_status' => 'any',
// 'post_type' => 'artisans',
// 'posts_per_page' => -1,
// 'meta_key' => $meta_key,
// 'fields' => 'ids',
// ]);
$meta_key = 'mdp_status'; // $unique_values = array_reduce(array_filter(array_map(
$values = get_posts([ // fn($post_id) => get_field('mdp_status', $post_id) ?? null,
'post_status' => 'any', // $values
'post_type' => 'artisans', // )), function ($acc, $item) {
'posts_per_page' => -1, // if (isset($item['value'], $item['label'])) {
'meta_key' => $meta_key, // $acc[$item['value']] = $item['label'];
'fields' => 'ids', // }
]); // return $acc;
// }, []);
$unique_values = array_reduce(array_filter(array_map(
fn($post_id) => get_field('mdp_status', $post_id) ?? null,
$values
)), function ($acc, $item) {
if (isset($item['value'], $item['label'])) {
$acc[$item['value']] = $item['label'];
}
return $acc;
}, []);
?> ?>
<select name="metiers"> <select name="metiers">
@ -197,22 +278,22 @@ function metiers_patrimoine_filter_posts_declare_dropdowns()
?> ?>
</select> </select>
<select name="elementsbatiments"> <!-- <select name="elementsbatiments">
<option value="" class="please-select"><?php _e('Éléments du Bâtiment', 'metiers-patrimoine-theme'); ?></option> <option value="" class="please-select"><?php _e('Éléments du Bâtiment', 'metiers-patrimoine-theme'); ?></option>
<?php <?php
$is_current = isset($_GET['elementsbatiments']) ? $_GET['elementsbatiments'] : ''; // $is_current = isset($_GET['elementsbatiments']) ? $_GET['elementsbatiments'] : '';
foreach ($batiments_by_parent as $index => $parent_term_data) { // foreach ($batiments_by_parent as $index => $parent_term_data) {
$parent_term = $parent_term_data['term']; // $parent_term = $parent_term_data['term'];
printf( // printf(
'<option value="%s"%s>%s</option>', // '<option value="%s"%s>%s</option>',
$parent_term->slug, // $parent_term->slug,
$parent_term->slug == $is_current ? ' selected="selected"' : '', // $parent_term->slug == $is_current ? ' selected="selected"' : '',
$parent_term->name // $parent_term->name
); // );
} // }
?> ?>
</select> </select> -->
<select name="conseiller"> <select name="conseiller">
<option value="" class="please-select"><?php _e('Conseiller', 'metiers-patrimoine-theme'); ?></option> <option value="" class="please-select"><?php _e('Conseiller', 'metiers-patrimoine-theme'); ?></option>
@ -238,8 +319,18 @@ function metiers_patrimoine_filter_posts_declare_dropdowns()
<option value="" class="please-select"><?php _e('Statut de travail', 'metiers-patrimoine-theme'); ?></option> <option value="" class="please-select"><?php _e('Statut de travail', 'metiers-patrimoine-theme'); ?></option>
<?php <?php
//write_log($unique_values);
$statuses = [
'rejected' => 'Non sélectionné (hors ligne)',
'to_contact' => 'Nouveau à contacter (Hors ligne)',
'to_actualize' => 'À actualiser (en ligne)',
'ok' => 'OK (en ligne)',
'none' => '—— Pas de statut !',
'deleted' => 'Supprimé (hors ligne)'
];
$is_current = isset($_GET['mdpstatus']) ? $_GET['mdpstatus'] : ''; $is_current = isset($_GET['mdpstatus']) ? $_GET['mdpstatus'] : '';
foreach ($unique_values as $index => $status) { foreach ($statuses as $index => $status) {
printf( printf(
'<option value="%s"%s>%s</option>', '<option value="%s"%s>%s</option>',
$index, $index,
@ -272,7 +363,7 @@ function filter_posts_by_acf_conseiller($query)
} }
// FILTRE CONSEILLER // FILTRE CONSEILLER
if (!empty($_GET['mdpstatus'])) { if (!empty($_GET['mdpstatus']) && empty($_GET['conseiller'])) {
$query->set('meta_query', [ $query->set('meta_query', [
[ [
'key' => 'mdp_status', 'key' => 'mdp_status',
@ -283,7 +374,7 @@ function filter_posts_by_acf_conseiller($query)
} }
// FILTRE CONSEILLER // FILTRE CONSEILLER
if (!empty($_GET['conseiller'])) { if (!empty($_GET['conseiller']) && empty($_GET['mdpstatus'])) {
if ($_GET['conseiller'] == 'non_attribue') { if ($_GET['conseiller'] == 'non_attribue') {
$query->set('meta_query', [ $query->set('meta_query', [
@ -303,6 +394,25 @@ function filter_posts_by_acf_conseiller($query)
]); ]);
} }
} }
if (!empty($_GET['mdpstatus']) && !empty($_GET['conseiller'])) {
if ($_GET['conseiller'] == 'non_attribue'){
$_GET['conseiller'] = '';
}
$query->set('meta_query', [
[
'key' => 'mdp_status',
'value' => sanitize_text_field($_GET['mdpstatus']),
'compare' => '='
],
[
'key' => 'conseiller',
'value' => sanitize_text_field($_GET['conseiller']),
'compare' => '='
]
]);
}
} }
add_action('pre_get_posts', 'filter_posts_by_acf_conseiller'); add_action('pre_get_posts', 'filter_posts_by_acf_conseiller');

View File

@ -119,10 +119,15 @@ add_action('edit_form_after_title', function () {
$post_status = get_post_status(); $post_status = get_post_status();
$translatedStatus = translate_wordpress_online_statuses($post_status); $translatedStatus = translate_wordpress_online_statuses($post_status);
$post_link = get_preview_post_link(); $post_link = get_preview_post_link();
$my_current_lang = apply_filters('wpml_current_language', NULL);
if ($screen && $screen->post_type === 'artisans') { if ($screen && $screen->post_type === 'artisans') {
?> ?>
<h1 class="admin-artisan-title"><?php echo get_the_title() ?></h1> <h1 class="admin-artisan-title"><?php echo get_the_title() ?></h1>
<?php if($my_current_lang == 'nl'): ?>
<h2 class="admin-artisan-alert-nl">Vous êtes sur la partie NL de la fiche de l'artisan</h2>
<?php endif; ?>
<?php if (!empty($post_link) && $screen->action !== 'add') : ?> <?php if (!empty($post_link) && $screen->action !== 'add') : ?>
<div class="preview-artisan-link"> <div class="preview-artisan-link">
<a href="<?php echo $post_link; ?>" target="_blank" class="button button-primary"> <a href="<?php echo $post_link; ?>" target="_blank" class="button button-primary">
@ -137,6 +142,7 @@ add_action('edit_form_after_title', function () {
<span class="post-state post-state--<?php echo $post_status; ?>"><?php echo $translatedStatus; ?></span> <span class="post-state post-state--<?php echo $post_status; ?>"><?php echo $translatedStatus; ?></span>
</div> </div>
<?php if($my_current_lang == 'fr'): ?>
<div class="state-container"> <div class="state-container">
<p>Statut de travail :</p> <p>Statut de travail :</p>
<?php if (isset($status_mdp) && isset($status_mdp['value']) && isset($status_mdp['label'])): ?> <?php if (isset($status_mdp) && isset($status_mdp['value']) && isset($status_mdp['label'])): ?>
@ -146,6 +152,7 @@ add_action('edit_form_after_title', function () {
<?php endif; ?> <?php endif; ?>
</div> </div>
<?php endif; ?>
<!-- <button id="set-offline-status" class="button button-secondary">Mettre Hors Ligne</button> <!-- <button id="set-offline-status" class="button button-secondary">Mettre Hors Ligne</button>
<button id="set-online-status" class="button button-secondary">Mettre En Ligne</button> --> <button id="set-online-status" class="button button-secondary">Mettre En Ligne</button> -->

View File

@ -56,8 +56,8 @@
"nl": "Molières" "nl": "Molières"
}, },
{ {
"fr": "Namen", "fr": "Namur",
"nl": "Namur" "nl": "Namen"
}, },
{ {
"fr": "Jette", "fr": "Jette",

View File

@ -361,3 +361,40 @@ function translate_city_name($city, $required_language = 'fr')
} }
return $city; return $city;
} }
/* Scroll automatique vers le formulaire après soumission */
add_action( 'wp_footer', function() {
if ( is_page(309) ) { // remplace 'contact' par le slug de ta page
?>
<script>
document.addEventListener('DOMContentLoaded', function() {
// Si un paramètre de requête existe (ce qui est le cas après soumission)
const form = document.getElementById('gform_confirmation_message_1'); // <-- adapte le numéro ici
if (form) {
setTimeout(() => { form.scrollIntoView({ behavior: 'smooth' }); }, 400);
}
});
</script>
<?php
}
if ( is_page(18713) ) { // remplace 'contact' par le slug de ta page
?>
<script>
document.addEventListener('DOMContentLoaded', function() {
// Si un paramètre de requête existe (ce qui est le cas après soumission)
const form = document.getElementById('gform_confirmation_message_2'); // <-- adapte le numéro ici
if (form) {
setTimeout(() => { form.scrollIntoView({ behavior: 'smooth' }); }, 400);
}
});
</script>
<?php
}
});

View File

@ -233,6 +233,14 @@ body.post-type-artisans {
.admin-artisan-title { .admin-artisan-title {
@apply text-patrimoine-sante-securite !font-semibold !text-2xl; @apply text-patrimoine-sante-securite !font-semibold !text-2xl;
} }
.admin-artisan-alert-nl {
@apply text-green-800 bg-white;
border: 1px solid #c3c4c7;
border-left-width: 4px;
box-shadow: 0 1px 1px rgba(0, 0, 0, .04);
margin: 5px 15px 2px;
padding: 1px 12px;
}
.last-updated { .last-updated {
@apply text-neutral-500 !text-xs my-0; @apply text-neutral-500 !text-xs my-0;
} }
@ -675,7 +683,8 @@ select[data-enpassusermodified='yes'] {
.row-actions .edit, .row-actions .edit,
.row-actions .view, .row-actions .view,
.row-actions .inline.hide-if-no-js, .row-actions .inline.hide-if-no-js,
#acfml-field-group-synchronise { #acfml-field-group-synchronise,
#litespeed_meta_boxes{
@apply !hidden; @apply !hidden;
} }
} }

View File

@ -145,13 +145,22 @@ function handleHierarchicalTaxonomyCheckboxRelation(e) {
if (e.target.checked && e.target.classList.contains('parent-checkbox')) { if (e.target.checked && e.target.classList.contains('parent-checkbox')) {
const parentRootTag = e.target.closest('.checkbox-choice'); const parentRootTag = e.target.closest('.checkbox-choice');
const children = parentRootTag.querySelectorAll('.child-checkbox'); const children = parentRootTag.querySelectorAll('.child-checkbox');
//alert('check parent là');
children.forEach((child) => { /*children.forEach((child) => {
child.checked = true; child.checked = true;
}); });*/
} }
if (e.target.checked && e.target.classList.contains('child-checkbox')) {
//alert('check child là');
const checkboxRootTag = e.target.closest('.checkbox-choice');
const parentCheckbox = checkboxRootTag.parentElement.parentElement.querySelector('.parent-checkbox');
parentCheckbox.checked = false;
}
if (!e.target.checked && e.target.classList.contains('parent-checkbox')) { if (!e.target.checked && e.target.classList.contains('parent-checkbox')) {
// alert('uncheck parent'); //alert('uncheck parent');
const parent = e.target.closest('.checkbox-choice'); const parent = e.target.closest('.checkbox-choice');
const children = parent.querySelectorAll('.child-checkbox'); const children = parent.querySelectorAll('.child-checkbox');