質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

Q&A

解決済

1回答

1775閲覧

wordpressのカスタム投稿でパーマリンクをfunction.phpで変更したい

退会済みユーザー

退会済みユーザー

総合スコア0

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

0グッド

0クリップ

投稿2019/06/10 08:05

前提・実現したいこと

wordpressのカスタム投稿でパーマリンクをfunction.phpで変更したいのですが、うまくいきません。

参考サイト:http://morilog.com/wordpress/post_type/post_type_permalink/

function.phpを変更後、ダッシュボードの設定のパーマリンク設定で「数字ベース」に変更したのに反映されません。

addToukouTypeSeminar()の書き方が干渉して反映されないのでしょうか。

function.php

<?php add_theme_support('title-tag'); add_theme_support('html5', array('search-form', 'comment-form', 'comment-list', 'gallery', 'caption')); add_theme_support('automatic-feed-links'); add_theme_support('post-thumbnails'); // ================================================================================ // メニューを登録 // ================================================================================ // wp_nav_menu()で呼び出し register_nav_menu('header-nav', 'header_nav'); register_nav_menu('footer-nav', 'footer_nav'); // ================================================================================ // jsファイル読み込み // ================================================================================ function twpp_enqueue_scripts() { wp_enqueue_script( 'main-script', get_template_directory_uri() . '/application.js', array(), false, true ); } add_action( 'wp_enqueue_scripts', 'twpp_enqueue_scripts' ); // ================================================================================ // ビジュアルエディタにcss適用 // ================================================================================ function add_editor_style_cb() { add_editor_style(); } add_action('admin_init', 'add_editor_style_cb'); // ================================================================================ // カスタム投稿タイプ追加 // ================================================================================ function addToukouTypeSeminar() { $Supports = [ 'title', 'editor', 'custom-fields', 'revisions' ]; register_post_type( 'seminar', array( 'label' => 'セミナー', 'labels' => array( 'name' => 'セミナー', 'singular_name' => 'セミナー', 'all_items' => 'セミナー一覧', ), 'public' => true, 'has_archive' => true, 'menu_position' => 5, 'supports' => $Supports, 'taxonomies' => array( 'category', 'post_tag' ), ) ); } add_action( 'init', 'addToukouTypeSeminar' ); // ================================================================================ // パーマリンク設定 // ================================================================================ add_filter( 'post_type_link', 'my_post_type_link', 1, 2 ); function my_post_type_link( $link, $post ){ if ( 'news' === $post->post_type ) { return home_url( '/archives/news/' . $post->ID ); } else { return $link; } } add_filter( 'rewrite_rules_array', 'my_rewrite_rules_array' ); function my_rewrite_rules_array( $rules ) { $new_rules = array( 'archives/news/([0-9]+)/?$' => 'index.php?post_type=news&p=$matches[1]', ); return $new_rules + $rules; } // ================================================================================ // ぱんくず実装 // ================================================================================ if ( ! function_exists( 'custom_breadcrumb' ) ) { function custom_breadcrumb( $wp_obj = null ) { // トップページでは何も出力しない if ( is_home() || is_front_page() ) return false; //そのページのWPオブジェクトを取得 $wp_obj = $wp_obj ?: get_queried_object(); echo '<div class="c-breadcrumb">'. '<ol class="c-breadcrumb__lists">'. '<li class="c-breadcrumb__item">'. '<a href="'. home_url() .'"><span>TOP</span></a>'. '</li>'; if ( is_attachment() ) { /** * 添付ファイルページ ( $wp_obj : WP_Post ) * ※ 添付ファイルページでは is_single() も true になるので先に分岐 */ echo '<li class="c-breadcrumb__item"><span>'. $wp_obj->post_title .'</span></li>'; } elseif ( is_single() ) { /** * 投稿ページ ( $wp_obj : WP_Post ) */ $post_id = $wp_obj->ID; $post_type = $wp_obj->post_type; $post_title = $wp_obj->post_title; // カスタム投稿タイプかどうか if ( $post_type !== 'post' ) { $the_tax = 'category'; //通常の投稿の場合、カテゴリーを表示 } // タクソノミーが紐づいていれば表示 if ( $the_tax !== "" ) { $child_terms = array(); // 子を持たないタームだけを集める配列 $parents_list = array(); // 子を持つタームだけを集める配列 // 投稿に紐づくタームを全て取得 $terms = get_the_terms( $post_id, $the_tax ); if ( !empty( $terms ) ) { //全タームの親IDを取得 foreach ( $terms as $term ) { if ( $term->parent !== 0 ) $parents_list[] = $term->parent; } //親リストに含まれないタームのみ取得 foreach ( $terms as $term ) { if ( ! in_array( $term->term_id, $parents_list ) ) $child_terms[] = $term; } // 最下層のターム配列から一つだけ取得 $term = $child_terms[0]; if ( $term->parent !== 0 ) { // 親タームのIDリストを取得 $parent_array = array_reverse( get_ancestors( $term->term_id, $the_tax ) ); foreach ( $parent_array as $parent_id ) { $parent_term = get_term( $parent_id, $the_tax ); echo '<li class="c-breadcrumb__item">'. '<a href="'. get_term_link( $parent_id, $the_tax ) .'">'. '<span>'. $parent_term->name .'</span>'. '</a>'. '</li>'; } } // 最下層のタームを表示 echo '<li class="c-breadcrumb__item">'. '<a href="'. get_term_link( $term->term_id, $the_tax ). '">'. '<span>'. $term->name .'</span>'. '</a>'. '</li>'; } } // 投稿自身の表示 echo '<li class="c-breadcrumb__item"><span>'. $post_title .'</span></li>'; } elseif ( is_page() ) { /** * 固定ページ ( $wp_obj : WP_Post ) */ $page_id = $wp_obj->ID; $page_title = $wp_obj->post_title; // 親ページがあれば順番に表示 if ( $wp_obj->post_parent !== 0 ) { $parent_array = array_reverse( get_post_ancestors( $page_id ) ); foreach( $parent_array as $parent_id ) { echo '<li class="c-breadcrumb__item">'. '<a href="'. get_permalink( $parent_id ).'">'. '<span>'.get_the_title( $parent_id ).'</span>'. '</a>'. '</li>'; } } // 投稿自身の表示 echo '<li class="c-breadcrumb__item"><span>'. $page_title .'</span></li>'; } elseif ( is_post_type_archive() ) { /** * 投稿タイプアーカイブページ ( $wp_obj : WP_Post_Type ) */ echo '<li class="c-breadcrumb__item"><span>'. $wp_obj->label .'</span></li>'; } elseif ( is_date() ) { /** * 日付アーカイブ ( $wp_obj : null ) */ $year = get_query_var('year'); $month = get_query_var('monthnum'); $day = get_query_var('day'); if ( $day !== 0 ) { //日別アーカイブ echo '<li class="c-breadcrumb__item"><a href="'. get_year_link( $year ).'"><span>'. $year .'年</span></a></li>'. '<li class="c-breadcrumb__item"><a href="'. get_month_link( $year, $month ). '"><span>'. $month .'月</span></a></li>'. '<li class="c-breadcrumb__item"><span>'. $day .'日</span></li>'; } elseif ( $month !== 0 ) { //月別アーカイブ echo '<li class="c-breadcrumb__item"><a href="'. get_year_link( $year ).'"><span>'.$year.'年</span></a></li>'. '<li class="c-breadcrumb__item"><span>'.$month . '月</span></li>'; } else { //年別アーカイブ echo '<li class="c-breadcrumb__item"><span>'.$year.'年</span></li>'; } } elseif ( is_author() ) { /** * 投稿者アーカイブ ( $wp_obj : WP_User ) */ echo '<li class="c-breadcrumb__item"><span>'. $wp_obj->display_name .' の執筆記事</span></li>'; } elseif ( is_archive() ) { /** * タームアーカイブ ( $wp_obj : WP_Term ) */ $term_id = $wp_obj->term_id; $term_name = $wp_obj->name; $tax_name = $wp_obj->taxonomy; // 親ページがあれば順番に表示 if ( $wp_obj->parent !== 0 ) { $parent_array = array_reverse( get_ancestors( $term_id, $tax_name ) ); foreach( $parent_array as $parent_id ) { $parent_term = get_term( $parent_id, $tax_name ); echo '<li class="c-breadcrumb__item">'. '<a href="'. get_term_link( $parent_id, $tax_name ) .'">'. '<span>'. $parent_term->name .'</span>'. '</a>'. '</li>'; } } // ターム自身の表示 echo '<li class="c-breadcrumb__item">'. '<span>'. $term_name .'</span>'. '</li>'; } elseif ( is_search() ) { /** * 検索結果ページ */ echo '<li class="c-breadcrumb__item"><span>「'. get_search_query() .'」で検索した結果</span></li>'; } elseif ( is_404() ) { /** * 404ページ */ echo '<li class="c-breadcrumb__item"><span>お探しのページは見つかりませんでした。</span></li>'; } else { /** * その他のページ(無いと思うが一応) */ echo '<li class="c-breadcrumb__item"><span>'. get_the_title() .'</span></li>'; } echo '</ol></div>'; // 冒頭に合わせて閉じタグ } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KazuhiroHatano

2019/06/11 08:09

newsってカスタム投稿とseminorってカスタム投稿があって newsの方のパーマリンクをカスタマイズしたいってことでOK? うまくいかないっていうのは /archives/news/[ID]のパーマリンクが有効にならないってこと? それともパンくずリスト内のリンクのURLがそれにならない?
退会済みユーザー

退会済みユーザー

2019/06/11 12:55

申し訳ありません。先ほど自己解決致しました。
guest

回答1

0

ベストアンサー

register_post_typeに'rewrite' => array('with_front' => false),を追加して、下記のように編集したらうまくいきました

add_filter( 'post_type_link', 'my_post_type_link', 1, 2 ); function my_post_type_link( $link, $post ){ if ( 'seminar' === $post->post_type ) { return home_url( '/seminar/' . $post->ID ); } else { return $link; } } add_filter( 'rewrite_rules_array', 'my_rewrite_rules_array' ); function my_rewrite_rules_array( $rules ) { $new_rules = array( 'seminar/([0-9]+)/?$' => 'index.php?post_type=seminar&p=$matches[1]', ); return $new_rules + $rules; }

投稿2019/06/11 12:56

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問