【wordpress】非公開でも一覧に記事名だけは出したい

ページ内アンカーリンク+記事一覧スタイルの場合

<?php
$args = array(
    'posts_per_page' => -1,
    'post_type' => 'recruit_post', //postは通常の投稿機能
    'post_status' => 'any',
);
?>
<?php $news_posts = get_posts($args); ?>

<?php foreach ($news_posts as $post): setup_postdata($post); ?>
   <?php if(get_post_status($post->ID)=='publish'): ?>
        <a href="#<?php echo $post->post_name;?>">
            <?php the_title(); ?>
        </a>
   <?php else:?>
       <a style="opacity:0.5;">
       <?php // 記事タイトルから「非公開: 」を削除する
        echo $replace = str_replace('非公開: ', '', get_the_title());
        ?>
    </a>
   <?php endif; ?>
<?php endforeach; ?>



<?php foreach ($news_posts as $post): setup_postdata($post); ?>
   <?php if(get_post_status($post->ID)=='publish'): ?>
        <div class="content" id="<?php echo $post->post_name;?>">
        <h3>
            <?php the_title(); ?>
        </h3>
            <?php the_content(); ?>
        </div>
   <?php endif; ?>
<?php endforeach; ?>

公開ステータス以外のものを出す

'post_status' => 'any',

post_statusをanyにすると、あらゆるステータスの記事が表示されるようになる。

表示される記事が公開ステータスかどうか改めて判別

<?php if(get_post_status($post->ID)=='publish'): ?>

<?php endif;?>

公開ステータス以外の記事についてはリンク設定しない、などの分岐をする。

または、ページ内アンカーリンク+記事一覧スタイルの場合、記事一覧の部分については記事内容を出力しないときにも使える。

 

番外:記事slugを拾ってきて、ページ内アンカーリンク式にする

<?php echo $post->post_name;?>

これを、アンカーリンク側のaタグの#先と、アンカーリンク先の要素のidに指定すれば、アンカーリンク可能に。