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カスタマイズ依頼

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

パターン内のtocショートコードの記述
 
共有:
通知
すべてクリア

[解決済] パターン内のtocショートコードの記述

11 投稿
3 ユーザー
6 Reactions
278 表示
大門未知子
(@chu-ya)
Illustrious Member Registered
結合: 3年前
投稿: 3131
トピックスターター  

----------------------------------------------
テーマ名:Cocoon
バージョン:2.7.6.1
カテゴリー数:19
タグ数:150
ユーザー数:1
----------------------------------------------
●関連投稿

https://wp-cocoon.com/community/postid/80691/


●現象

パターンに[toc]を記述し、これを配置した。
また、patternショートコードで呼び出した。

パターンも同様で、エラー(Internal Server Error)となります。


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

ご指摘ありがとうございます!
tocとpatternの重複に対応したものをアップしておきました。
https://github.com/xserver-inc/cocoon/commit/627d4510ff42b57cfafcf8f44866b26cd21a3c92

ただパターンのエディター画面の適切な部分に注意文を表示するところがなくて(思い当たらなくて)注意文はありません。


   
大門未知子
(@chu-ya)
Illustrious Member Registered
結合: 3年前
投稿: 3131
トピックスターター  

----------------------------------------------
テーマ名:Cocoon
バージョン:2.7.6.1
カテゴリー数:14
タグ数:12
ユーザー数:1
----------------------------------------------

[toc]が除外され、エラーとならない事を確認しました。
本件をクローズとします。


   
わいひら reacted
mk2
(@mk2_mk2)
Illustrious Member Moderator
結合: 4年前
投稿: 8063
 

「外観」-「パターン」の方しか確認していません。

乱暴かもしれませんけれど、wp_dieを使用して、エラーにすることはできるみたいです。

 
簡単に確認しただけですので、場面の特定は甘いと思います。
(400にする必要があるか分かりませんでしたが、とりあえずしてしまいました。has_shortcode使った方が良いのかもしれないですね、オプションもありますし)
function toc_shortcode_set_error($post_id) {
  // 自動保存や別の処理でないことを確認
  if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
    return;
  }
  // 投稿タイプが wp_block の場合に処理
  if (get_post_type($post_id) === 'wp_block') {
    $post_content = get_post_field('post_content', $post_id);
    if (strpos($post_content, '[toc]') !== false) {
      // 保存処理をキャンセル
      wp_die(' [toc]ショートコードはパターンでは使用できません。保存がキャンセルされました。', '保存エラー', array('response' => 400));
    }
  }
}
add_action('save_post', 'toc_shortcode_set_error');

 

すみません、試してみただけです。


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

ご確認いただきありがとうございます。

mk2さんさんのその発想はなかったです。
パターンエディター画面で使わせていただきました。
ただクラシックギターの場合、画面が切り替わってから出るので、文章紛失防止のため、エラーメッセージは表示しないようにしました。


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

お役に立てて良かったです。

投稿者:: @yhira

ただクラシックギターの場合、画面が切り替わってから出るので、文章紛失防止のため、エラーメッセージは表示しないようにしました。

そうなんですよね。
wp_dieだと、クラシックエディタではどうかなと思っていました。

 

場面の特定が面倒で、その部分のif文は書かなかったのですけれど。

wp_dieのところを以下の書き換えてみました。

add_filter('redirect_post_location', function($location) {
  return add_query_arg('toc_error', 1, $location);
});
// 保存をキャンセルするため false を返す
return false;

先に書いたように場面の特定がない状態ですので、トータルでは以下のような状態なのですけれど。

function replace_toc_shortcode_and_set_error($post_id) {
  // 自動保存や別の処理でないことを確認
  if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
    return;
  }

  $post_content = get_post_field('post_content', $post_id);
  if (strpos($post_content, '[toc]') !== false) {
    
    add_filter('redirect_post_location', function($location) {
      return add_query_arg('toc_error', 1, $location);
    });
    // 保存をキャンセルするため false を返す
    return false;
  }
}
add_action('save_post', 'replace_toc_shortcode_and_set_error');

そして、メッセージ表示用に以下を追加。

function show_toc_error_notice() {
  if (isset($_GET['toc_error'])) {
    echo '<div class="notice notice-error is-dismissible"><p><strong>エラー:</strong> [toc] ショートコードはパターンでは使用できません。</p></div>';
  }
}
add_action('admin_notices', 'show_toc_error_notice');

 

上記のようにすると、以下のようにはできるみたいです。

 
そこまでするかというのはあると思います。
現状のブロックエディタだけの対応でも、十分なのではないかと思います。
(少し試してみただけです)
 
 
すみません、テーマを修正いただいた分の確認は、まだできておりません。
(今、他のことをしているもので)
 
後程確認して、返信させていただきます。

   
わいひら reacted
mk2
(@mk2_mk2)
Illustrious Member Moderator
結合: 4年前
投稿: 8063
 

パターン編集画面は、以下のパターンで確認させていただきました。

 

①「Cocoon設定」-「エディター」で、Gutenbergを選択時

  1. 「外観」-「パターン」
  2. 「管理メニュー」-「パターン一覧」

上記は、2つとも保存しようとすると、エラーになることを確認させていただきました。

【①-1 「外観」-「パターン」】

 
【①-2「管理メニュー」-「パターン一覧」】
 
 

②「Cocoon設定」-「エディター」で、Gutenbergを非選択(クラシックエディタ時)

  1. 「外観」-「パターン」
  2. 「管理メニュー」-「パターン一覧」

上記共に、更新ができてしまいました。

②-2のケースは、想定されたものだと思います

②-1のケースは、実質的にパターン編集画面はGutenbergですので、wp_dieでエラーになっても問題ないのではないかと思います。

ただ、「Cocoon設定」でクラシックエディタを選択しているということは、投稿にはショートコードで埋め込むはず。
そう考えれば、クラシックエディタでは、②-1のパターン編集画面を選択することはないと考えても良さそうに思いますね。

ショートコードでパターンを投稿ページ等に埋め込んだ場合は、公開されるページでは、tocショートコードは機能しないので、問題ないはずですし。

 


既存などでパターンにtocショートコードが既にあり、ブロックエディタ使用で投稿編集画面の「パターン」から貼りつけた場合(※)は、今回の事象が発生はします。

こちらのケースは少ないでしょうし(使っていれば既に不具合が発生しているはず)。
あっても、お問い合わせがあった場合に説明して削除していただく方向という感じですよね。

※は以下のことです。


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

ありがとうございます。そんな方法があるんですね。
mk2さんさんのコードを利用させていただいて、クラシックエディターのメッセージにGitHubファイルを対応させてみました。


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

ご対応いただきありがとうございます。

前回と同じ組み合わせで確認してみました。


①「Cocoon設定」-「エディター」で、Gutenbergを選択時

  1. 「外観」-「パターン」
  2. 「管理メニュー」-「パターン一覧」

いずれの場合も、エラーメッセージが表示されました。

【①-1 「外観」-「パターン」】

 
【①-2「管理メニュー」-「パターン一覧」】
 
 

②「Cocoon設定」-「エディター」で、Gutenbergを非選択(クラシックエディタ時)

  1. 「外観」-「パターン」
  2. 「管理メニュー」-「パターン一覧」

 
【②-1 「外観」-「パターン」】

このケースでは、メッセージは特に表示されません。
(但し、投稿に貼り付ける時のことを考えると、ショートコードを使わざるを得ないはずで、こちらを使用することは考えにくいかと。)

 
【②-2「管理メニュー」-「パターン一覧」】
 
こちらのケースで、新たにメッセージが表示されるようになりました。
 
 
 
そして、すみません。
上記4ケースとも、パターンは保存されてしまいますね。
(きちんと確認ができていませんでした、申し訳ないです)
 
ただ、メッセージが表示されますので、この対応で十分だと思います。
(注意喚起、抑止はできると思ってます)
 

 
パターンを、投稿等への貼りつける場合
  1. パターンをショートコードで貼りつける
  2. ブロックエディタでパターンを左側のインサーターから貼りつける

上記の項番1のケースでは、tocショートコードが無効になり。
項番2のケースでは、今回と同様の事象が発生する。

こちらも、確認させていただきました。
(想定通り)

パターン編集画面でメッセージが表示されますので、これで問題ないと思っています。
(今後お問い合わせがあった時のために、組み合わせを再確認してみたという感じです)


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

ご確認いただきありがとうございます。

投稿者:: @mk2_mk2

【②-1 「外観」-「パターン」】

このケースでは、メッセージは特に表示されません。
(但し、投稿に貼り付ける時のことを考えると、ショートコードを使わざるを得ないはずで、こちらを使用することは考えにくいかと。)

僕もそう思うので、そのままにしようかと。無限ループ自体は対応されているので。

投稿者:: @mk2_mk2

そして、すみません。
上記4ケースとも、パターンは保存されてしまいますね。
(きちんと確認ができていませんでした、申し訳ないです)
 
ただ、メッセージが表示されますので、この対応で十分だと思います。
(注意喚起、抑止はできると思ってます)

そうなんです。ただ、おっしゃる通りでそれで良いのかなと。
エラーと出て保存されるのは、ともその時は思いましたが、保存されずに何かの手違いで大きく書き込んだ文章をなくすよりは、良いなと。
結局メッセージが出て内容を伝えられれば良いので。

この投稿は4か月前ずつわいひらに変更されました

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

投稿者:: @yhira

結局メッセージが出て内容を伝えられれば良いので。

そう思います。
現状仕様で、十分だと思います。

 

ちょっとパターンは、動きが投稿ページ等とは、動きが違う感じですね。

 

①「外観」-「パターン」から作成した場合。

まずは新規作成のために、追加します。

 
すると、パターン編集画面が開きますが、この段階でもうIDが採番されているんですよね。
(投稿等では、post-new.php時点では、まだ採番されず、データベースへの保存もされないはず。)
 
そして、何もせずに、パターンの一覧画面に戻っても、中身のないままパターンが作成されてしまっています。
 
 
②「管理メニュー」-「パターン一覧」から作成した場合
 
新規作成します。
 
「post-new.php」で開いていますので、まだ作成されていないはず・・・と思うのですけれど。
 
何もせずに、編集画面を抜けます。
 
「パターン一覧」に戻ると、作成されてしまっているんですよね。
 
投稿ページだと、この操作では作成されないと思うのですけれど。
パターンは、ちょっと違う何かがあるのかも・・・。
 
 
そんな感じで、今のところこれ以上深追いせずにおこうという感じです。
(深みにはまりそう・・・)

そんな感じで、最初にも書かせていただいた通り、現状仕様で良いのかなと思います。
(注意喚起は十分にできていると思います)

   
共有:

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

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

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

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

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

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

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

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