根据日期数组多次显示帖子

时间:2016-06-16 作者:user520300

我有一个用于简单日程列表的自定义帖子类型,使用meta box插件,我有两个meta box分配给自定义帖子类型。1表示图像,1表示日期时间数组。

enter image description here

在我的功能中。php文件我创建了一个短代码来检索和显示信息。然而,它只显示一次帖子,我在那里显示日期时间,上面写着“数组”。我想将帖子显示3次,因为我已经用meta框存储了3次日期。我不知道如何调整我的查询或循环,使帖子按日期顺序显示3次。下面是我的函数的短代码。php文件。任何帮助都将不胜感激。

// SCHEDULE LIST
add_shortcode( \'schedule\', \'display_schedule\' );

function display_schedule(){
    global $paged;

    $args = array(
        \'post_type\' => \'tbschedule\',
        \'post_status\' => \'publish\',
        \'paged\' => $paged,
        \'posts_per_page\' => 10
    );

    $string = \'\';
    $query = new WP_Query( $args );

    if( $query->have_posts() ){

        $string .= \'<span class="schedules">\';
        while( $query->have_posts() ){

            $query->the_post();
            $schedule_image = "";
            $schedule_image_url = "";
            $images = rwmb_meta( \'tbf_scheduleimage\', \'type=image&size=full\');

            foreach ( $images as $image ){ 
                $schedule_image = "<img src=\'{$image[\'url\']}\' class=\'first\' alt=\'{$image[\'alt\']}\' title=\'{$image[\'title\']}\' />";
                $schedule_image_url = $image[\'url\'];
            } 

            if($schedule_image_url == ""){

                $string .= \'<div class="schedule"><span class="scheduletitle"><a href="\'.get_permalink().\'">\' . get_the_title() . \'<span class="scheduleDate">schedule date: \'.rwmb_meta(\'tbf_scheduledatetime\').\'</span></a></span></div>\';

            }else{

                $string .= \'<div class="schedule">
                <a href="\'.get_permalink().\'"><span class="scheduleimage" style="background-image: url(\'. $schedule_image_url .\');background-repeat: no-repeat;background-position: center center;background-size: contain;"></span></a>
                <span class="newstitle"><p style="height: 122px;"><a href="\'.get_permalink().\'">\' . get_the_title() . \'<span class="scheduleDate">schedule date: \'.rwmb_meta(\'tbf_scheduledatetime\').\'</span></a></p></span> 
                </div>\';

            }
        }
    }

    $string .=  \'</span>\';

    // Paging      
    $q = $query;
    $big = 999999999; // need an unlikely integer
    $string .= \'<p>&nbsp;</p>\'.paginate_links( array(
        \'base\' => str_replace( $big, \'%#%\', esc_url( get_pagenum_link( $big ) ) ),
        \'format\' => \'?paged=%#%\',
        \'current\' => max( 1, get_query_var(\'paged\') ),
        \'total\' => $q->max_num_pages //$q is your custom query
        ) );       

    wp_reset_postdata();

    return $string;
}
// END SCHEDULE LIST

2 个回复
SO网友:shanebp

我不知道是什么rwmb_meta() 做但如果rwmb_meta(\'tbf_scheduledatetime\') 退货array, 然后尝试以下操作:

...
$images = rwmb_meta( \'tbf_scheduleimage\', \'type=image&size=full\');
$dates = rwmb_meta(\'tbf_scheduledatetime\');
var_dump( $dates );
... 
您可能想循环通过$dates 并为中的每个元素重复post数据$dates.

SO网友:CK MacLeod

我也不明白是什么rwmb_meta() 是的,但我可以在编写的代码中看到几个明显的问题。

显然,您希望foreach在$个图像中找到尽可能多的$个图像,然后每次都回显结果。如果是,请从以下位置移除支架:

$schedule_image_url = $image[\'url\'];
            } 
并将其放置在添加到$字符串的每个$图像项之后:

foreach ( $images as $image ){ 
    $schedule_image = "<img src=\'{$image[\'url\']}\' class=\'first\' alt=\'{$image[\'alt\']}\' title=\'{$image[\'title\']}\' />";
    $schedule_image_url = $image[\'url\'];
// } removing the bracket here

    if($schedule_image_url == ""){

        $string .= \'<div class="schedule"><span class="scheduletitle"><a href="\'.get_permalink().\'">\' . get_the_title() . \'<span class="scheduleDate">schedule date: \'.rwmb_meta(\'tbf_scheduledatetime\').\'</span></a></span></div>\';

     } else {

       $string .= \'<div class="schedule">
            <a href="\'.get_permalink().\'"><span class="scheduleimage" style="background-image: url(\'. $schedule_image_url .\');background-repeat: no-repeat;background-position: center center;background-size: contain;"></span></a>
            <span class="newstitle"><p style="height: 122px;"><a href="\'.get_permalink().\'">\' . get_the_title() . \'<span class="scheduleDate">schedule date: \'.rwmb_meta(\'tbf_scheduledatetime\').\'</span></a></p></span> 
            </div>\';

     }
} //bracket added here means for each $image, you get one of the above two depending on whether $schedule_image_url is found
至于发生了什么rwmb_meta(\'tbf_scheduledatetime\'), 如果您试图输出它时它“只是说数组”,那么这将是因为它是一个数组,正如我认为shanebp所说的那样。如果像shanebp一样不知道它是如何设置的,我必须猜测如何访问它的内容,但是如果tbf_sheduledatetime 是一个带有键[0]、[1]等的简单子数组,然后可以使用递增变量。因此,当您在foreach之前初始化变量时:

$i = 0;
$datetime_array = rwmb_meta(\'tbf_scheduledatetime\');
然后,在foreach循环中,$字符串行将显示:

$string .= \'<div class="schedule"><span class="scheduletitle"><a href="\'.get_permalink().\'">\' . get_the_title() . \'<span class="scheduleDate">schedule date: \'. $datetime_array[$i] .\'</span></a></span></div>\';
$i++;
因此,它第一次找到$datetime\\u数组[\'0\',下一次找到$datetime\\u数组[\'1\',等等。

希望这会有所帮助,但没有高度的信心,这才是你真正想要的!

相关推荐

无法在前端显示来自metabox wp_dropdown_ages()的选定帖子标题

我在admin中使用wp_dropdown_pages() 显示自定义帖子类型中的帖子列表workshop. metabox下拉列表在admin中运行良好,我可以选择文章标题并保存它。问题是,当我尝试在前端显示metabox的值时,它只返回所选帖子的ID,而不是标题。如何在前端返回所选帖子的标题?metabox的PHP代码:add_action( \'add_meta_boxes\', \'mysite_work_add_meta_box\' ); if ( ! function_exists(