サポート » プラグイン » post expiratorで表示期限を未設定も含めての期限順ソートをする方法

  • 解決済 hario_bee

    (@hario_bee)


    投稿の表示期限を設定するプラグイン「post expirator」を利用しています。
    表示期限が迫っているものをソートして出力させることには以下のように実現できました。

    $xxxposts = get_posts(array(‘post_type’ => ‘xxx’, ‘meta_key’ => ‘_expiration-date’, ‘order’ => ‘ASC’, ‘orderby’ => ‘meta_value’));

    しかし、この内容ですと表示期限が未設定の投稿に関しては出力されません。
    (表示期限が未設定の投稿に関してはデータベースの’meta_key’ => ‘_expiration-date’が生成されないようです。)

    理想の表示順は、

    1. 表示期限が設定されていて期限が近い順
    2. 表示期限が未設定の投稿の新しい順(デフォルトの表示順)

    となります。
    こちらご教授いただければと思います。
    何卒よろしくお願い致します。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • 表示期限を設けないと何も入らないのであれば、表示期限を設けない投稿に対し
    カスタムフィールドに決められたキーや値を入れて出力しかないと思います。
    meta_keyが空白ではどうしようもないです。

    トピック投稿者 hario_bee

    (@hario_bee)

    stranger-jp様 早速のレスありがとうございます。

    カスタムフィールドを設けようと
    key:_expiration-date
    値:0
    で作成しましたが、カスタムフィールドが同名であることからなのか「操作を実行する権限がありません。」とのエラーが返ってきます。
    Advanced Custom Fieldsからの追加も試みましたが、「__expiration-date」とアンダーバーが一つ追加した形でデータベースに格納されていました。

    引き続きよろしくお願い致します。

    値を同じものにしなくても例えば
    key:期限なし
    値:0
    とでもすれば良くないですか?
    こんな感じにすれば分けて出力できます。

    <h2>表示期限が設定されていて期限が近い順</h2>
    <?php
    	$args = array(
    		'post_type' => 'xxx',
    		'posts_per_page' => -1,
    		'post_status' => 'publish',
    		'meta_key' => '_expiration-date',
    		'order' => 'ASC',
    		'orderby' => 'meta_value',
    	);
    ?>
    <?php $query = new WP_Query($args); ?>
    <?php while ( $query->have_posts() ) : $query->the_post(); ?>
    <li><a href="<?php the_permalink() ?>"><?php the_title() ?></a></li>
    <?php endwhile; ?>
    
    <br />
    
    <h2>表示期限が未設定の投稿の新しい順(デフォルトの表示順)</h2>
    <?php
    $args = array(
    		'post_type' => 'xxx',
    		'posts_per_page' => -1,
    		'post_status' => 'publish',
    		'meta_key' => '期限なし',
    	);
    ?>
    <?php $query = new WP_Query($args); ?>
    <?php while ( $query->have_posts() ) : $query->the_post(); ?>
    <li><a href="<?php the_permalink() ?>"><?php the_title() ?></a></li>
    <?php endwhile; ?>

    トピック投稿者 hario_bee

    (@hario_bee)

    stranger-jp様 再度レスありがとうございます。

    上記のコードの方法ですと表示順が、

    1. 表示期限が設定されていて期限が近い順
    2. 表示期限に関係なく全ての新しい順

    になるかと思います。ですので表示期限が設定されていてる投稿が重複していまいます。

    「未設定の場合は別にカスタムフィールドにチェック」ということも考えましたが避けたいです。できるだけ1つのループで済ませたいとも思っています。

    いささか、わがままでしょうか。
    引き続きよろしくお願い致します。

    だから

    表示期限を設けないと何も入らないのであれば、表示期限を設けない投稿に対し
    カスタムフィールドに決められたキーや値を入れて出力しかないと思います。
    meta_keyが空白ではどうしようもないです。

    です。

    2.表示期限に関係なく全ての新しい順

    にはなりません。

    「未設定の場合は別にカスタムフィールドにチェック」ということも考えましたが避けたいです。できるだけ1つのループで済ませたいとも思っています。

    無理だと思います。
    自分の頭からこれ以上の事は絞り出せません。

    トピック投稿者 hario_bee

    (@hario_bee)

    トピック投稿者 hario_bee

    (@hario_bee)

    stranger-jp様 再度レスありがとうございます。

    表示期限を設けない投稿に対し

    という箇所を見落としていました。
    無事ご教授いただきました内容で実装できました!
    ありがとうございました!

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「post expiratorで表示期限を未設定も含めての期限順ソートをする方法」には新たに返信することはできません。