- WordPress :4.6.1
- Statut : résolu
- Ce sujet contient 5 réponses, 2 participants et a été mis à jour pour la dernière fois par
Mooks, le il y a 8 années et 5 mois.
-
AuteurMessages
-
13 octobre 2016 à 8 h 42 min #1573006
Bonjour,
Ma configuration WP actuelle
- Version de PHP/MySQL : 7.0.7
- Thème utilisé : custom
- Extensions en place : plusieurs
- Nom de l’hébergeur : Infomaniak
- Adresse du site : https://www.les-alternatives.com
Problème(s) rencontré(s) :
Bonjour,
J’aurais besoin de précisions concernant save_post (et accessoirement wp_update_post), vu qu’un hook que j’ai créer fonctionne de manière étrange.
Le code ci-dessous me permet à définir automatiquement le bon terme d’une des taxonomies de mon post à la sauvegarde de celui-ci, et en fonction du premier mot du titre :
/************************************************/
/* Automatically assign Fiche/News/Forum/Vidéos */
/************************************************/
function auto_assign_custom_type_terms( $post_id ) {
global $post;
$first_word = current(explode(' ', get_the_title()));
$first_word_without_maj = strtolower($first_word);
if( $first_word_without_maj == 'news' ) {
wp_set_object_terms( $post_id, null, 'custom-type' );
wp_set_object_terms( $post_id, 'news', 'custom-type', true );
} elseif ( $first_word_without_maj == 'forum' ) {
wp_set_object_terms( $post_id, null, 'custom-type' );
wp_set_object_terms( $post_id, 'forum', 'custom-type', true );
} elseif ( $first_word_without_maj == 'videos' ) {
wp_set_object_terms( $post_id, null, 'custom-type' );
wp_set_object_terms( $post_id, 'videos', 'custom-type', true );
} else {
wp_set_object_terms( $post_id, null, 'custom-type' );
wp_set_object_terms( $post_id, 'fiche', 'custom-type', true );
}
}
add_action( 'save_post', 'auto_assign_custom_type_terms', 10, 3 );Le problème est que je dois, dans 80% des cas, sauvegarder deux fois l’article pour qu’il opère finalement au changement de terme. C’est pourquoi j’aurais besoin de vos lumières sur cet étrange phénomène. Dois-je plonger du côté wp_update_post plutôt que de save_post? Ou peut-être une combinaison des deux?
13 octobre 2016 à 12 h 09 min #1573056Bonjour,
Ton code ne fonctionne pas à cause de la variable globale $post … sans trop savoir pourquoi …
En l’optimisant un peu cela fonctionne :
function auto_assign_custom_type_terms( $post_id ) {
// On reset les termes de cette taxinomie
wp_set_object_terms( $post_id, null, 'custom-type' );
// On formate le premier mot du titre
$first_word = current(explode(' ', get_the_title( $post_id )));
$first_word_without_maj = strtolower($first_word);
// Valeur par défaut du terme
$tax_slug = 'fiche';
// On teste le premier mot
switch( $first_word_without_maj ) {
case 'news':
$tax_slug = $first_word_without_maj;
break;
case 'forum':
$tax_slug = $first_word_without_maj;
break;
case 'videos':
$tax_slug = $first_word_without_maj;
break;
}
// On ajoute le terme
wp_set_object_terms( $post_id, $tax_slug, 'custom-type', true );
}
add_action( 'save_post', 'auto_assign_custom_type_terms', 10, 3 );13 octobre 2016 à 16 h 22 min #1573097Merci Benzouye, ton code marche au poil 😉
13 octobre 2016 à 16 h 28 min #1573098Sujet résolu ? Bouton en haut à gauche du sujet 😉
13 octobre 2016 à 16 h 39 min #1573102Yep, je voulais le faire, mais je me laisse toujours quelques temps avant de le faire en cas d’hypothétiques questions/problèmes qui surviendrais.
13 octobre 2016 à 17 h 42 min #1573126Une petite contribution supplémentaire (si jamais quelqu’un planche sur le même genre de question, ca pourra toujours servir) : le précédent code ne prenait pas en compte les accents dans le formatage du premier mot du titre. C’est chose faite dorénavant, avec un code un poil plus lourd mais qui a l’avantage de supporter tous les charsets :
function remove_accent($chaine=''){
// Liste des caractères accentués et leur valeur de remplacement
$accent = array('%C3%80'=>'A','%C3%81'=>'A','%C3%82'=>'A','%C3%83'=>'A','%C3%84'=>'A','%C3%85'=>'A','%C3%A0'=>'a','%C3%A1'=>'a','%C3%A2'=>'a','%C3%A3'=>'a','%C3%A4'=>'a','%C3%A5'=>'a','%C3%92'=>'O','%C3%93'=>'O','%C3%94'=>'O','%C3%95'=>'O','%C3%96'=>'O','%C3%98'=>'O','%C3%B2'=>'o','%C3%B3'=>'o','%C3%B4'=>'o','%C3%B5'=>'o','%C3%B6'=>'o','%C3%B8'=>'o','%C3%88'=>'E','%C3%89'=>'E','%C3%8A'=>'E','%C3%8B'=>'E','%C3%A8'=>'e','%C3%A9'=>'e','%C3%AA'=>'e','%C3%AB'=>'e','%C3%87'=>'C','%C3%A7'=>'c','%C3%8C'=>'I','%C3%8D'=>'I','%C3%8E'=>'I','%C3%8F'=>'I','%C3%AC'=>'i','%C3%AD'=>'i','%C3%AE'=>'i','%C3%AF'=>'i','%C3%99'=>'U','%C3%9A'=>'U','%C3%9B'=>'U','%C3%9C'=>'U','%C3%B9'=>'u','%C3%BA'=>'u','%C3%BB'=>'u','%C3%BC'=>'u','%C3%BF'=>'y','%C3%91'=>'N','%C3%B1'=>'n');
// Conversion des caractères accentués dans un code compatible avec les URLs
$chaine = urlencode($chaine);
foreach ($accent as $key => $value) { // On parcours le tableau accent grâce à une boucle foreach puis on remplace les caractères accentués par leurs équivalents sans accent
$chaine = str_replace($key,$value,$chaine);
}
// On décode la chaîne d'entrée grâce à la commande urldecode
return urldecode($chaine);
}Fonction de suppression d'accents compatible tous charsetsfunction auto_assign_custom_type_terms( $post_id ) {
// On reset les termes de cette taxinomie
wp_set_object_terms( $post_id, null, 'custom-type' );
// On formate le premier mot du titre
$first_word = current(explode(' ', get_the_title( $post_id ))); // Récupération du premier mot du titre
$first_word_without_maj = strtolower($first_word); // Suppression des majuscules éventuelles
$first_word_totally_formated = remove_accent($first_word_without_maj); // Remplacement d'éventuels caractères accentués en par leurs équivalents non accentués
// Valeur par défaut du terme
$tax_slug = 'fiche';
// On teste le premier mot
switch( $first_word_totally_formated ) {
case 'news':
$tax_slug = $first_word_totally_formated;
break;
case 'forum':
$tax_slug = $first_word_totally_formated;
break;
case 'videos':
$tax_slug = $first_word_totally_formated;
break;
}
// On ajoute le terme
wp_set_object_terms( $post_id, $tax_slug, 'custom-type', true );
}
add_action( 'save_post', 'auto_assign_custom_type_terms', 10, 3 );Fonction d'assignement automatique d'un terme en fonction du premier mot du titre de l'article. -
AuteurMessages
- Vous devez être connecté pour répondre à ce sujet.