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

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

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

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

0回答

1253閲覧

wordpress パーマリンクを連番に 日付でリセット

somatech0428

総合スコア37

WordPress

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/11/10 04:58

編集2022/01/12 10:55

wordpressを実装しているのですが、

function mycus_serial_number_slug($slug) { global $post; // 固定ページ カスタム投稿は無視 if (($slug) || ($post->post_type == 'custom') || ($post->post_type == 'page')) { return $slug; } global $wpdb; $slug = $wpdb->get_var("select max(cast(post_name as unsigned)) from {$wpdb->posts} where post_type = 'post' and post_status not in ('object', 'attachment', 'inherit') and post_name regexp '^[0-9]+$'"); $slug ++;    $slug = sprintf("%02d", $slug); return $slug; } add_filter('editable_slug', 'mycus_serial_number_slug');

◆パーマリンク設定
/%year%%monthnum%%day%%postname%/

上記、コードでパーマリンクに2桁の連番を自動的につける実装を行ったのですが
このままだと99件になった場合、想定しているパーマリンクの形にならないため
投稿の日付が1日違うと連番をリセットするようにしたいのですが・・・、調べても記事の投稿日を比較して処理をさせるような情報がありません。

どうかお知恵をお貸しください。
お願いします。

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

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

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

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

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

KazuhiroHatano

2020/11/10 08:35

WordPressの投稿は、post_type・post_parentが異なるのでない限り 同じスラッグは使えないですが、そこは大丈夫ですか?
somatech0428

2020/11/10 09:05

はい、デフォルトの投稿にしか適応しないので 問題ないかと思います。 この回答でよろしいでしょうか・・・
KazuhiroHatano

2020/11/10 09:55

同じスラッグが使えないのは通常投稿でも同様です 新規投稿・更新時の両方の処理において post_nameはwp_unique_post_slugの処理を通され 同じpost_type・post_parentで同じスラッグの投稿がいないことを確認され 同じ引数でget_page_by_pathで取得できる投稿がすでに存在する場合 自動でスラッグに連番が追加されます https://developer.wordpress.org/reference/functions/wp_unique_post_slug/ これは更新時にも通される処理なので 投稿時に無理矢理SQLを直書きして同じスラッグの投稿を作っても 何らかの形で更新処理がかかった時点で連番が付与されることになります
KazuhiroHatano

2020/11/10 10:09

素直にdate('Ymd').[連番]でスラッグを設定してしまう方が 同日の投稿の検索時もpost_nameの前方8文字一致で探せますし 異なる日付の投稿の間でのスラッグの重複が起きることもなく 何かとシンプルかと思います
somatech0428

2020/11/11 00:05 編集

◆前の日 2020010101 ↓ 2020010102 ↓ 2020010103 ◆次の日 2020010201 ↓ 2020010202 ↓ 2020010203 このように日付が進んだら連番がリセットされる動きをしたいので スラッグが重複しない想定なのですが、問題が起こってしまうでしょうか・・・ 知識不足で申し訳ありません。 危険な仕様でしたら、教えてくださったシンプルな方法にさせていただきます。
KazuhiroHatano

2020/11/11 01:11

パーマリンクを/%year%%monthnum%%day%%postname%/とするということは postname(スラッグ)は01,02,03としたいということではないのですか? コードもそのようになっているように見えます これではパーマリンクは重複しなくてもスラッグは重複してしまいます そうなるとWordPress側で重複したスラッグには -1,-2...のように連番が付与されてしまいます urlをそのようにしたいのであれば素直に postnameを2020010201, 2020010202...とした方がシンプルです
somatech0428

2020/11/11 01:40 編集

ありがとうございます。 やっと理解しました。 リセットするとスラッグが重複してしまうのですね・・・ postnameに日付と下二桁連番にすると重複しませんね。 ただ、日付をまたぐと下二桁の連番をリセットする方法が、調べたのですが見つからなくて もし、なにか方法をご存知でしたらご教授お願いします。
KazuhiroHatano

2020/11/11 01:47

先のコメントで記述したように post_nameを2020010201, 2020010202...のようにすれば 同日の投稿の検索もpost_nameの前方8文字一致で探せます post_dateカラムで検索する必要もないはずです
somatech0428

2020/11/11 01:51

ありがとうございます!! 申し訳ありません!知識不足で・・・ 文字一致で条件分岐ですね! コードを修正して、記載します!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問