Memo

メモ > 技術 > CMS: WordPress > トラブル

■トラブル
■意図しないデータが取れる / 意図したデータが取れない ループが複数あると、そのような挙動になることがある。前のループの終わりで wp_reset_postdata() を呼び出すと解決することがある これを実行すると、上書きされた値をメインクエリのためのデータに戻してくれる WP_Queryで記事を取得したときはwp_reset_postdataとwp_reset_queryのどっちを使うのか | Freiheit channel https://freiheit-channel.com/?p=112 サクッと複数ループのコピペと解説|WordPressの使い方 https://wpno.jp/2017/06/5892/ WordPressの「wp_reset_postdata()」は具体的にどんな時に必要になるのかについて | たくおのーと https://takuo4649design.com/weblog/note/archives/13361 ■意図した日時を取得できない PHP標準関数の date()・time()・strtotime() で日時を取得しても、時差が発生するなど意図した値を取得できないことがある WordPressでは date() の代わりに date_i18n() を、time() の代わりに current_time() を使用するのが無難 以下はコンテンツ時限公開の例 2019-09-01 10:00:00 〜 2019-09-12 00:00:00 の間に「時限公開する内容」と表示される
<?php if (current_time('timestamp') > strtotime('2019-09-01 10:00:00') && current_time('timestamp') < strtotime('2019-09-12 00:00:00')) : ?> <p>時限公開する内容</p> <?php endif ?>
ワードプレスでPHPのdate出力を使うと時間が9時間ずれるのを防ぐ方法 | ワードプレスドクター https://wp-doctor.jp/blog/2020/12/16/%E3%83%AF%E3%83%BC%E3%83%89%E3%83%97%E3%83%AC%E3%82%B9%E3%81%A7... もう ずれない! WordPress で date を扱う正しい方法 | Design Hack and Slash http://designhack.slashlab.net/how-to-resolve-incorrect-time-in-wordpress/ ■リダイレクトループ対策 リダイレクトループが発生した場合、wp-config.php に以下を書けば何とかなることがある
$_SERVER['HTTPS'] = 'on';
もしくは、以下のように書く方がいいか
if (!empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') { $_SERVER['HTTPS'] = 'on'; }
SSL対応後のWordpress管理画面で発生した無限リダイレクトループの修正方法 - Qiita https://qiita.com/hirror/items/bb96e236c3ffc41e890e 「require_once(ABSPATH . 'wp-settings.php');」より後に書くと「このページにアクセスする権限がありません。」と言われ、 管理ページにログインできなくなるので注意 WordPress + HTTPS + リバースプロキシ = このページにアクセスする権限がありません。 - yohgaki's blog https://blog.ohgaki.net/wordpress-https-reverse-proxy-sorry-you-are-not-allowed-to-access-this-page AWSのELB配下でHTTPSリダイレクトさせる場合、以下が参考になる ELB配下のApacheで外部はHTTPSにリダイレクトし、内部のサーバのみHTTPで通信させる - Qiita https://qiita.com/wapa5pow/items/a5c4fc188e5da0ddde1d AWS EC2で常時SSLを実現する際の注意点 - Qiita https://qiita.com/michimani/items/88973c5e2ae76a8e84aa WordPressのSSL対応は、以下の記事も参考になりそう 「FORCE_SSL_ADMIN を使えば簡単にかつ強制的にできる」というだけで、これを使わずにサイトのURLを設定しても大丈夫かも(未検証) 管理画面での SSL 通信 - WordPress Codex 日本語版 http://wpdocs.osdn.jp/%E7%AE%A1%E7%90%86%E7%94%BB%E9%9D%A2%E3%81%A7%E3%81%AE_SSL_%E9%80%9A%E4%BF%A1
define('FORCE_SSL_ADMIN', true);
もしくは
define('FORCE_SSL_ADMIN', true); if ( ! empty( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' ) { $_SERVER['HTTPS']='on'; }
と設定することで対応できるみたい ■ページ送りができない ※アーカイブページで404エラーになる場合 ※未検証 アーカイブテンプレートでquery_postsを使ったらページ送りで嵌った!という話。 - Toro_Unit https://torounit.com/blog/2013/02/14/1470/ [Wordpress]pre_get_postsを使いこなす!pre_get_posts使い方まとめ | EMiAC-Works http://emiac-works.com/coding/pre-get-posts-code-snipet/ Top Level Categories Fixプラグイン | WordPressで企業ウェブサイト作成・商用ホームページ制作 WordPress Go Go http://wpgogo.com/development/top-level-cats-fix.html ■管理画面以外で英語表記になる ※無理矢理な対応なので非推奨 何故か「本番環境でのみ日本語表記にならない」ということがあったので調査 /wp-includes/l10n.php の560行目あたりを以下のようにすると日本語表記になった。でも他への影響が不明 プラグインの設定が悪さをしているみたい?
558: if ( true == $plugin_override ) { 559: // unset( $l10n_unloaded[ $domain ] ); 560: 561: // return true; 562: }
「設置した翻訳ファイルの読み込みを無効にする」という処理のコメントアウトなので、問題ない…はず 何かキャッシュの設定が悪さをしているとか?不明 以下に該当箇所のコード解説がある。参考までに WordPress 英語サイト作成時に翻訳ファイルが読み込めない https://tadtadya.com/wordpress-i-can-not-read-a-translation-file-when-creating-an-english-site/ ■管理画面からテーマファイルを編集できない 管理画面の「外観 → テーマの編集」からテーマを編集できるが、編集時にWordPressのバージョンによっては 「致命的なエラーをチェックするためにサイトと通信できないため、PHP の変更は取り消されました。」 というエラーが表示される。 WordPress4.9からテーマ編集の入力チェックが厳しくなっており、実質この機能は使えないみたい FTP経由で更新することが推奨される 【対処法】WordPress4.9でテーマの編集がエラーでできない時 https://nomadicwood.com/archives/5802 どうしても管理画面から編集したい場合、本体プログラムを調整することで対応できる /wp-admin/includes/file.php の492行目から599行目 以下の部分を丸ごとコメントアウトすると入力チェックを外すことができる
492: if ( $is_active && 'php' === $extension ) { 493: 494: $scrape_key = md5( rand() ); 495: $transient = 'scrape_key_' . $scrape_key; 496: $scrape_nonce = strval( rand() ); 497: set_transient( $transient, $scrape_nonce, 60 ); // It shouldn't take more than 60 seconds to make the two loopback requests. 〜略〜 597: return new WP_Error( 'php_error', $message, $result ); 598: } 599: }
【エラー修正】致命的なエラーをチェックするためにサイトと通信できないため、PHPの変更は取り消されました。 https://take-it-easy.tokyo/miscellaneous-notes/wordpress/correct_fatal_error ■古いjQueryが読み込まれる 古いjQueryが自動で読み込まれてしまい、それが原因でJavaScriptが動かないことがあった HTMLを確認すると、以下のように読み込まれていた
<script type='text/javascript' src='/wp-includes/js/jquery/jquery.js?ver=1.12.4'></script> <script type='text/javascript' src='/wp-includes/js/jquery/jquery-migrate.min.js?ver=1.4.1'></script>
以下を参考に対応 WordPressでjqueryとjquery-migrateの2つの読み込みを解除する方法 | Musible https://musible.net/web/wp-jquery-unload.html 具体的には、functions.php に以下のコードを追加した (問い合わせページで発生した問題だったので、URLに「contact」が含まれる場合のみの対応とした)
function my_scripts_method() { wp_deregister_script('jquery'); } if (preg_match('/^\/contact\//', $_SERVER['REQUEST_URI'])) { add_action( 'wp_enqueue_scripts', 'my_scripts_method' ); }
■サーバ負荷が急激に上がることがある ※未検証 WordPressのCron処理を無効にしてみると改善することがあるらしい WordPressで定期的に処理をさせる!WP-Cronの設定方法 - 東京のホームページ制作 / WEB制作会社 BRISK https://b-risk.jp/blog/2017/09/wp_cron/ WordPress の wp-cron を無効にしたら劇的にパフォーマンスが改善した話 | あぱーブログ https://blog.apar.jp/web/7430/ wp-cron.phpを無効化して高速化される理由 | ハックノート https://hacknote.jp/archives/37075/ ■メンテナンスモードが終了しない WordPressのどの画面にアクセスしても「現在メンテナンス中のため、しばらくの間ご利用いただけません」と表示され続ける場合の対応 以下にあるように .maintenance を削除すればアクセスできるようになるが、更新が本当に完了しているのかは不明のような 「現在メンテナンス中のため、しばらくの間ご利用いただけません」が表示された時の対処法 | てらこや.work https://www.terakoya.work/wordpress-maintenance-howto/

Advertisement