タグ:WordPress
WordPressでファイルのアップロードに失敗する
下記のエラーが出て、ファイルのアップロードに失敗した原因がしょうもなかったので、記録しておく。
サーバーの負荷が高いか十分なリソースがないため画像の後処理に失敗しました。もっと小さな画像をアップロードしてみてください。推奨する最大サイズは2500ピクセルです。
サーバーから予期しないレスポンスがありました。ファイルは正しくアップロードされているかもしれません。メディアライブラリもしくはページをリロードして確認してください。
これが特に何もしてないのに、なぜか上のエラーだったり下のエラーに代わったりで、わけわからなかった。
エラーメッセージでググってみるとブラウザを変えたり、Wordpressにログインし直したりしたら直るという記事をよく見たのですが、それではいっこうに治らない。
WordPressをインストールしてプレーンな状態で試してみたら、さすがにうまくいったので、ApacheやPHPの設定のせいではなさそう。
で、いろいろと試しまくった結果、原因がこういうことであることが分かった。
今回のWordpressでは「wp-content」フォルダを「contents」というフォルダ名に変えていたのですが、こうすると、wp-config.phpで下記の設定を行わないといけない。
define('WP_CONTENT_DIR', ABSPATH . 'contents');
define('WP_CONTENT_URL', '(WPのURL)/contents');
結論を言うと、この(WPのURL)がhttpsではなくhttpで設定されていた。(「WordPress アドレス (URL)」の設定は、httpsで設定されていたのに、「contents」フォルダへのフルパス設定がhttpだった)
さらに、これだけなら実は問題にならないのだが、ベーシック認証をサイト全体にかけていた。
管理画面に入る際に、httpsの方はベーシック認証は解除されるわけだが、httpの方は解除されていないため、アップロード時のプログラムが、httpの方でつなぎに行って弾かれてしまい、エラーになったものと思われる。
原因特定まで時間かかった・・・が、やはり1からやり直してみるというのは有効だ。
総合管理者 | 2022年12月15日 | コメント(0) | トラックバック(0) | CMS関連 | WEB関連全般
Contact form 7が日本語にならない!
Contact form 7をインストールする際は、言語ファイルを忘れずに入れる必要があります。
言語ファイルのダウンロードはこちら
このページにある「Japanese」のzipファイルをダウンロードして解凍、pluginsフォルダにアップロードした「contact-form-7」フォルダの中にある「languages」フォルダに、解凍した「contact-form-7-ja.mo」「contact-form-7-ja.po」ファイルを入れます。
これで、プラグインを有効化すれば、Contact from 7が日本語モードで使えるはず・・・・なんですが、メニューも中身も英語のまま。
いろいろ調べてみたのですが、サイトの言語は日本語だし、言語ファイルも入ってるし、プログラムを無理やり書き換えれば日本語になりますが、あんまりやりたくはない・・・
で、このサイトを見つけました。
WordPressの更新マークがなぜか消えないときは「翻訳」を最新にすれば解決 | おもキャン
なるほど、確かに更新のところに行くと、「新しい翻訳が利用可能です」となっている。
この更新ボタンを押して更新したところ、無事Contact from 7が日本語モードになりました。
これまでこうした現象になったことが無かったので、手間取った~
総合管理者 | 2022年06月07日 | コメント(0) | トラックバック(0) | CMS関連
WPプラグイン「Category Order and Taxonomy Terms Order」をマルチサイトで使用する場合の注意事項
WPデフォルトのカテゴリーやカスタムタクソノミーの並び替えを行うことができるプラグイン「Category Order and Taxonomy Terms Order」
マルチサイトでは使用するのに注意が必要です。
このプラグインを「サイトネットワークで有効化」で有効化してしまうと、
並び替えができないどころか、カテゴリー自体が表示されなくなります
理由までは調査していないですが、外観>メニューで保存すらできなくなってしまうので注意です。
対応方法は、「サイトネットワークで有効化」ではなく、サイトごとにプラグインを有効化すればOK
カテゴリーも表示されるようになりますし、メニューの動作も正常になりますし、並び替えもできるようになります。
総合管理者 | 2020年08月05日 | コメント(0) | トラックバック(0) | CMS関連
WordPressで入れておきたいプラグイン2
2020年8月5日更新
最近カスタムポストを使用するようになり、いろいろと変化したのでメモ。
- Classic Editor
Gutenbergは使いづらい!という場合は、こちら。
元々のTinyMCEに戻せるプラグインです。 - Custom Post Type UI
カスタムポスト・カスタムタクソノミーを簡単に追加・設定できるプラグイン。 PS Taxonomy Expander
カテゴリーだけでなく、カスタムタクソノミーの並び替えも行えるプラグイン。
並び替えだけでなく、カスタムポストの一覧画面でカスタムタクソノミーを表示する設定ができたりと非常に便利!- Category Order and Taxonomy Terms Order
カテゴリーだけでなく、カスタムタクソノミーの並び替えも行えるプラグイン。
「PS Taxonomy Expander」が長らく更新されておらず、インストールするとクイック編集ができなくなるバグがあるので、こちらに乗り換え。 - Advanced Custom Fields
カスタムフィールドを簡単に追加・設定できるプラグイン。
基本はフリーですがループなどが必要な場合は、有料版(ACF Pro)を使用する必要があります。
有料版は、以前は買い切りだったのですが、現在はサブスクになってしまいました。
1サイト/年で49$程度ですので、この費用が出せるか、フリー版で十分な場合は、こちらの導入をお勧めいたします。
というもの、「Advanced Custom Fields」はプレビューに対応しているんです。下の「Custom Field Suite」もとても優れたブラグインなのですが、プレビューに対応していないのがネックですね。 - Custom Field Suite
カスタムフィールドを簡単に追加・設定できるプラグイン。
フリーでループにも対応。
プレビューには非対応。 - TinyMCE Advanced
WordpressのリッチテキストエディタをTinyMCEにできるプラグイン。
正確にはWordpressはもともとTinyMCEですが、さらにカスタマイズできるものです。 - Contact Form 7
メールフォームを簡単に設置できるプラグイン。
インストールと同時に、日本語化も行ってください。
日本語化ファイルはこちら - Google XML Sitemaps
Google サイトマップ用プラグイン。
公開してから有効にしよう。 - Limit Login Attempts
ログインのチャレンジ?回数を設定できるプラグイン。 - Yoast Duplicate Post
記事の複製を簡単に行うことができるプラグイン。 - EWWW Image Optimizer
画像圧縮プラグイン。
通常のレンタルサーバーなら大丈夫だと思いますが、AWS等の場合、いろいろとモジュールが足りない可能性がるので注意。 - Custom Post Type Permalinks
(必要なら)カスタムポストのパーマリンクを設定できるプラグイン。 - Search Regex
(必要なら)サイト内検索&置換を行えるプラグイン。 - WP Fastest Cache
キャッシュプラグイン。
使いやすくて、ソースコードの圧縮もしてくれるなどなかなか便利。 DB Cache Reloaded Fix
データベースのやり取りをキャッシュしてくれるプラグイン。
管理画面まで軽くなるという便利なプラグインですが、動的なプラグインとは相性が悪かったりするので注意が必要です。- spam-byebye
スパム対策用プラグイン。
全然更新されていないで、引き続き使用するか要検討。
nandani | 2020年08月05日 | コメント(0) | トラックバック(0) | CMS関連
スラッグ名の重複対策 改
そもそもの原因についてはこちら
【WordPress】スラッグ名が重複すると、公開中の投稿ページが404になる
上記の対策方法を、こちらの記事「スラッグ名の重複対策」で書かせてもらいましたが、よくよく考えてみたら、こんなに複雑に考える必要はありませんでした。
つまり、下書きだろうが、スラッグ名を確定させてしまえばよい!(というか、なぜそうなってないのか)
プログラム修正版はこちらです。
function change_post_name($post_id){ if(!wp_is_post_revision($post_id)){ $get_post = get_post($post_id); if(!empty($get_post->post_name)){ remove_action('save_post', 'change_post_name', 13, 2 ); if($get_post->post_status == "draft" || $get_post->post_status == "pending"){ $post_name = wp_unique_post_slug($get_post->post_name, $post_id, "publish", $get_post->post_type, $get_post->post_parent); wp_update_post( array( 'ID' => $post_id, 'post_name' => $post_name) ); } add_action('save_post', 'change_post_name', 13, 2 ); } } } add_action('save_post', 'change_post_name', 13, 2 );
7行目のwp_unique_post_slugは、wp_insert_post関数内で使用されてる、ユニークなスラッグ名を付けてくれる関数です。
この関数の第3引数が、下書きの場合は、ユニークにしてくれません(第1引数のスラッグ名をそのまま返します)
ということであれば、第3引数だけ「publish」にして、ユニークなスラッグ名を取得し、保存し直せばよい!
ということで、作ってみたのですが、とりあえず大丈夫っぽい。
※このプログラムについて責任はとれませんので、自己責任でお願いします。
参考サイト
総合管理者 | 2018年04月14日 | コメント(0) | トラックバック(1) | CMS関連
タイトル・内容のフック場所【WordPress】
タイトル・内容のフック場所は、フロントエンド、管理画面で異なるので注意が必要です。
フロントエンドの場合
//タイトルにフックをかける(the_titleをフック) add_filter('the_title', hoge_the_title, 1); //内容にフックをかける(the_contentをフック) add_filter('the_content', hoge_the_content, 1);
バックエンドの場合
//投稿一覧のタイトル表示にフックをかける(the_postをフックし、内部で処理) add_filter('the_post', hoge_the_post, 100); function hoge_the_post($post){ //$post->post_titleを編集する 例:$post->post_title = htmlspecialchars($post->post_title); return $post; } //編集画面のタイトル入力フィールドにフックをかける(title_edit_pre'をフック) add_filter('title_edit_pre', hoge_the_title, 1); //編集画面の内容フィールドにフックをかける(the_editor_contentをフック) add_filter('the_editor_content', hoge_the_content, 1);
単純に、the_titleやthe_contentにフックするだけでは、管理画面の方で反映してくれないので注意。
特に投稿一覧では、表示だけならthe_titleのフックで行けますが、クイック編集の方にも反映させる場合は、the_postにフックし、$post->post_titleに処理を加える必要があります。
総合管理者 | 2018年01月08日 | コメント(0) | トラックバック(0) | CMS関連
固定ページにも抜粋をつける
固定ページでも、子ページを一覧で表示するなどの使い方をする場合があります。
その際に任意に設定できる抜粋がないと非常に困る(WPデフォルトでは無い)
固定ページでも抜粋を付ける場合は、使用しているテーマのfunction.phpにこれを追記します
add_post_type_support( 'page', 'excerpt' );
これで固定ページの編集画面にも抜粋が表示されるようになります
総合管理者 | 2017年12月14日 | コメント(0) | トラックバック(0) | CMS関連
wp_insert_attachmentだけではサムネイルが作られない
フォームから送られてきたファイルをメディアに登録されるようにするプログラムを作っていたのですが、実際にメディアには登録されるけど一覧でサムネイルが表示されない・・・
で、Codexをよく見たら、wp_insert_attachmentのあとに下記2つの関数も実行しなくてはならないとのこと
wp_generate_attachment_metadata
wp_update_attachment_metadata
さらにこの関数を実行するには、
require_once( ABSPATH . 'wp-admin/includes/image.php' );
の必要があります。
つまりこんな感じ。
require_once( ABSPATH . 'wp-admin/includes/image.php' ); $attachment = array( 'guid' => "(ファイルのURL)", 'post_mime_type' => "(ファイルのタイプ)", 'post_title' => "(ファイルのタイトル)", 'post_content' => '', 'post_status' => 'inherit' ); $attach_id = wp_insert_attachment( $attachment, "(ファイル名)", 0); $attach_data = wp_generate_attachment_metadata( $attach_id, "(ファイルのパス)"); wp_update_attachment_metadata( $attach_id, $attach_data );
これで、メディアに登録される際にサムネイルも生成されるようになりました。
総合管理者 | 2017年12月13日 | コメント(0) | トラックバック(0) | CMS関連
予約公開ができない場合【WordPress】
WordPressで予約公開ができない場合、原因は色々とあります。
このことは色んなサイトで紹介されています。
でも、たまに公開に失敗するなど原因がよくわからない不具合も起こります。
WordPressの予約投稿は、
一定のアクセスがないと実行されないという仕様になっています。アクセスがないブログは予約投稿ができないといっても過言ではありません。
という話まであり、正直Wordpressの予約公開はあまり信用できません。
ということで、解決方法として、こんな感じのプログラムをheader.phpの先頭に入れてみました。
if(is_home() || is_front_page()){ //予約の投稿のみ取得(MAX20件) $get_posts = get_posts(array( "posts_per_page" => 20, "post_type" => "any", "post_status" => "future" )); if($get_posts){ foreach($get_posts as $get_post){ //現在が予約日時を過ぎている場合 if($get_post->post_date < current_time("Y-m-d H:i:s")){ //公開処理 $save_post = array( "ID" => $get_post->ID, "post_status" => "publish" ); wp_update_post($save_post); } } } }
※トップページアクセスの場合のみ反応するようにしています。
post_statusがfutureになっている記事だけ取得し、予約日時が過ぎているものだけ、publishに更新するという簡単なプログラム
ちゃんと動いているし、負荷もそれほどかからないし問題なさそう。(※動作に責任は持ちません)
総合管理者 | 2017年06月05日 | コメント(0) | トラックバック(0) | CMS関連
WordPressのマルチサイトで参加サイトが表示されない
マルチサイト化されているWordpressのサーバーを移転したところ、参加サイトが表示されなくなってしまいました。
↓この部分
もちろんログインしたアカウントはすべてのサイトに所属しています。
プラグインのせいかと思って全部切ってみたのですが、治らず。
移転時にバージョンアップしたからかとも思いましたが、他のサイトで使っている同じバージョンのWordpressでは、こんな問題は起きたことがありません。
移転中だったのでベーシック認証をかけていたのですが、まさかこれじゃないだろうと思いながらも試しに解除してみたら、表示されるようになりました!
原因はベーシック認証!
こんなことあるのか・・・
ちなみに、一度表示されるようになったら、以降は再びベーシック認証をかけてもちゃんと表示されます。
総合管理者 | 2017年03月08日 | コメント(0) | トラックバック(0) | CMS関連