2015-01-15 69 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函數並更改echo以返回。 –

回答

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或更多時避免重新聲明該函數。據我所知,沒有全球功能的範圍。 –