HighLab

wordpressカスタム投稿作成

  • 公開日:
  • 更新日:
  • 文字数:3973文字
add_action( 'init', 'create_post_type' );
function create_post_type() {
    register_post_type( 'news', [ // 投稿タイプ名の定義
        'labels' => [
            'name'          => 'ニュース', // 管理画面上で表示する投稿タイプ名
            'singular_name' => 'news',    // カスタム投稿の識別名
        ],
        'public'        => true,  // 投稿タイプをpublicにするか
        'has_archive'   => false, // アーカイブ機能ON/OFF
        'menu_position' => 5,     // 管理画面上での配置場所
        'show_in_rest'  => true,  // 5系から出てきた新エディタ「Gutenberg」を有効にする
        'supports' => array('title','editor,'thumbnail'),
    ]);
}
add_action( 'init', 'create_post_type' );

カスタム投稿のURL変更 プラグインを利用

Custom Post Type Permalinks

カスタム投稿の情報を取得方法

トップページでの表示

<ul>
        <?php
        $args = array(
          'post_type' => 'news',
          'posts_per_page' => 4,
          //'category__not_in' => array(5)
          //'cat' =>1
          //'orderby' => 'rand',
          );
        ?>

          <?php $the_query = new WP_Query( $args ); ?>
          <?php if ( $the_query->have_posts() ) : ?>
            <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
              <li><time><?php the_time('Y.m.d');?></time><h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3></li>
            <?php endwhile; ?>
          <?php else : ?>
          <?php endif; ?>

      </ul>

アーカイブページ(arhive-news.php)

    <ul>
              <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
                  <li><time><?php the_time('Y.m.d');?></time><h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3></li>
                <?php endwhile; ?>
              <?php else : ?>
                <h2 style="padding-left:20px;">お知らせが登録されてません。</h2>
              <?php endif; ?>
            </ul>
    
            <div class="pagination">
              <?php $args = array(
                'prev_next'          => true,
                'prev_text'          => '<',
                'next_text'          => '>',
                'mid_size' =>5,
              ); ?>
              <?php echo paginate_links($args); ?>
            </div>
            <?php wp_reset_postdata(); ?>

    ページネーションSCSS

    .pagination{
        margin-top: 60px;
        text-align: center;
        width: 100%;
        a,span{
          font-size: 16px;
          display: inline-block;
          margin: 0px 10px;
          @include media(md){
            font-size: 18px;
          }
        }
      }

     

    タクソノミーの追加方法

  • 詳しくはこちら
  • https://worldofit.work/php/877/

 

  • Singleページ

    条件分岐したい場合

    if( is_singular('news') ) {
     }elseif(is_single()){
    
     }

     

    <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
    <article class="news-article">
          <div class="content-width">
            <h2><?php the_title(); ?></h2>
            <time><?php the_time('Y.m.d');?></time>
            <div class="news-article-img">
              <?php the_post_thumbnail(''); ?>
            </div>
            <div class="news-article-content">
              <p><?php the_content(); ?></p>
            </div>
          </div>
        </article>
    
      <?php endwhile; ?>
      <?php endif; ?>
      <?php wp_reset_postdata(); ?>

    カスタム投稿タイプのアーカイブかどうかの判別

    if( is_post_type_archive( 'news' ) ) {
    }

     

    カスタム投稿のアーカイブの記事数を変更

    add_action( 'pre_get_posts', 'my_custom_query_vars' );
    function my_custom_query_vars( $query ) {
        /* @var $query WP_Query */
        if ( !is_admin() && $query->is_main_query()) {
            if ( is_post_type_archive('カスタム投稿タイプのスラッグ') ) {
                $query->set( 'posts_per_page' , 10 );//表示したい数
            }
        }
        return $query;
    }

    参考

    https://qiita.com/sola-msr/items/a715f02265acd4864b03

    https://php1st.com/2021

  • http://kawatama.net/web/1288