注意:为Modern Tribe创建活动日历的短代码时未定义的变量

时间:2014-09-29 19:50:54

标签: php wordpress undefined shortcode

我找到了一个教程,允许我为现代部落的#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不太熟练,所以我不确定删除此通知需要做些什么。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

PHP不要求变量的显式声明/初始化(有时候很方便),但可能导致类似这样的问题。

最优雅的解决方案是在测试变量之前检查变量是否已设置为某种东西。

if ( $posts && isset($no_upcoming_events) && !$no_upcoming_events ) {
    ...
}

如果未设置$no_upcoming_eventsisset将失败并且if语句退出(短路)并且永远不会检查$no_upcoming_events的值,从而避免错误。