我找到了一个教程,允许我为现代部落的#34;事件日历创建一个短代码"这允许我显示最近事件的列表。代码正常工作并正确显示列表,但我收到一条通知,说明"注意:未定义的变量:第40行&#34的mysite / themes / theme-name / recent_events.php中的no_upcoming_events;
这是它所指的行:
if ( $posts && !$no_upcoming_events) {
这是完整的代码:
function ckhp_get_tribe_events($atts) {
if ( !function_exists( 'tribe_get_events' ) ) {
return;
}
global $wp_query, $tribe_ecp, $post;
$output='';
$ckhp_event_tax = '';
extract( shortcode_atts( array(
'cat' => '',
'number' => 5,
'error' => 'y'
), $atts, 'ckhp-tribe-events' ), EXTR_PREFIX_ALL, 'ckhp' );
if ( $ckhp_cat ) {
$ckhp_event_tax = array(
array(
'taxonomy' => 'tribe_events_cat',
'field' => 'slug',
'terms' => $ckhp_cat
)
);
}
$posts = tribe_get_events(apply_filters('tribe_events_list_widget_query_args', array(
'eventDisplay' => 'upcoming',
'posts_per_page' => $ckhp_number,
'tax_query'=> $ckhp_event_tax
)));
if ( $posts && !$no_upcoming_events) {
$output .= '<ul class="hfeed vcalendar ckhp-small ckhp-event-list">';
foreach( $posts as $post ) :
setup_postdata( $post );
$output .= '<li class="">';
$output .= '<h4 class="entry-title summary">' . '<a href="' . tribe_get_event_link() . '" rel="bookmark">' . get_the_title() . '</a>' . '</h4>';
$output .= '<div class="duration venue">' . tribe_events_event_schedule_details() . ' ' . tribe_get_venue() . '</div>';
$output .= '</li>';
endforeach;
$output .= '</ul><!-- .hfeed -->';
$output .= '<p class="tribe-events-widget-link"><a href="' . tribe_get_events_link() . '" rel="bookmark">' . translate( 'View All Events', 'tribe-events-calendar' ) . '</a></p>';
} else { //No Events were Found
$output .= ( $ckhp_error == 'y' ? '<p>' . translate( 'There are no upcoming events at this time.', 'tribe-events-calendar' ) . '</p>' : '' ) ;
} // endif
wp_reset_query();
return $output;
}
add_shortcode('ckhp-tribe-events', 'ckhp_get_tribe_events'); // link new function to shortcode name
我对PHP不太熟练,所以我不确定删除此通知需要做些什么。任何帮助将不胜感激。
答案 0 :(得分:0)
PHP不要求变量的显式声明/初始化(有时候很方便),但可能导致类似这样的问题。
最优雅的解决方案是在测试变量之前检查变量是否已设置为某种东西。
if ( $posts && isset($no_upcoming_events) && !$no_upcoming_events ) {
...
}
如果未设置$no_upcoming_events
,isset
将失败并且if
语句退出(短路)并且永远不会检查$no_upcoming_events
的值,从而避免错误。