2015-01-15 2 views
0

Мне нужна помощь с вопросом Wordpress.Запуск специального шорт-кода дважды на той же странице

Я создал пользовательский шорткод, который извлекает список данных внутри таблицы с конкретным paramenter:

add_shortcode("archive", "archive_render"); 
function archive_render($atts) { 

extract(shortcode_atts(array(
    "rientro" => "no", 
    "year" => "", 
), $atts)); 

global $wpdb; 

$rientro == "si" ? $rientro = "yes" : "no"; 

$query = "SELECT event_name FROM wp_em_events WHERE EXTRACT(YEAR FROM event_end_date) = ".$year." AND event_end_date < CURDATE()"; 
$pasts_event = $wpdb->get_col($query); 

function get_pasts_event($pasts_event){ 

    foreach ($pasts_event as $past_event_slug) { 
     $output .= "<li><a href='".get_site_url()."/eventi/".$past_event_slug."'>$past_event_slug</a></li>"; 
    } 

    return $output; 
} 

$string = '[one_third last="'.$rientro.'" class="" id=""][accordian class="" id=""][toggle title="'.$year.'" open="no"]<ul>'.get_pasts_event($pasts_event).'</ul>[/toggle][/accordian][/one_third]'; 

echo do_shortcode($string); 

}

Я хочу, чтобы получить все события, которые имеют прошедшую дату по сравнению с текущей датой.

Если я дважды добавлю короткий код на страницу, будет работать только первый короткий код и остановка страницы, чтобы отобразить остальную часть содержимого.

Кто-нибудь может помочь мне решить эту проблему?

+1

А остальные страницы остановки или только результат второго шорткодом? Включили ли вы режим отладки? В вашем коде могут быть ошибки. http://codex.wordpress.org/Debugging_in_WordPress –

+0

Штрих-коды не должны выводить содержимое. Переместите функцию get_posts_event за пределами короткого кода и измените эхо, чтобы вернуться. –

ответ

0

WordPress шорткод должна возвращать строку, не повторяя его позвольте мне повторно организовать ваш код

function get_pasts_event($pasts_event){ 

    foreach ($pasts_event as $past_event_slug) { 
     $output .= "<li><a href='".get_site_url()."/eventi/".$past_event_slug."'>$past_event_slug</a></li>"; 
    } 

    return $output; 
} 

add_shortcode("archive", "archive_render"); 
function archive_render($atts) { 

    extract(shortcode_atts(array(
     "rientro" => "no", 
     "year" => "", 
     ), $atts)); 

    global $wpdb; 

    $rientro == "si" ? $rientro = "yes" : "no"; 

    $query = "SELECT event_name FROM wp_em_events WHERE EXTRACT(YEAR FROM event_end_date) = ".$year." AND event_end_date < CURDATE()"; 
    $pasts_event = $wpdb->get_col($query); 


    $string = '[one_third last="'.$rientro.'" class="" id=""][accordian class="" id=""][toggle title="'.$year.'" open="no"]<ul>'.get_pasts_event($pasts_event).'</ul>[/toggle][/accordian][/one_third]'; 

    return $string; 
} 
+0

Спасибо, что помогли мне. Вопрос: зачем ставить вне функции get_pasts_event()? – Daniele

+0

, потому что обычно мы не должны объявлять функцию внутри другой функции, хотя это не вызывает ошибки и не позволяет повторно объявить эту функцию, когда основная функция называется 2x или более. Насколько я знаю, для глобальной функции нет области охвата. –

Смежные вопросы