将后期存档与其他来源整合,并保留日期顺序

时间:2013-06-05 作者:dama_do_bling

我正在将Instagram中的帖子放到WP basic archive视图中;但我希望事情按照日期的顺序显示,而不要搞砸分页(太多)。结果应该是这样的:

BLOG POST JUNE 4th

INSTAGRAM图片6月3日

INSTAGAM图像6月2日

BLOG POST JUNE 1st

BLOG POST MAY 20

除了阅读$wp_query 全局变量,然后只从中提取Instagram?类似于将立柱拉入阵列并使用ksort?如有任何建议,将不胜感激。

更新时间:

Instagram提要通过CURL(和授权的Instagram开发应用程序)集成,并显示在页面上,而不是存储在WP DB中。我意识到我可以存储它们,但我正在集成一个高流量帐户,不想创建100倍无用的帖子(更不用说,为什么要复制Instagram现有的API?)。

SOLUTION:

我使用的组合灵感来自以下两个答案;我最终从中的帖子中得到了“最长”和“最短”日期$wp_query 对象(如最新的和第一个),并通过instagram端点在这些对象之间拖动;然后我把它们收集到一个阵列中,krsort\'d,然后重新循环并打印出来。谢谢大家!

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

如果不知道你的Instagram数据馈送对象是什么样子的,我会这样做,假设你已经有了$wp_query 对象中有帖子。

// we\'re going to merge both objects into one array so we can sort it
$merge_array = array();

// run through actual posts, assuming you already have a wp_query object built
while($loop->have_posts()): $loop->the_post();
    $merge_array[] = array(
        // store original post ID for later reference
        \'post_id\' => $post->ID,
        \'date\' => date(\'U\', strtotime($post->post_date)),
    );
endwhile;

// now loop through instagram stuff and fill up merge array with it as well
foreach($mysterious_instgram_ojbect as $instagram_image){
    $merge_array[] = array(
        \'post_id\' => false, // set this false to know it is not WP post object
        \'date\' => date(\'U\', $instagram_image->date), // guessing here
        // store more info here such as image URL and/or title
    );
}
现在,我们将重要的位填充到一个数组中。让我们把它们分类!

// sort them by date, function defined below
$merge_array_sorted = array_msort($merge_array, array(\'date\' => SORT_DESC));
并循环它们以获得最终输出。

foreach($merge_array_sorted as $feed_object){
    echo date(\'F js\', $feed_object[\'date\']);
    if($feed_object[\'post_id\']){
        // is post, treat as wordpress post!
        echo get_the_title($feed_object[\'post_id\']);
        echo get_permalink($feed_object[\'post_id\']);
    } else {
        // is instagram, treat accordingly
    }
}
把这个放在你的函数中。这是一个非常棒的多维数组分类器,如上所述。

// world famous multidimensional array sort function
function array_msort($array, $cols) {
    $colarr = array();
    foreach ($cols as $col => $order) {
        $colarr[$col] = array();
        foreach ($array as $k => $row) { $colarr[$col][\'_\'.$k] = strtolower($row[$col]); }
    }
    $eval = \'array_multisort(\';
    foreach ($cols as $col => $order) {
        $eval .= \'$colarr[\\\'\'.$col.\'\\\'],\'.$order.\',\';
    }
    $eval = substr($eval,0,-1).\');\';
    eval($eval);
    $ret = array();
    foreach ($colarr as $col => $arr) {
        foreach ($arr as $k => $v) {
            $k = substr($k,1);
            if (!isset($ret[$k])) $ret[$k] = $array[$k];
            $ret[$k][$col] = $array[$k][$col];
        }
    }
    return $ret;
}
这是一个松散的例子。对象现在应该按Unix时间戳排序,您可以将其转换回更有用的日期。您可以很容易地引用WP函数,如the_content() 穿上你的最后一件衣服foreach 环如果需要进一步解释,请告诉我。

SO网友:s_ha_dum

如果你的Instagram帖子和WordPress帖子都是按日期降序排列的,你应该可以这样做:

if (have_posts()) {
  while (have_posts()) {
    the_post();
    the_content(); // etc.
    while ($instagram_date > $post->post_date && $instagram_date < $posts[$wp_query->current_post +1]) {
      // insert instagram posts
    }
  }
}
您的posts_per_page 将被关闭,因为计算中唯一包含的内容是WordPress帖子,但分页应该仍然有效。

显然,这是非常粗糙的代码——实际上是伪代码。我不知道你的Instagram帖子是怎么来的——数组、对象——或者它们是什么样子的。您需要计算出如何检索Instagram日期,并将指针前移到Instagram数组/对象/无论它是什么。我假设您需要一个迭代器来实现该数组/对象或使用array_shift 可能

检查$post->post_date 并将其与$posts[$wp_query->current_post +1] 应该是按日期插入的关键。我认为这是最简单的内存/处理方法。

结束

相关推荐