Top

メモ書き

今までに個人的なメモをここに残すことはありましたが、今回が一番メモ。
解説なしです。時間ができたら解説を追記します。

コピペでOK!WordPressのカスタム投稿をfunctions.phpに記述して実現する方法!

/* カスタム投稿タイプ(よくある質問)を定義
*************************************************************************************/
add_action( 'init', 'register_cpt_faq' );

function register_cpt_faq() {
    $labels = array(
        'name' => __( 'よくある質問', 'faq' ),
        'singular_name' => __( 'よくある質問', 'faq' ),
        'add_new' => __( 'よくある質問を追加', 'faq' ),
        'add_new_item' => __( '新しいよくある質問を追加', 'faq' ),
        'edit_item' => __( 'よくある質問を編集', 'faq' ),
        'new_item' => __( '新しいよくある質問', 'faq' ),
        'view_item' => __( 'よくある質問を見る', 'faq' ),
        'search_items' => __( 'よくある質問検索', 'faq' ),
        'not_found' => __( 'よくある質問が見つかりません', 'faq' ),
        'not_found_in_trash' => __( 'ゴミ箱によくある質問はありません', 'faq' ),
        'parent_item_colon' => __( '親よくある質問', 'faq' ),
        'menu_name' => __( 'よくある質問', 'faq' ),
    );
    $args = array(
        'labels' => $labels,
        'hierarchical' => true,
        'description' => 'よくある質問',
        'supports' => array( 'title', 'excerpt', 'thumbnail', 'custom-fields' ),
        'public' => true,
        'show_ui' => true,
        'show_in_nav_menus' => true,
        'publicly_queryable' => true,
        'exclude_from_search' => false,
        'has_archive' => true,
        'query_var' => true,
        'can_export' => true,
        'rewrite' => true,
        'capability_type' => 'post'
    );
    register_taxonomy(
      'faq-cat',
      'faq',
      array(
        'label' =>  'よくある質問カテゴリー',
        'labels' => array(
          'popular_items' => 'よく使うよくある質問カテゴリー',
          'edit_item' => 'よくある質問カテゴリーを編集',
          'add_new_item' => '新規よくある質問カテゴリーを追加',
          'search_items' =>  'よくある質問カテゴリーを検索',
        ),
        'public' => true,
//		'show_ui' => false,  // この行を追加してUIから非表示に
        'hierarchical' => true,
		'rewrite' => array('slug' => 'faq-cat')
      )
    );
    register_post_type( 'faq', $args );
}

// カスタム投稿タイプ(よくある質問)のパーマリンクを記事IDにする
add_action('init', 'myposttype_rewrite_faq');

function myposttype_rewrite_faq() {
    global $wp_rewrite;
  
    $queryarg = 'post_type=faq&p=';
    $wp_rewrite->add_rewrite_tag('%faq_id%', '([^/]+)',$queryarg);
    $wp_rewrite->add_permastruct('faq', 'faq/%faq-cat%/%faq_id%.html', false);
}

// よくある質問の詳細ページをカテゴリーを含むURLにする
function custom_term_link_faq( $post_link, $id = 0 ) {
    $post = get_post($id);
    if ( is_wp_error($post) || 'faq' != $post->post_type || empty($post->ID) ) {
        return $post_link;
	}
    $terms = get_the_terms($post->ID, 'faq-cat');
    if( is_wp_error($terms) || !$terms ) {
        $term_slug = 'uncategorised';
    } else {
        $term_obj = array_pop($terms);
        $term_slug = $term_obj->slug;
    }
    return home_url(user_trailingslashit( "faq/$term_slug/$post->ID.html" ));
}

add_filter( 'post_type_link', 'custom_term_link_faq' , 1, 3 );

functions.phpにコピペしてご覧あれ。