自定义快捷代码不显示类别和正确日期

时间:2015-02-05 作者:JohnGrosshans

我编写了一个简短的代码来使用事件插件(该插件创建事件的自定义post类型)。我想从数据库中提取使用特定类别的所有未来事件,并按照事件日期的顺序在页面上列出它们。事件正在显示,但类别选择不起作用,它还显示过去的事件。

以下是我的短代码:

/* Exhibitions Shortcode */
add_shortcode( \'event_list\', \'eventList\' );
function eventList( $atts ) {
    ob_start();
    $query = new WP_Query( array(
        \'post_type\' => \'event\',
        \'tax\' => \'\',
        \'post_status\' => \'publish\',
        \'date_query\' => array(
        array(
        \'column\' => \'event_start_date\',
        \'after\' => date(\'F j, Y\'),
        ),
        ),
        \'posts_per_page\' => \'\',
        \'order\' => \'ASC\',
        \'orderby\' => \'event_start_date\',
    ) );
    if ( $query->have_posts() ) { ?>
    <?php while ( $query->have_posts() ) : $query->the_post(); ?>
    <div id="post-<?php the_ID(); ?>" class="eventListing">
    <div class="column oneThird">
           <?php if ( has_post_thumbnail() ) { the_post_thumbnail(); } ?>
            </div>
            <div class="column twoThird last">
           <a href="<?php the_permalink(); ?>"><h3><?php the_title(); ?></h3></a>
           <?php echo get_the_content( $more_link_text, $stripteaser ); ?>
            </div>
            </div>
            <?php endwhile;
            wp_reset_postdata(); ?>
    <?php $myvariable = ob_get_clean();
    return $myvariable;
    }
}
/* END Exhibitons */
使用的快捷码是[event\\u list tax=“exhibitions”posts\\u per\\u page=“3”]

使用类别更新代码:

/* Exhibitions Shortcode */
add_shortcode( \'event_list\', \'eventList\' );
function eventList( $atts ) {
    ob_start();
    $query = new WP_Query( array(
        \'post_type\' => \'event\',
        \'tax_query\' => array(
            array(
                \'taxonomy\' => \'event-categories\',
                \'field\' => \'slug\',
                \'terms\' => $atts[\'tax\'],
            ),  
        ),
        \'post_status\' => \'publish\',
        \'date_query\' => array(
            \'after\' => date(\'F j, Y\'),
            \'column\' => \'event_start_date\',
        ),
        \'posts_per_page\' => $atts[\'posts_per_page\'],
        \'order\' => \'ASC\',
        \'orderby\' => \'event_start_date\',
    ) );
    if ( $query->have_posts() ) { ?>
    <?php while ( $query->have_posts() ) : $query->the_post(); ?>
    <div id="post-<?php the_ID(); ?>" class="eventListing">
    <div class="column oneThird">
           <?php if ( has_post_thumbnail() ) { the_post_thumbnail(); } ?>
            </div>
            <div class="column twoThird last">
           <a href="<?php the_permalink(); ?>"><h3><?php the_title(); ?></h3></a>
           <?php echo get_the_content( $more_link_text, $stripteaser ); ?>
            </div>
            </div>
            <?php endwhile;
            wp_reset_postdata(); ?>
    <?php $myvariable = ob_get_clean();
    return $myvariable;
    }
}
/* END Exhibitons */

2 个回复
最合适的回答,由SO网友:Sean Grant 整理而成

只要看一下你的代码,我就会看到一些我要调查的地方。

1) 我看不到通过短代码提供的$ATT有任何用处。特别是“tax”和“post\\u per\\u page”属性。

所以试着改变这一点;

\'tax\' => \'\',
对此:

\'tax_query\' => array(
    array(
        \'taxonomy\' => \'category\',
        \'field\'    => \'slug\',
        \'terms\'    => \'$atts[\'tax\']\',
    ),
),
与空白posts\\u per\\u页面相同:

\'posts_per_page\' => \'$atts[\'posts_per_page\']\',
看起来你已经修复了第1版。干得好。:)

2) 要解决日期问题,我们可能需要知道事件插件创建的自定义字段是如何存储事件日期的。

编辑:是。因此,创建自定义post类型的插件似乎也创建了自定义DB表。如果要获取event\\u start\\u日期,需要参考该自定义表。

SO网友:JohnGrosshans

这将适用于一个主题,但有几件事需要注意,代码正在寻找一个自定义的“事件”帖子类型,它按照“event\\u start\\u date”对事件的顺序进行排序,如果您要更改这些事件以匹配您使用的任何插件,您完全可以使用它!您也可以将这些属性添加到短代码本身中,但我自己并不太喜欢超长短代码。

结束

相关推荐

Remove echo from shortcode

我刚刚开始使用短代码,由于缺乏php知识,我无法想出如何在不使用php echo的情况下使用此短代码。有人能帮我修改代码吗?// SPONSORS Shorcode function sponsors_shortcode($atts) { extract(shortcode_atts(array( \"name\" => \"sponsors\", ), $atts)); $args = array( \"