Vous n'êtes pas identifié.
Annonce
Annonce 1 : Le Codex en français a besoin de vous pour avancer !
Annonce 2 : Avant de poster, n'oubliez pas de faire une petite Recherche et de lire les règles de ce forum.
Pages: 1
- Index
- » Utilisation spécifique de WordPress
- » Faire apparaître des articles dont la date est future : comment ???
#1 25-06-2007 20:25:17
Faire apparaître des articles dont la date est future : comment ???
Bonjour,
Ma configuration WP actuelle blog normal 3 colonnes dt 2 sidebars
- Version de WordPress : 2.1.3 (enfin je crois? comment faire pour savoir?) c était l avant dernière version dispo sur le site de WP fr
- Thème utilisé : iblogR
- Plugins en place : une quinzaine dont postthumb revisited etc...
- Nom de l'hebergeur : ovh
- Adresse du site : (en test et design non fini) http://www.altermusica.net/blog
Problème(s) rencontré(s) :
ds le blog d une webradio, je souhaite faire apparâitre des articles - émissions programmés pour des dates futures à la date d'aujourd'hui ( exemple : ns sommes le 25 juin et je prépare une série d articles pour la semaine en cours, articles que je souhaite faire apparaître DES AUJOURD'HUI comme étant daté du 26 juin ou du 1er juillet)
malgré la fonction d'horodatage décalé que je trouve super, je souhaite :
1) garder la date de l article (ie le 5 juillet 07)
2) et surtout le faire apparaître dès aujourd'hui le 25 Juin
y a t il une ligne de code à ajouter ? un plugin ? j ai essayé, mais n ai rien trouvé..
idem ds le forum
je suis sure que c possible...
Merci de votre aide à tous
si vous aimez le vrai bon disco : http://www.discoqueer.com - next le samedi 11 août au Nouveau Caz (Paris)
Hors ligne
#2 26-06-2007 00:56:08
Re: Faire apparaître des articles dont la date est future : comment ???
Bonsoir argentik,
[Mode reflexion]bien que ça ne rentre pas en compte, je ne vois pas l'intérêt d'une telle chose.[/Mode reflexion]
Sinon pour revenir à la question, ce n'est pas possible en natif, et je ne connais pas (encore) de plugin qui le fasse.
Pas d'une grande aide désolé 
Hors ligne
#3 26-06-2007 08:11:40
Re: Faire apparaître des articles dont la date est future : comment ???
Il y a des blogs qui font apparaître des articles dans la colonne principale et d'autres dans une barre latérale (comme celui de Koz : http://www.koztoujours.fr/).
Je ne sais pas comment cela est fait mais cela peut être la solution à ton pb :
affichage des annonces futures dans la barre latérale et non affichage de ceux-ci dans la colonne principale (on doit pouvoir trier l'affichage selon la catégorie) ; du coup les billets antidatés ne prennent pas la première place.
Maintenant je ne peux pas t'en dire plus, étant loin d'être expert. Par exemple je ne sais pas quel greffon permet de mettre les articles d'une certaine catégorie dans une barre latérale.
En espérant avoir fait avancé le machin.
Hors ligne
#4 26-06-2007 10:41:23
Re: Faire apparaître des articles dont la date est future : comment ???
merci pour vos infos... donc ça ne semble pas possible
((
bon autres questions :
- est il possible que j ajoute un bouton ou autre qui mette une date que je décide à l interieur du post (je ne vx pas l écrire en manuel à chaque fois
((( )
- Est ce que les "champs personnalisés" peuvent m'aider ? à quoi servent-ils ?
- Quel bout de code je pourrais enlever pour ne plus prendre en compte la date prévue de publication ?
merci les WP people... 
si vous aimez le vrai bon disco : http://www.discoqueer.com - next le samedi 11 août au Nouveau Caz (Paris)
Hors ligne
#5 26-06-2007 10:45:41
Re: Faire apparaître des articles dont la date est future : comment ???
Les posts ne sont pas sensé dater un évènement. Il te faut un calendrier pour ça.
http://garrickvanburen.com/wordpress-plugins/wpical/ ?
Hors ligne
#6 26-06-2007 18:31:17
Re: Faire apparaître des articles dont la date est future : comment ???
Tu avais View Future Post mais qui date un peu.
Egalement Future Posts Calendar ou My Events.
Events Plugin
Event Calendar
Upcoming Events
Attention certains datent un peu et il faudra tester avant installation.
J'avais lancé une discussion il y a ... longtemps.
Dernière modification par Damino (26-06-2007 18:34:00)
Hors ligne
#7 27-06-2007 19:04:45
Re: Faire apparaître des articles dont la date est future : comment ???
Le calendrier reste tout de même la fonction la plus adaptée non ?
Hors ligne
#8 05-09-2007 20:36:32
- Ellaurenzovfoot
- Expert WP
- Lieu: Paname
- Date d'inscription: 15-11-2006
- Messages: 217
- Site web
Re: Faire apparaître des articles dont la date est future : comment ???
Bon ma réponse est tardive, mais tant pis, au moins il y aura réponse c'est toujours ça :p
Koztoujours utilise je crois miniblog ou sideblog, c'est un pluging qui sert à avoir un service de blog indépendant en quelque sorte des autres catégories. Pour ma part je le qualifierais sur un site d'information comme d'un service de brève. Article ne méritant pas une place de premier plan mais que l'on veut afficher. Un peu comme un dépêche AFP. Genre.... "Sarko de retour de Wolfeboro" information capitale, n'est-ce pas, mais qui ne mérite pas un article. Enfin voili voilou.
Hors ligne
#9 06-09-2007 10:42:48
- djdoxy
- Membre WP
- Date d'inscription: 14-05-2007
- Messages: 7
Re: Faire apparaître des articles dont la date est future : comment ???
J'ai un probleme similaire.
Je compte mettre en place WP pour m'en servir comme CMS pour un club auto.
Il y aura 3 types d'articles: les infos ("jean claude vient d'avoir un bébé") et les comptes rendus d'evenements ("les photos de la balade de weekend dernier ") et les annonces d'evenements ("nouvelle balade prevue le 25 decembre").
Pour les 2 premiers types, aucun souci, WP est parfaitement adapté à notre besoin... Par contre pour ce qui est de l'annonce d'evenements c'est moins evident.
En effet si je poste aujourd'hui (date de publication) un article sur la sortie du 25 décembre, il va apparaitre tout de suite (ce que je veux) mais la date du 25.12 ne sera pas en gras dans mon calendrier (ce que j'aimerai)
Si je le date du 25.12, et bien mon article ne paraitra pas avant (peu d'interet) par contre il sera bien à la bonne date dans mon calendrier...
L'ideal serait pour chaque article de pouvoir preciser une date d'evenement (en plus de la date de publication) et d'avoir un calendrier qui affiche de deux couleurs differentes les articles (date de publication) et les evenements (date d'evenement)
Connaissez vous un plugin qui ferai cela ?
Hors ligne
#10 20-09-2007 17:19:16
- djdoxy
- Membre WP
- Date d'inscription: 14-05-2007
- Messages: 7
Re: Faire apparaître des articles dont la date est future : comment ???
Hop voila des nouvelles...
Alors j'ai modifié mon WP pour que l'on puisse définir un article comme étant un évènement.
Du coup un même article apparait 2 fois lors de la recherche: à sa date de publication, et à la date de l'evenement.
J'ai également modifié le calendrier de mon theme (Silver Lexus) pour qu'il affiche les evenements (en rouge) même si ceux ci sont futur.
Je n'ai pas essayé, mais je pense que si un article a une date de publication future et qu'il a une date d'évènement il sera visible via sa date d'évènement.
Alors pour ceux que ca interessent, voila les modifs que j'ai fait:
Insertion de la date de l'evenement dans la base de donnée.
Ceci nécessite bien évidemment la création d'une colonne evenement_date dans la table qui contient vos posts (par defaut c'est wp_posts )
Dans le fichier wp-includes/post.php
Dans la fonction wp_insert_post
Remplacer
Code:
- if ($update) {
- $wpdb->query(
- "UPDATE IGNORE $wpdb->posts SET
- post_author = '$post_author',
- post_date = '$post_date',
- post_date_gmt = '$post_date_gmt',
- post_content = '$post_content',
- post_content_filtered = '$post_content_filtered',
- post_title = '$post_title',
- post_excerpt = '$post_excerpt',
- post_status = '$post_status',
- post_type = '$post_type',
- comment_status = '$comment_status',
- ping_status = '$ping_status',
- post_password = '$post_password',
- post_name = '$post_name',
- to_ping = '$to_ping',
- pinged = '$pinged',
- post_modified = '".current_time('mysql')."',
- post_modified_gmt = '".current_time('mysql',1)."',
- post_parent = '$post_parent',
- menu_order = '$menu_order'
- WHERE ID = $post_ID");
- } else {
- $wpdb->query(
- "INSERT IGNORE INTO $wpdb->posts
- (post_author, post_date, post_date_gmt, post_content, post_content_filtered, post_title, post_excerpt, post_status, post_type, comment_status, ping_status, post_password, post_name, to_ping, pinged, post_modified, post_modified_gmt, post_parent, menu_order, post_mime_type)
- VALUES
- ('$post_author', '$post_date', '$post_date_gmt', '$post_content', '$post_content_filtered', '$post_title', '$post_excerpt', '$post_status', '$post_type', '$comment_status', '$ping_status', '$post_password', '$post_name', '$to_ping', '$pinged', '$post_date', '$post_date_gmt', '$post_parent', '$menu_order', '$post_mime_type')");
- $post_ID = (int) $wpdb->insert_id;
- }
par
Code:
- "UPDATE IGNORE $wpdb->posts SET
- post_author = '$post_author',
- post_date = '$post_date',
- post_date_gmt = '$post_date_gmt',
- post_content = '$post_content',
- post_content_filtered = '$post_content_filtered',
- post_title = '$post_title',
- post_excerpt = '$post_excerpt',
- post_status = '$post_status',
- post_type = '$post_type',
- comment_status = '$comment_status',
- ping_status = '$ping_status',
- post_password = '$post_password',
- post_name = '$post_name',
- to_ping = '$to_ping',
- pinged = '$pinged',
- post_modified = '".current_time('mysql')."',
- post_modified_gmt = '".current_time('mysql',1)."',
- post_parent = '$post_parent',
- menu_order = '$menu_order',
- evenement_date = '$evenement_date'
- WHERE ID = $post_ID");
- } else {
- $wpdb->query(
- "INSERT IGNORE INTO $wpdb->posts
- (post_author, post_date, post_date_gmt, post_content, post_content_filtered, post_title, post_excerpt, post_status, post_type, comment_status, ping_status, post_password, post_name, to_ping, pinged, post_modified, post_modified_gmt, post_parent, menu_order, post_mime_type, evenement_date)
- VALUES
- ('$post_author', '$post_date', '$post_date_gmt', '$post_content', '$post_content_filtered', '$post_title', '$post_excerpt', '$post_status', '$post_type', '$comment_status', '$ping_status', '$post_password', '$post_name', '$to_ping', '$pinged', '$post_date', '$post_date_gmt', '$post_parent', '$menu_order', '$post_mime_type', '$evenement_date')");
- $post_ID = (int) $wpdb->insert_id;
- }
Modification de la recherche, pour qu'une recherche de type http://www.monblog.net/wp/?m=20070923 renvoie les articles et évènements de ce jour là
Dans le fichier wp-includes/query.php
Dans la classe WP_Query
Danbs la fonction &get_posts()
Remplacer
Code:
- if ( $q['m'] ) {
- $q['m'] = '' . preg_replace('|[^0-9]|', '', $q['m']);
- $where .= ' AND YEAR(post_date)=' . substr($q['m'], 0, 4);
- if (strlen($q['m'])>5)
- $where .= ' AND MONTH(post_date)=' . substr($q['m'], 4, 2);
- if (strlen($q['m'])>7)
- $where .= ' AND DAYOFMONTH(post_date)=' . substr($q['m'], 6, 2);
- if (strlen($q['m'])>9)
- $where .= ' AND HOUR(post_date)=' . substr($q['m'], 8, 2);
- if (strlen($q['m'])>11)
- $where .= ' AND MINUTE(post_date)=' . substr($q['m'], 10, 2);
- if (strlen($q['m'])>13)
- $where .= ' AND SECOND(post_date)=' . substr($q['m'], 12, 2);
- }
Par
Code:
- if ( $q['m'] ) {
- $q['m'] = '' . preg_replace('|[^0-9]|', '', $q['m']);
- // pour la gestion des evenements, on ajoute 2 parentheses
- // L'idée etant d'avoir
- // AND ( (copnditions post) OR (conditions evenement) )
- $where .= ' AND (( YEAR(post_date)=' . substr($q['m'], 0, 4);
- if (strlen($q['m'])>5)
- $where .= ' AND MONTH(post_date)=' . substr($q['m'], 4, 2);
- if (strlen($q['m'])>7)
- $where .= ' AND DAYOFMONTH(post_date)=' . substr($q['m'], 6, 2);
- if (strlen($q['m'])>9)
- $where .= ' AND HOUR(post_date)=' . substr($q['m'], 8, 2);
- if (strlen($q['m'])>11)
- $where .= ' AND MINUTE(post_date)=' . substr($q['m'], 10, 2);
- if (strlen($q['m'])>13)
- $where .= ' AND SECOND(post_date)=' . substr($q['m'], 12, 2);
- // Gestion des evenements
- if (strlen($q['m'])>5)
- $where .= ' ) OR ( MONTH(evenement_date)=' . substr($q['m'], 4, 2);
- if (strlen($q['m'])>7)
- $where .= ' AND DAYOFMONTH(evenement_date)=' . substr($q['m'], 6, 2);
- if (strlen($q['m'])>9)
- $where .= ' AND HOUR(evenement_date)=' . substr($q['m'], 8, 2);
- if (strlen($q['m'])>11)
- $where .= ' AND MINUTE(evenement_date)=' . substr($q['m'], 10, 2);
- if (strlen($q['m'])>13)
- $where .= ' AND SECOND(evenement_date)=' . substr($q['m'], 12, 2);
- // on ferme les parentheses uniquement si on a ouvertes...
- if (strlen($q['m'])>5)
- $where .= ' ))';
- }
Modification de la page de saisie d'articles afin de pouvoir definir une date d'evenement pour un article
Dans le fichier wp-admin/edit-form-advanced.php
Trouver
Code:
- <?php if ( current_user_can('edit_posts') ) : ?>
- <fieldset id="posttimestampdiv" class="dbx-box">
- <h3 class="dbx-handle"><?php _e('Post Timestamp'); ?></h3>
- <div class="dbx-content"><?php touch_time(($action == 'edit')); ?></div>
- </fieldset>
- <?php endif; ?>
Et y ajouter (ne pas le remplacer), juste apres
Code:
- <?php
- /* Nouvelle boiboite
- * Permet de saisir la date d'un evenement
- */
- if ( current_user_can('edit_posts') ) : ?>
- <fieldset id="evenementdiv" class="dbx-box">
- <h3 class="dbx-handle"><?php _e('Date si evenement'); ?></h3>
- <div class="dbx-content"><?php touch_evenement(($action == 'edit')); ?></div>
- </fieldset>
- <?php endif; ?>
Charge de la date de l'evenement depuis la page dans l'objet _POST qui sera ensuite inseré dans la base
Dans le fichier wp-admin/admin-functions.php
Dans la methode wp_write_post()
Trouver
Code:
- if (!empty ( $_POST['edit_date'] ) ) {
- $aa = $_POST['aa'];
- $mm = $_POST['mm'];
- $jj = $_POST['jj'];
- $hh = $_POST['hh'];
- $mn = $_POST['mn'];
- $ss = $_POST['ss'];
- $jj = ($jj > 31 ) ? 31 : $jj;
- $hh = ($hh > 23 ) ? $hh -24 : $hh;
- $mn = ($mn > 59 ) ? $mn -60 : $mn;
- $ss = ($ss > 59 ) ? $ss -60 : $ss;
- $_POST['post_date'] = sprintf( "%04d-%02d-%02d %02d:%02d:%02d", $aa, $mm, $jj, $hh, $mn, $ss );
- $_POST['post_date_gmt'] = get_gmt_from_date( $_POST['post_date'] );
- }
Et y ajouter (ne pas le remplacer), juste apres
Code:
- /* Gestion des evenements
- *
- */
- if (!empty ( $_POST['edit_evenement'] )) {
- $evenement_aa = $_POST['evenement_aa'];
- $evenement_mm = $_POST['evenement_mm'];
- $evenement_jj = $_POST['evenement_jj'];
- $evenement_hh = $_POST['evenement_hh'];
- $evenement_mn = $_POST['evenement_mn'];
- $evenement_ss = $_POST['evenement_ss'];
- $evenement_jj = (evenement_$jj > 31 ) ? 31 : evenement_$jj;
- $evenement_hh = ($evenement_hh > 23 ) ? $evenement_hh -24 : $evenement_hh;
- $evenement_mn = ($evenement_mn > 59 ) ? $evenement_mn -60 : $evenement_mn;
- $evenement_ss = ($evenement_ss > 59 ) ? $evenement_ss -60 : $evenement_ss;
- $_POST['evenement_date'] = sprintf( "%04d-%02d-%02d %02d:%02d:%02d", $evenement_aa, $evenement_mm, $evenement_jj, $evenement_hh, $evenement_mn, $evenement_ss );
- }
Rajouter la fonction suivante (ou vous voulez dans le code de admin-functions.php, personellement je l'ai mise juste apres la fonction touch_time)
Code:
- /* Nouvelle methode
- * Genere un fomulaire pour declarer si l'article est un evenement
- */
- function touch_evenement( $edit = 1 ) {
- global $wp_locale, $post, $comment;
- echo '<fieldset><legend><input type="checkbox" class="checkbox" name="edit_evenement" value="1" id="dateEvenement" /> <label for="dateEvenement">'.__( 'Edit timestamp' ).'</label></legend>';
- $time_adj = time() + (get_option( 'gmt_offset' ) * 3600 );
- $evenement_date = $post->evenement_date;
- $jj = ($edit) ? mysql2date( 'd', $evenement_date ) : gmdate( 'd', $time_adj );
- $mm = ($edit) ? mysql2date( 'm', $evenement_date ) : gmdate( 'm', $time_adj );
- $aa = ($edit) ? mysql2date( 'Y', $evenement_date ) : gmdate( 'Y', $time_adj );
- $hh = ($edit) ? mysql2date( 'H', $evenement_date ) : gmdate( 'H', $time_adj );
- $mn = ($edit) ? mysql2date( 'i', $evenement_date ) : gmdate( 'i', $time_adj );
- $ss = ($edit) ? mysql2date( 's', $evenement_date ) : gmdate( 's', $time_adj );
- echo "<select name=\"evenement_mm\" onchange=\"edit_evenement.checked=true\">\n";
- for ( $i = 1; $i < 13; $i = $i +1 ) {
- echo "\t\t\t<option value=\"$i\"";
- if ( $i == $mm )
- echo ' selected="selected"';
- echo '>' . $wp_locale->get_month( $i ) . "</option>\n";
- }
- ?>
- </select>
- <input type="text" id="evenement_jj" name="evenement_jj" value="<?php echo $jj; ?>" size="2" maxlength="2" onchange="edit_evenement.checked=true"/>
- <input type="text" id="evenement_aa" name="evenement_aa" value="<?php echo $aa ?>" size="4" maxlength="5" onchange="edit_evenement.checked=true" /> @
- <input type="text" id="evenement_hh" name="evenement_hh" value="<?php echo $hh ?>" size="2" maxlength="2" onchange="edit_evenement.checked=true" /> :
- <input type="text" id="evenement_mn" name="evenement_mn" value="<?php echo $mn ?>" size="2" maxlength="2" onchange="edit_evenement.checked=true" />
- <input type="hidden" id="evenement_ss" name="evenement_ss" value="<?php echo $ss ?>" size="2" maxlength="2" onchange="edit_evenement.checked=true" />
- <?php
- if ( $edit ) {
- // 01-01-1970 est la date par defaut (0000-00-00 00:00:00) des posts non enregistrés comme evenements
- if ($aa=1970) {
- printf( __('Article non enregistré comme un evenement. Pour en faire un evenement: changez en l\'horodatage.' ));
- }
- else {
- printf( __('Evenement initialement prevu le: %1$s %2$s, %3$s @ %4$s:%5$s' ), $wp_locale->get_month( $mm ), $jj, $aa, $hh, $mn );
- }
- }
- ?>
- </fieldset>
- <?php
- }
Dans wp-admin/upgrade-functions.php
Dans la fonction upgrade_130()
Remplacer
Code:
- $posts = $wpdb->get_results("SELECT ID, post_title, post_content, post_excerpt, guid, post_date, post_name, post_status, post_author FROM $wpdb->posts");
Par
Code:
- $posts = $wpdb->get_results("SELECT ID, post_title, post_content, post_excerpt, guid, post_date, post_name, post_status, post_author, evenement_date FROM $wpdb->posts");
Modification du calendrier du theme Silver Lexus
Dans le fichier wp-content\themes\silver-lexus-08\functions.php il faut mettre à jour la fonction de calendrier pour qu'elle prenne en compte des dates d'evenements pour
- le mois courant (affichage en rouge des dates passées ou futures ayant un evenement)
- l'affichage des liens mois precedent/mois suivant*.
Voila la methode complete:
Code:
- function get_newcalendar($daylength = 1) {
- global $wpdb, $m, $monthnum, $year, $timedifference, $month, $month_abbrev, $weekday, $weekday_initial, $weekday_abbrev, $posts;
- $now = current_time('mysql');
- // Quick check. If we have no posts yet published, abort!
- if ( !$posts ) {
- $gotsome = $wpdb->get_var("SELECT ID from $wpdb->posts WHERE post_status = 'publish' AND post_date < '$now' ORDER BY post_date DESC LIMIT 1");
- if ( !$gotsome )
- return;
- }
- if ( isset($_GET['w']) )
- $w = ''.intval($_GET['w']);
- // week_begins = 0 stands for Sunday
- $week_begins = intval(get_settings('start_of_week'));
- $add_hours = intval(get_settings('gmt_offset'));
- $add_minutes = intval(60 * (get_settings('gmt_offset') - $add_hours));
- // Let's figure out when we are
- if ( !empty($monthnum) && !empty($year) ) {
- $thismonth = ''.zeroise(intval($monthnum), 2);
- $thisyear = ''.intval($year);
- } elseif ( !empty($w) ) {
- // We need to get the month from MySQL
- $thisyear = ''.intval(substr($m, 0, 4));
- $d = (($w - 1) * 7) + 6; //it seems MySQL's weeks disagree with PHP's
- $thismonth = $wpdb->get_var("SELECT DATE_FORMAT((DATE_ADD('${thisyear}0101', INTERVAL $d DAY) ), '%m')");
- } elseif ( !empty($m) ) {
- $calendar = substr($m, 0, 6);
- $thisyear = ''.intval(substr($m, 0, 4));
- if ( strlen($m) < 6 )
- $thismonth = '01';
- else
- $thismonth = ''.zeroise(intval(substr($m, 4, 2)), 2);
- } else {
- $thisyear = gmdate('Y', current_time('timestamp'));
- $thismonth = gmdate('m', current_time('timestamp'));
- }
- // Simplifie la requete SQL en prenant les posts ou evenements dont la date
- // est superieur au dernier jour du mois.
- // Pour cela il faut determiner si le dernier jour est le 28,29,30 ou 31
- switch ($thismonth) {
- case 1:
- case 3:
- case 5:
- case 7:
- case 8:
- case 10:
- case 12:
- $dernierJourDuMois = 31;
- break;
- case 2 :
- // Fevrier: 28 sauf si annee bisextile. Algo simple [et faux] qui ne tiens pas compte des siecles mutliples de 400
- if ($thisyear%4) { // Renvoie 0 (false) si mutlitple de 4 (bisextile)
- $dernierJourDuMois = 28;
- }
- else {
- $dernierJourDuMois = 29;
- }
- break;
- default:
- $dernierJourDuMois = 30;
- }
- $unixmonth = mktime(0, 0 , 0, $thismonth, 1, $thisyear);
- // Get the next and previous month and year with at least one post
- $previous = $wpdb->get_row("SELECT DISTINCT MONTH(post_date) AS month, YEAR(post_date) AS year,
- MONTH(evenement_date) AS evenement_month, YEAR(evenement_date) AS evenement_year
- FROM $wpdb->posts
- WHERE (post_date < '$thisyear-$thismonth-01' OR evenement_date < '$thisyear-$thismonth-01')
- AND evenement_date > '0000-00-00'
- AND post_status = 'publish'
- ORDER BY post_date DESC
- LIMIT 1");
- $next = $wpdb->get_row("SELECT DISTINCT MONTH(post_date) AS month, YEAR(post_date) AS year,
- MONTH(evenement_date) AS evenement_month, YEAR(evenement_date) AS evenement_year
- FROM $wpdb->posts
- WHERE ( post_date > '$thisyear-$thismonth-$dernierJourDuMois' OR evenement_date > '$thisyear-$thismonth-$dernierJourDuMois')
- AND post_status = 'publish'
- ORDER BY post_date ASC
- LIMIT 1");
- echo '<table summary="calendar" id="wp-calendar">
- <caption>' . $month[zeroise($thismonth, 2)] . ' ' . date('Y', $unixmonth) . '</caption>
- <thead>
- <tr>';
- $day_abbrev = $weekday_initial;
- if ( $daylength > 1 )
- $day_abbrev = $weekday_abbrev;
- $myweek = array();
- for ( $wdcount=0; $wdcount<=6; $wdcount++ ) {
- $myweek[]=$weekday[($wdcount+$week_begins)%7];
- }
- foreach ( $myweek as $wd ) {
- echo "\n\t\t<th abbr=\"$wd\" scope=\"col\" title=\"$wd\">" . $day_abbrev[$wd] . '</th>';
- }
- echo '
- </tr>
- </thead>
- <tfoot>
- <tr>';
- if ( $previous ) {
- echo "\n\t\t".'<td abbr="' . $month[zeroise($previous->month, 2)] . '" colspan="3" id="prev"><a href="' .
- get_month_link($previous->year, $previous->month) . '" title="' . sprintf(__('View posts for %1$s %2$s'), $month[zeroise($previous->month, 2)],
- date('Y', mktime(0, 0 , 0, $previous->month, 1, $previous->year))) . '">« ' . $month_abbrev[$month[zeroise($previous->month, 2)]] . '</a></td>';
- } else {
- echo "\n\t\t".'<td colspan="3" id="prev" class="pad"> </td>';
- }
- echo "\n\t\t".'<td class="pad"> </td>';
- if ( $next ) {
- // Deux cas: Next contient un post futur, ou un evenement futur
- if (empty($next->evenement_month)) {
- // Si next n'est pas un evenement, utilise les infos du post
- $leMois = $next->month;
- $lAnnee = $next->year;
- }else {
- // Si next est un evenement, utilise les infos de l'evenement
- $leMois = $next->evenement_month;
- $lAnnee = $next->evenement_year;
- }
- echo "\n\t\t".'<td abbr="' . $month[zeroise($leMois, 2)] . '" colspan="3" id="next"><a href="' .
- get_month_link($lAnnee, $leMois) . '" title="' . sprintf(__('View posts for %1$s %2$s'), $month[zeroise($leMois, 2)],
- date('Y', mktime(0, 0 , 0, $leMois, 1, $lAnnee))) . '">' . $month_abbrev[$month[zeroise($leMois, 2)]] . ' »</a></td>';
- } else {
- echo "\n\t\t".'<td colspan="3" id="next" class="pad"> </td>';
- }
- echo '
- </tr>
- </tfoot>
- <tbody>
- <tr>';
- // Get days with posts
- $dayswithposts = $wpdb->get_results("SELECT DISTINCT DAYOFMONTH(post_date)
- FROM $wpdb->posts WHERE MONTH(post_date) = '$thismonth'
- AND YEAR(post_date) = '$thisyear'
- AND post_status = 'publish'
- AND post_date < '" . current_time('mysql') . '\'', ARRAY_N);
- if ( $dayswithposts ) {
- foreach ( $dayswithposts as $daywith ) {
- $daywithpost[] = $daywith[0];
- }
- } else {
- $daywithpost = array();
- }
- // Recupere les jours avec des evenements
- $joursAvecEvenement = $wpdb->get_results("SELECT DISTINCT DAYOFMONTH(evenement_date)
- FROM $wpdb->posts WHERE MONTH(evenement_date) = '$thismonth'
- AND YEAR(evenement_date) = '$thisyear'
- AND post_status = 'publish'", ARRAY_N);
- if ( $joursAvecEvenement ) {
- foreach ( $joursAvecEvenement as $jourAvec ) {
- $listeEvenementDuMois[] = $jourAvec[0];
- }
- } else {
- $listeEvenementDuMois = array();
- }
- if ( strstr($_SERVER['HTTP_USER_AGENT'], 'MSIE') || strstr(strtolower($_SERVER['HTTP_USER_AGENT']), 'camino') || strstr(strtolower($_SERVER['HTTP_USER_AGENT']), 'safari') )
- $ak_title_separator = "\n";
- else
- $ak_title_separator = ', ';
- $ak_titles_for_day = array();
- $ak_post_titles = $wpdb->get_results("SELECT post_title, DAYOFMONTH(post_date) as dom "
- ."FROM $wpdb->posts "
- ."WHERE YEAR(post_date) = '$thisyear' "
- ."AND MONTH(post_date) = '$thismonth' "
- ."AND post_date < '".current_time('mysql')."' "
- ."AND post_status = 'publish'"
- );
- if ( $ak_post_titles ) {
- foreach ( $ak_post_titles as $ak_post_title ) {
- if ( empty($ak_titles_for_day['day_'.$ak_post_title->dom]) )
- $ak_titles_for_day['day_'.$ak_post_title->dom] = '';
- if ( empty($ak_titles_for_day["$ak_post_title->dom"]) ) // first one
- $ak_titles_for_day["$ak_post_title->dom"] = str_replace('"', '"', wptexturize($ak_post_title->post_title));
- else
- $ak_titles_for_day["$ak_post_title->dom"] .= $ak_title_separator . str_replace('"', '"', wptexturize($ak_post_title->post_title));
- }
- }
- // See how much we should pad in the beginning
- $pad = calendar_week_mod(date('w', $unixmonth)-$week_begins);
- if ( 0 != $pad )
- echo "\n\t\t".'<td colspan="'.$pad.'" class="pad"> </td>';
- $daysinmonth = intval(date('t', $unixmonth));
- for ( $day = 1; $day <= $daysinmonth; ++$day ) {
- if ( isset($newrow) && $newrow )
- echo "\n\t</tr>\n\t<tr>\n\t\t";
- $newrow = false;
- if ( $day == gmdate('j', (time() + (get_settings('gmt_offset') * 3600))) && $thismonth == gmdate('m', time()+(get_settings('gmt_offset') * 3600)) && $thisyear == gmdate('Y', time()+(get_settings('gmt_offset') * 3600)) )
- echo '<td id="today">';
- else
- echo '<td>';
- // Priorité aux evenements.
- // Si evenement, on affiche le jour en rouge.
- // Si post, alors process normal
- if ( in_array($day, $listeEvenementDuMois) ) {
- echo '<a href="' . get_day_link($thisyear, $thismonth, $day) . "\" title=\"$ak_titles_for_day[$day]\"><FONT COLOR=\"#FF0000\">$day</FONT></a>";
- }
- else
- if ( in_array($day, $daywithpost) ) // any posts today?
- echo '<a href="' . get_day_link($thisyear, $thismonth, $day) . "\" title=\"$ak_titles_for_day[$day]\">$day</a>";
- else
- echo $day;
- echo '</td>';
- if ( 6 == calendar_week_mod(date('w', mktime(0, 0 , 0, $thismonth, $day, $thisyear))-$week_begins) )
- $newrow = true;
- }
- $pad = 7 - calendar_week_mod(date('w', mktime(0, 0 , 0, $thismonth, $day, $thisyear))-$week_begins);
- if ( $pad != 0 && $pad != 7 )
- echo "\n\t\t".'<td class="pad" colspan="'.$pad.'"> </td>';
- echo "\n\t</tr>\n\t</tbody>\n\t</table>";
- }
*: le calendrier affiche un lien vers le prochain (ou precedent) mois qui contient un evenement ou un article. Ainsi si en septembre je publie un article concernant un evenement pour noel (et qu'il n'y a ni article ni evenement en octobre et novembre) c'est le lien "Decembre" et non pas "Octobre" qui sera affiché sur le calendrier lorsqu'on affichera la mois de septembre (ca evite d'afficher les mois "vide" pour rien)
Mais tout n'est pas parfait, et il reste quelques bugs:
La definition de la date d'evenement ne marche qu'a la creation d'un article.
Si on veut transformer un artcile normal en evenement, ou modifier la date d'un evenement, ca ne marche pas. (et je sais pas pourquoi, toute aide sur le sujet serait la bienvenue)
Le lien vers le mois precedent ne tiens pas correctement compte des evenements.
Ainsi si il y a un article en juillet indiquant un evenement en aout, et aucun article en aout, alors le lien "mois precedent" du calendrier de septembre affichera juillet et non pas aout.
Voilà
Hors ligne
#11 20-09-2007 18:23:23
- dlo
- Blogodépendant

- Date d'inscription: 10-04-2007
- Messages: 1329
Re: Faire apparaître des articles dont la date est future : comment ???
djdoxy a écrit:
Alors j'ai modifié mon WP...
Et pas qu'un peu !!! 
Il y avait sûrement moyen de réaliser la même chose avec un plugin sans toucher à WordPress.
A mon sens, il n'est jamais bon de modifer le code d'une application dont on n'est pas le propriétaire car soit on se bloque sur une version, soit on refait tout le travail à chaque changement de version.
Et le bon côté de WordPress réside aussi dans la possiblilité de changer son comportement en utilisant les points d'entrée que sont les filtres et les actions.
Mais cela n'engage que moi et n'enlève rien à ce qui a été fait. 
Cordialement
Non, je ne suis pas blogodépendant... C'est juste que je n'ai toujours pas trouvé la sortie de ce forum !
Hors ligne
#12 20-09-2007 19:25:02
- djdoxy
- Membre WP
- Date d'inscription: 14-05-2007
- Messages: 7
Re: Faire apparaître des articles dont la date est future : comment ???
dlo a écrit:
djdoxy a écrit:
Alors j'ai modifié mon WP...
Et pas qu'un peu !!!
C'est vrai qu'en lisant mon post ca peu sembler important, mais hormis la partie qui affiche l'horodatage et celle qui le recupere pour enrichir l'objet _POST, laplupart des modifications consistent simplement à rajouter "evenement_date" dans les requetes SQL
Toutefois, je suis 100% d'accord avec le fait que ma modif releve de la bidouille, et qu'un plugin aurait été bien plus propre, mais j'avais besoin de cette fonctionalité rapidement et je ne maitrise pas du tout le concept de plugin wp (alors que modifier du php, ça je gere a peu près)
Effectivement, à chaque mise à jour de WP je devrai refaire les modifs (en meme temps, il y a peu de fichier impactés, et un logiciel comme beyond compare permet de retrofiter tres rapidement les modifs dans la nouvelle version).
Mais du coup, quand j'en aurai marre, je ferai peut etre un plugin WP 
Hors ligne
#13 21-09-2007 10:30:53
- mamzelle holidays
- Habitué WP
- Date d'inscription: 25-05-2006
- Messages: 54
Re: Faire apparaître des articles dont la date est future : comment ???
sur le blog de fran6 (fran6art.com) il parlait d'un plugin pour annoncer les billets à venir ! c'est peut etre ça que tu cherche ... ! 

Hors ligne
Pages: 1
- Index
- » Utilisation spécifique de WordPress
- » Faire apparaître des articles dont la date est future : comment ???











