J'ai installé dans Wordpress un type de message personnalisé (artistes) ...Filtrer certaines valeurs d'un tableau dans un post_meta sérialisé (PHP)
J'ai un plugin qui serializez les méta-informations des artistes .. et j'ai besoin de filtrer ces informations par le canal ..: « canal »; s: 6: « transe » qui est aussi dans la méta sérialisé « show_data »
'a:1:{s:32:"57fba1b113187b95554339a0737e0309";a:7:{s:7:"dj_name";s:7:"DjValue";s:9:"show_name";s:9:"ShowValue";s:7:"channel";s:6:"trance";s:10:"show_image";s:0:"";s:4:"time";s:1:"0";s:8:"time_end";s:1:"0";s:4:"mon1";s:1:"1";}}'
le plugin unserializez les données comme ceci:
foreach ($djs as $dj) {
$temp = maybe_unserialize(get_post_meta($dj->ID, 'show_data', true));
if ($temp)
$show_data[ ] = maybe_unserialize(get_post_meta($dj->ID, 'show_data', true));
} //$djs as $dj
Puis passe à la boucle à travers les tableaux .... pour former un calendrier ....
je dois filtrer par type de canal (trance ou techno) ... j'ai essayé avec array_filter mais .. eu pas de chance :(.. im pretty vert en php
j'aurais besoin de quelque chose comme ceci:
[78] => Array (
[57fba1b113187b95554339a0737e0309] => Array (
[dj_name] => DjValue
[show_name] => ShowValue
[channel] => trance
[show_image] =>
)
)
[79] => Array (
[55ebc09f567af40917f650f430339772] => Array (
[dj_name] => Emilian
[show_name] => Emilians Trance
[channel] => techno
[show_image] =>
)
)
puis filtrer uniquement la transe en utilisant les arguments de shortcode ... résultat devrait être ...
[78] => Array (
[57fba1b113187b95554339a0737e0309] => Array (
[dj_name] => DjValue
[show_name] => ShowValue
[channel] => trance
[show_image] =>
)
)
Merci à advanceee
le code complet est ci-dessous:
<? date_default_timezone_set('America/New_York'); $genre = wpautop(wp_kses_post($pull_calendar_of_shows_atts[ 'genre' ])); $calendarname = wpautop(wp_kses_post($pull_calendar_of_shows_atts[ 'calendarname' ]));
$args = array(
'numberposts' => -1,
'post_type' => 'artist',
'post_status' => 'publish',
'orderby' => 'menu_order',
'suppress_filters' => false ); $djs = get_posts($args); foreach ($djs as $dj) {
$temp = maybe_unserialize(get_post_meta($dj->ID, 'show_data', true));
if ($temp)
$show_data[ ] = maybe_unserialize(get_post_meta($dj->ID, 'show_data', true));
} //$djs as $dj
$schedule = array("mon" => array('day' => 'Monday'),
"tue" => array('day' => 'Tuesday'),
"wed" => array('day' => 'Wednesday'),
"thu" => array('day' => 'Thursday'),
"fri" => array('day' => 'Friday'),
"sat" => array('day' => 'Saturday'),
"sun" => array('day' => 'Sunday' ));
foreach ($show_data as $row) {
foreach ($row as $id => $data) {
foreach ($data as $k => $v) {
if (preg_match('/(mon|tue|wed|thu|fri|sat|sun)(\d)/', $k, $m)) {
$schedule[ $m[ 1 ] ][ $m[ 2 ] ][ $data[ 'time' ] ] = array(
'artist' => $data[ 'dj_name' ],
'show' => $data[ 'show_name' ],
'id' => $id,
'channel' => $data[ 'channel'],
'image' => $data[ 'show_image' ]
);
} //preg_match('/(mon|tue|wed|thu|fri|sat|sun)(\d)/', $k, $m)
} //$data as $k => $v
} //$row as $id => $data } //$show_data as $row
echo '<pre>'. print_r ($perm, true) . '</pre>';
$begin = strtotime('today'); $end = strtotime('- 1 day', strtotime('+ 1 month')); $iter = $begin; $olddate = ''; $calendar = array(); while ($iter < $end) {
$time = $iter;
$date = date('D n/j', $time);
$week = floor(date('d', $time)/7) + 1 * (floor(date('d', $time)/7) < date('d', $time)/7);
$day = strtolower(date('D', $time));
foreach ($schedule as $d => $dd) {
if (isset($dd[ $week ]) && $d == $day) {
foreach ($dd[ $week ] as $k => $v) {
$calendar[ $date ][ $k ] = array(
'artist' => $v[ 'artist' ],
'show' => $v[ 'show' ],
'channel' => $v[ 'channel'],
'image' => $v[ 'image' ]
);
} //$dd[ $week ] as $k => $v
} //isset($dd[ $week ]) && $d == $day
} //$schedule as $d => $dd
$iter = strtotime('+ 1 day', $iter); } //$iter < $end $ssd = '<div id="Calendar ' . $calendarname . '"><table class="calendar"> '; foreach ($calendar as $date => $data) {
ksort($data);
print_r ($data);
$ssd .= '<tr class="newday"> ';
$ssd .= '<td rowspan="' . count($data) . '">';
$ssd .= preg_replace('/(\w+) (.*)/', '<span class="dayofweek">$1</span><br /><span class="date">$2</span>', $date);
$ssd .= '</td> ';
$tr = "";
foreach ($data as $k => $v) {
$perma = get_page_by_title('Chicane');
echo $perma->ID;
$t = strtotime("March 16, 2013 $k:00");
$d = date('g:00a', $t);
if ($v[ 'image' ]) {
$imgshow = ' <img class="show_calimg" src=" ' . resizeimagenoecho($v[ "image" ], 24, auto) . ' "/>';
} //$v[ 'image' ]
$ssd .= "$tr
<td class='time'>" . $d . "</td>
<td>" . $v[ 'artist' ] . "</td>
<td>" . $v[ 'show' ] . "</td>
<td>" . $imgshow . "</td></tr>";
$tr = "<tr>";
} //$data as $k => $v } //$data as $k => $v //$calendar as $date => $data $ssd .= '</table></div>';
ce imprime: Array() –
$ canal = 'trance'; \t \t \t \t $ show_data_filtered = array_filter (show_data de $, la fonction ($ fs) utiliser (canal $) { \t \t \t retour $ fs == de canal $ [ 'canal']; \t}); \t \t \t \t print_r ($ show_data_filtered); –
remplacer $ data ['chanel'] par $ data ['channel'] comme je l'ai fait dans mon edit – jiboulex