Cocoonフォーラム

サイト内検索
書き込みの前に以下の3点をご確認ください。
  1. 1つのトピックにつき1つの質問を書き込んでください
  2. 不具合・カスタマイズ対象ページのURLを提示高速化を無効にしてください
  3. 該当部分のキャプチャ・環境情報とともに書き込んでいただけると助かります

何を書き込んだら良いか分からない場合は、以下のテンプレートをコピペしてご利用ください。

不具合・カスタマイズ対象ページのURL:

相談内容:

不具合の発生手順:

解決のために試したこと:

※文字だけでは正しく伝わらない可能性があるため、スクショ画像の添付もお願いします。
※高速化設定をしている場合は無効にしてください。
環境情報:

※↑こちらに「Cocoon設定 → テーマ情報」にある「環境情報」を貼り付けてください。

環境情報の取得方法はこちら。
https://wp-cocoon.com/theme-report/
高速化設定を無効にするにはこちら。
https://wp-cocoon.com/theme-trouble/

フォーラム利用ガイドリンク

  1. フォーラムガイドライン
  2. よくある質問と答え(FAQ)
  3. サポート対象外のケース
  4. 原因不明の不具合用トラブルシューティング
  5. トピックにHTMLを貼り付ける方法(推奨ツール:notepad.pw
  6. 真っ白画面でのエラーメッセージの確認方法
  7. ブラウザ環境チェックツール
  8. Cocoonカスタマイズ依頼

フォーラム質問後、問題等が解決した場合は結果を書き込んでいただけると幸いです。同様の問題で調べている方には、結果が一番気になる部分となります。

パーマリンクに対してメインカテゴリの反...
 
共有:
通知
すべてクリア

[解決済] パーマリンクに対してメインカテゴリの反映

7 投稿
3 ユーザー
3 Reactions
1,750 表示
 tk
(@tk)
Active Member Registered
結合: 7年前
投稿: 11
Topic starter  

お世話になっております。

いつもCocoonを利用させていただいております。tkと申します。

 

不具合というか、要望かもしれませんが、パーマリンク設定で

%category%/%postname%

というような設定をした場合

記事に複数のカテゴリを登録すると、パーマリンクは勝手にカテゴリーIDの一番小さいものが選ばれます。

 

例えば、記事「pasta」にカテゴリ「italian」「umai」の2つを選んだ場合、

umaiのカテゴリIDが小さい場合、以下のようなリンクになってしまいます。

sample.com/umai/pasta

そこで、メインカテゴリーで指定したカテゴリがパーマリンクで選ばれるようにならないでしょうか。

メインカテゴリーで「italian」を選んで、以下のようなリンクにしたいと思っております。

sample.com/italian/pasta

 

調べただけですが、「wp category permalink」というプラグインを使えば指定できるようです。

が、サイトの記事数が多くなった場合、メインカテゴリとプラグインの指定を2つしないといけないので、できればcocoonで対応していただければ非常に助かります。

仕様かもしれませんが、ご検討よろしくお願いいたします<(_ _)>


   
mk2
(@mk2_mk2)
Illustrious Member Moderator
結合: 4年前
投稿: 7960
 

不具合ではなくて、要望なのかな。。。と思いました。
(WordPressの仕様のようですし。)

 

WordPress.orgに載っていましたので、リンクしておきます。

「パーマリンクの使い方」-「複数カテゴリにした投稿の %category% と %tag%」

https://ja.wordpress.org/support/article/using-permalinks/#%e8%a4%87%e6%95%b0%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%81%ab%e3%81%97%e3%81%9f%e6%8a%95%e7%a8%bf%e3%81%ae-%category-%e3%81%a8-tag

「WP Category Permalink」というプラグインについても記載があるようですね。

 

それだけ。。。です、すみません。


   
わいひら reacted
 tk
(@tk)
Active Member Registered
結合: 7年前
投稿: 11
Topic starter  

@mk2_mk2

mk2さん、返信ありがとうございます。

そうですね。ほとんど要望かもしれません

ただ、複数カテゴリを選択した時の挙動で困っている方は多くいて、そのために、cocoonでもメインカテゴリを導入されたと思います。

なので、せっかくメインカテゴリという設定があるのであれば、パーマリンクにも反映していただければと思った次第です<(_ _)>


   
 tk
(@tk)
Active Member Registered
結合: 7年前
投稿: 11
Topic starter  
投稿者:: @tk

お世話になっております。

いつもCocoonを利用させていただいております。tkと申します。

 

不具合というか、要望かもしれませんが、パーマリンク設定で

%category%/%postname%

というような設定をした場合

記事に複数のカテゴリを登録すると、パーマリンクは勝手にカテゴリーIDの一番小さいものが選ばれます。

 

例えば、記事「pasta」にカテゴリ「italian」「umai」の2つを選んだ場合、

umaiのカテゴリIDが小さい場合、以下のようなリンクになってしまいます。

sample.com/umai/pasta

そこで、メインカテゴリーで指定したカテゴリがパーマリンクで選ばれるようにならないでしょうか。

メインカテゴリーで「italian」を選んで、以下のようなリンクにしたいと思っております。

sample.com/italian/pasta

 

調べただけですが、「wp category permalink」というプラグインを使えば指定できるようです。

が、サイトの記事数が多くなった場合、メインカテゴリとプラグインの指定を2つしないといけないので、できればcocoonで対応していただければ非常に助かります。

仕様かもしれませんが、ご検討よろしくお願いいたします<(_ _)>

わいひろ様

お世話になっております。
お忙しいと思いますので、自分なりに関数を作ってみました。
とういうか、ほとんど参考先の方の関数まんまですが・・・

参照: http://lilylila.hatenablog.com/entry/20120802/1343861223

あまり、post_linkフィルタを使ったことがないので、パーマリンクを取得するたびにこのような関数を読んで速度的に問題ないのか、私ではちょっとわかりません。

何かの参考になればと思い、ソースを貼らせていただきました。

ご検討、よろしくお願いいたします。

function hmo_modify_permalink($permalink, $post, $leavename)
{

 /* 書き換えの必要がない場合は即関数を抜ける */
  if ( empty($post->ID) || 
       $post->post_type == 'page' || 
       $post->post_type == 'attachment' || 
       in_array($post->post_type, get_post_types( 
                                array('_builtin' => false) ) ) ) 
  {
       return $permalink;
  }
  
  /* post_metaのparmalink_cat_idにカテゴリIDが登録されていない場合
     は、デフォルトのパーマリンクを使う */
  $permalink_cat_id = '';
  $permalink_cat_id = get_post_meta($post->ID, 'the_page_main_category', true);

  if ($permalink_cat_id == '') {
			return $permalink;
  }

  /* パーマリンク作成、以下はほとんど wp-include/link-template.php
     のget_permalink関数のコピー */
  
  $rewritecode = array(
                '%year%',
                '%monthnum%',
                '%day%',
                '%hour%',
                '%minute%',
                '%second%',
                $leavename? '' : '%postname%',
                '%post_id%',
                '%category%',
                '%author%',
                $leavename? '' : '%pagename%',
  );

  $permalink_str = get_option('permalink_structure');

  if ( '' != $permalink_str && !in_array($post->post_status,
                     array('draft', 'pending', 'auto-draft')) ) {
       $unixtime = strtotime($post->post_date);

       $category = '';
       if ( strpos($permalink_str, '%category%') !== false ) {
       
             /* post_metaのparmalink_cat_idに登録されたidの
                カテゴリを使う */
             if ( $permalink_cat = get_category($permalink_cat_id) ) {
                  $category = $permalink_cat->slug;
                  if ( $parent = $permalink_cat->parent ) {
                       $category = get_category_parents($parent,
                                   false, '/', true) . $category;
                  }
             }
             // show default category in permalinks, without
             // having to assign it explicitly
             if ( empty($category) ) {
                   $default_category = get_category( 
                               get_option( 'default_category' ) );
                   $category = is_wp_error( $default_category ) ?
                                     '' : $default_category->slug;
             }
       }

       $author = '';
       if ( strpos($permalink_str, '%author%') !== false ) {
             $authordata = get_userdata($post->post_author);
             $author = $authordata->user_nicename;
       }

       $date = explode(" ",date('Y m d H i s', $unixtime));
       $rewritereplace =
                       array(
                        $date[0],
                        $date[1],
                        $date[2],
                        $date[3],
                        $date[4],
                        $date[5],
                        $post->post_name,
                        $post->ID,
                        $category,
                        $author,
                        $post->post_name,
                );
                
        /* get_permalink関数で生成した $permalinkをここで上書き */
        $permalink = home_url( str_replace($rewritecode,
                               $rewritereplace, $permalink_str) );
        $permalink = user_trailingslashit($permalink,
                                          'single');        
   } 
   return $permalink;
}

/*テンプレートタグの <?php get_permalink() > が返すリンクを
上書きするフックをかける*/

add_filter( 'post_link', 'hmo_modify_permalink', 10, 3 );

   
わいひら
(@yhira)
Illustrious Memberサイト Admin
結合: 7年前
投稿: 17229
 

申し訳ないですが、今回出来ればWordPressデフォルトの仕様を変更したくないです。
今回は特にURLが変わってしまうので、これまでの仕様で良い方のサイトでもURLが勝手に変わってしまい、SEO的に影響がある可能性も高いです。
カスタマイズ方法が現在分かっているのであれば、カスタマイズで対応していただければ幸いです。


   
 tk
(@tk)
Active Member Registered
結合: 7年前
投稿: 11
Topic starter  

返信ありがとうございます。

なるほどですね。

確かにURLが意図せず変わってしまう方もいるかもしれないですね。

了解いたしました。


   
わいひら reacted
わいひら
(@yhira)
Illustrious Memberサイト Admin
結合: 7年前
投稿: 17229
 

そうなんです。
実際はURLも変更した方が仕様的にはスッキリはするのですが、後からできた機能でURLを意図せず変更させてしまうのは、サイト運営者さんの不利益になる可能性も高くて怖いです ? 


   
tk reacted
共有:

問題の解決に至った場合には、トピック冒頭の「解決済み」をクリックしていただけますと幸いです。

また、有用な回答があった場合は返信右下にある「いいね!」もご活用ください。回答者の励みになります。

「いいね!」機能はフォーラム登録者のみが利用できる機能です。

CC BY-ND 2.1)準じていれば(リンクを貼っていただければ)転載も自由です。カスタマイズ記事を書く際にコード等をコピペ利用していただいて構いません。

フォーラムの使い方がよくわからない場合は、テストトピックで自由にテストしていただいて構いません。

最近の書き込みはこちら。

詳細なカスタマイズ依頼をするならこちら。

タイトルとURLをコピーしました