4

1 つの長いフィードに表示したいニュースを日付順に並べ替えてユーザーが投稿できるようにするプロファイルがいくつかあります。

現時点では、これは各プロファイルをループし、そのプロファイルからのニュースを一覧表示してから、次のプロファイルに移動し、ニュースを一覧表示します。すべてが混ざり合うわけではありません。

各プロファイルのすべてのニュースを混ぜ合わせて、日付順に並べ替えるにはどうすればよいですか?

<?php global $post;
$args = array('numberposts' => -1);
$myposts = get_posts( $args );
foreach( $myposts as $post ) : setup_postdata($post); ?>
   <?php while(the_repeater_field('news')): ?>
      <div class="social-news-item">
         <p class="social-news"><?php the_sub_field('news_description'); ?></p>
     <p class="social-company"><?php echo the_title(); ?></p>
      </div>
   <?php endwhile; ?>
<? endforeach; wp_reset_postdata(); ?>

日付フィールドは次のとおりです。

<?php the_sub_field('date'); ?>

4

4 に答える 4

3

プログラムで順序を変更したい場合は、特にPHP のさまざまな配列ソート関数を調べてください。

  • uasort()— ユーザー定義の比較関数を使用して配列をソートし、インデックスの関連付けを維持する
  • uksort()— ユーザー定義の比較関数を使用して配列をキーでソートします
  • usort()— ユーザー定義の比較関数を使用して配列を値で並べ替える

しかし、ワードプレスのチェックアウトについては、これhttp://codex.wordpress.org/Template_Tags/get_posts

与えられたリンクの例:

デフォルト:

<?php 
   $args = array(
    'posts_per_page'  => 5,
    'numberposts'     => 5,
    'offset'          => 0,
    'category'        => '',
    'orderby'         => 'post_date',
    'order'           => 'DESC',
    'include'         => '',
    'exclude'         => '',
    'meta_key'        => '',
    'meta_value'      => '',
    'post_type'       => 'post',
    'post_mime_type'  => '',
    'post_parent'     => '',
    'post_status'     => 'publish',
    'suppress_filters' => true );
 ?>

使用する:

 <?php $posts_array = get_posts( $args ); ?> 

これがあなたを助けますように。

于 2013-03-26T07:32:36.550 に答える
2

コメントに書いたように、私はワードプレスを知らず、何かが間違っているかもしれませんが、アイデアは大丈夫​​かもしれません。

可能であれば、最初にすべての投稿をまとめてから並べ替えることができます。

それらをグループ化するには、オブジェクトをフェッチする一時配列を使用します。したがって、を出力するdivのではなく、配列に「バッファリング」します。

たとえば、配列名がループ内$postsで実行できる場合は、次のようになります(行方不明になった場合は、機能しません)foreachthe_sub_field('news_description');echo

$var = &$posts[]; // this creates a new item in array, and $var is this element
$var->description = the_sub_field('news_description'); // *****
$var->title = the_title();
$var->date = ... // it is important, I don't know if you have it

したがって、最後に、アレイにはすべてのユーザー(またはプロファイル)からのすべての投稿が含まれます。次に、たとえばusort関数を使用してソートします。独自のソート関数を作成する必要があります。マニュアルでは「cmp」なので、同じ名前を使用します。

function cmp($a, $b){
  if($a->date > $b->date)
    return 1;
  elseif($a->date < $b->date)
    return -1;
  else
    return 0;
}

そしてそれを呼びます

usort($posts, 'cmp');

foreach次に、別のループで配列を出力する必要があります。

しかし、私が言ったように、ワードプレスがこれを許可するかどうかはわかりません。

于 2013-03-21T13:02:46.727 に答える
1

「プロフィール」というと、「著者」のことを指していると思います。

$myposts にすべての投稿があると、

$myposts = get_posts( $args );

あなたはそれらすべてを繰り返します

foreach( $myposts as $key => $post )

($key を追加したことに注意してください)

これで、日付をキーとして独自の配列を作成できます

$my_array[$myposts[$key]->post_date][] = ...whatevever you want in the end

最後に表示したいデータを自由に追加してください。例として、投稿の著者とタイトルを見てみましょう。

$the_item[$myposts[$key]->post_author] = $myposts[$key]->post_title;
$my_array[$myposts[$key]->post_date][] = $the_item;

これにより、次のような配列が得られます。

[2007-11-19 22:46:37] => Array
    (
        [0] => Array
            (
                [3] => Title
                [2] => Another title
            )

    )

[2007-11-11 11:11:11] => Array
    (
        [0] => Array
            (
                [3] => Yet another title
                [2] => Foo
            )

        [1] => Array
            (
                [3] => Bar
                [2] => Yuck
            )

すべての投稿が日付順に並べられ、さまざまな作成者による投稿が「混在」しています。任意のソート関数を自由に使用してください (上記のとおり)。shuffle() を使用して少しランダム性を追加したい場合があります... 投稿を表示するには、逆の方法を使用します: 作成した配列を繰り返し処理し、含めたデータ (作成者、タイトル、コンテンツなど) を出力します。 )。参考までに、投稿オブジェクトは次のようになります。

myposts:Array
(
    [0] => stdClass Object
        (
            [ID] => 1455
            [post_author] => 3
            [post_date] => 2013-03-27 22:16:33
            [post_date_gmt] => 2013-03-27 22:16:33
            [post_content] => Content
            [post_title] => Title
            [post_excerpt] => 
            [post_status] => publish
            [comment_status] => closed
            [ping_status] => closed
            [post_password] => 
            [post_name] => title
            [to_ping] => 
            [pinged] => 
            [post_modified] => 2013-03-27 22:16:42
            [post_modified_gmt] => 2013-03-27 22:16:42
            [post_content_filtered] => 
            [post_parent] => 0
            [guid] => http://www.abc.com/wordpress/?p=1455
            [menu_order] => 0
            [post_type] => post
            [post_mime_type] => 
            [comment_count] => 0
            [member_access_visibility] => default
            [filter] => raw
        )

これが問題の解決に役立つことを願っています!

乾杯

JD

于 2013-03-27T22:46:52.673 に答える
0

必要なget_posts()関数呼び出しは 1 つだけです。

文字列で区切られるすべてのユーザー ID の文字列を作成します。

これで、注文とともに引数に追加できます。

$args = array(
    'numberposts' => -1,
    'author' => '1,2,3,4,5',
    'orderby' => 'date' // date is the default anyway, so shouldn't matter
);

次に、get_posts()呼び出しには、それらの作成者によるすべての投稿が含まれます。

HTH

于 2013-03-28T10:37:56.793 に答える