高级自定义字段按日期对重复器进行排序

时间:2013-10-11 作者:James B

我在页面模板上有一个repeater字段,用于显示带有链接的小片段,该链接需要按日期排序(最近的1日)。我使用的是当前代码,但没有任何排序。

        <?php if(get_field(\'in_the_news\')): ?>
            <?php while(has_sub_field(\'in_the_news\')): ?>
                        <article id="post-<?php the_ID(); ?>" class="open post type-post  format-standard hentry" role="article">

                            <header class="article-header">

                                <h1 class="h2" style="font-size:16px;"><a href="<?php the_sub_field(\'link\'); ?>" rel="bookmark" target="_blank"><?php the_sub_field(\'title\'); ?></a></h1>
                                <p class="byline vcard"><?php the_sub_field(\'publisher\'); ?> - 
                                <?php 
                                //the_sub_field(\'published_date\');
                                /*if(get_sub_field(\'published_date\'))
                                {
                                    $date = DateTime::createFromFormat(\'Ymd\', get_sub_field(\'published_date\'));
                                    echo \'Published: \';
                                    echo $date->format(\'F j, Y\');

                                }*/
                                ?>
<?php 
 //NO PHP 5.3 support. this instead.
$date = get_sub_field(\'published_date\');
// $date = 19881123 (23/11/1988)

// extract Y,M,D
$y = substr($date, 0, 4);
$m = substr($date, 4, 2);
$d = substr($date, 6, 2);

// create UNIX
$time = strtotime("{$d}-{$m}-{$y}");

// format date (23/11/1988)
echo date(\'d/m/Y\', $time);
?>

1 个回复
SO网友:s1lv3r

我认为这在ACF提供的API函数中是不可能的。我会先尝试将值保存到一个临时数组中,然后使用php对数组中的值进行排序(使用krsort() 例如)。

类似这样的事情(只是想说明一下):

while(has_sub_field(\'in_the_news\')) {

    $date = get_sub_field(\'published_date\');
    // $date = 19881123 (23/11/1988)

    // extract Y,M,D
    $y = substr($date, 0, 4);
    $m = substr($date, 4, 2);
    $d = substr($date, 6, 2);

    // create UNIX
    $time = strtotime("{$d}-{$m}-{$y}");

    $tmp_array[$time] = array(
        \'link\' => get_sub_field(\'link\'),
        \'title\' => get_sub_field(\'title\'),
        \'publisher\' => get_sub_field(\'publisher\'),
        \'date\' => date(\'d/m/Y\', $time)  
    );
}

krsort($tmp_array);

foreach($tmp_array as $entry ) {
    // your html ...
}
PS:如果可能的话,首先最好以适当的格式保存时间戳(即unix时间戳)。19881123 是一种奇怪的日期格式。

结束

相关推荐

Sorting/Ordering Poll Plugin?

我想创建一个民意调查,其中向用户显示一个简短的项目列表,然后按照他们选择的与问题相关的顺序进行排序。环顾四周一段时间后,我发现WordPress有几个不错的民意调查插件,但它们都是简单的单选按钮/复选框;它们都不支持此类型。编写自己的简单表单非常简单,但我必须以某种方式适应数据存储。如果我能找到某种插件就更好了。

高级自定义字段按日期对重复器进行排序 - 小码农CODE - 行之有效找到问题解决它

高级自定义字段按日期对重复器进行排序

时间:2013-10-11 作者:James B

我在页面模板上有一个repeater字段,用于显示带有链接的小片段,该链接需要按日期排序(最近的1日)。我使用的是当前代码,但没有任何排序。

        <?php if(get_field(\'in_the_news\')): ?>
            <?php while(has_sub_field(\'in_the_news\')): ?>
                        <article id="post-<?php the_ID(); ?>" class="open post type-post  format-standard hentry" role="article">

                            <header class="article-header">

                                <h1 class="h2" style="font-size:16px;"><a href="<?php the_sub_field(\'link\'); ?>" rel="bookmark" target="_blank"><?php the_sub_field(\'title\'); ?></a></h1>
                                <p class="byline vcard"><?php the_sub_field(\'publisher\'); ?> - 
                                <?php 
                                //the_sub_field(\'published_date\');
                                /*if(get_sub_field(\'published_date\'))
                                {
                                    $date = DateTime::createFromFormat(\'Ymd\', get_sub_field(\'published_date\'));
                                    echo \'Published: \';
                                    echo $date->format(\'F j, Y\');

                                }*/
                                ?>
<?php 
 //NO PHP 5.3 support. this instead.
$date = get_sub_field(\'published_date\');
// $date = 19881123 (23/11/1988)

// extract Y,M,D
$y = substr($date, 0, 4);
$m = substr($date, 4, 2);
$d = substr($date, 6, 2);

// create UNIX
$time = strtotime("{$d}-{$m}-{$y}");

// format date (23/11/1988)
echo date(\'d/m/Y\', $time);
?>

1 个回复
SO网友:s1lv3r

我认为这在ACF提供的API函数中是不可能的。我会先尝试将值保存到一个临时数组中,然后使用php对数组中的值进行排序(使用krsort() 例如)。

类似这样的事情(只是想说明一下):

while(has_sub_field(\'in_the_news\')) {

    $date = get_sub_field(\'published_date\');
    // $date = 19881123 (23/11/1988)

    // extract Y,M,D
    $y = substr($date, 0, 4);
    $m = substr($date, 4, 2);
    $d = substr($date, 6, 2);

    // create UNIX
    $time = strtotime("{$d}-{$m}-{$y}");

    $tmp_array[$time] = array(
        \'link\' => get_sub_field(\'link\'),
        \'title\' => get_sub_field(\'title\'),
        \'publisher\' => get_sub_field(\'publisher\'),
        \'date\' => date(\'d/m/Y\', $time)  
    );
}

krsort($tmp_array);

foreach($tmp_array as $entry ) {
    // your html ...
}
PS:如果可能的话,首先最好以适当的格式保存时间戳(即unix时间戳)。19881123 是一种奇怪的日期格式。

相关推荐

DatePicker Altfield和AltFormat在POST中保存新的元键/值?

我使用Meta Box插件为Woocommerce产品创建了一个新的metabox,该插件使用Datepicker接收事件日期。我正在使用st-event_start_date 用于在前端网格元素上显示日期的元数据(如下所示):现在,我想以另一种格式存储日期,以便使用它按日期筛选帖子。我对altFormat 和altField 中的选项Datepicker docs 并将它们添加到我的post js\\u选项中。不幸的是,这似乎不起作用。我做错了什么?WordPress在使用altField时会创建新的元