WordPress Tips (original) (raw)
WordPress の投稿で保存で投稿内に特定の文字列が含まれているとWAFでブロック
PHPHighRiskMethodsVariables_BODY
AWS#AWSManagedRulesPHPRuleSet PHPHighRiskMethodsVariables_BODY → COUNT
Optionの数を確認する
プラグインをたくさんインストールしすぎないでーってよく言われると思いますが、プラグインをたくさんインストールすることによるパフォーマンス低下の原因は、おもにOptionの肥大化によるものです。
WordPressは wp_options というテーブルに保存されているデータのほぼすべてを毎回読み込みますので、これが肥大化すればするほど多くのメモリを必要とします。
残念なことにプラグインをアンインストールしても、この問題は解消しませんので、本番環境でプラグインの動作試験をすることは避けましょう。
Optionの数をチェックするには wp option list --format=count というコマンドで見ることができます。$ wp option list --format=count 565
これは僕の個人ブログでの実行結果の例です。
単純にこの数字だけでなく wp db size --table の結果とあわせてチェックしてみるといいです。
極端に多い場合、たとえば数万とかになると要注意です。
- WPML Media Translation → WPMLの基本機能 post_type = attachment を翻訳
- WPML Media Translation プラグイン → 画像自体を言語別に設定。↑とは別 https://wpml.org/documentation/getting-started-guide/media-translation/
設定
Symptoms:
The settings for media translation in WPML are confusing.https://wpml.org/forums/topic/wpml-media-translation-8/ 2024
参考 WPML Media Translation Addon 2.7.4 | Paradise Plugins
WPML > Settings > WPML Media Translation
(existing media and contents):
- Set language information for existing media
- Translate existing media in all languages
- Duplicate existing media for translated content
- Duplicate the featured images for translated content
↑既存の画像、コンテンツに対する操作
How to handle media for new content:
- When uploading media to the Media library, make it available in all languages
- Duplicate media attachments for translations
- Duplicate featured images for translations
↑新規に登録される画像、コンテンツに対する設定
How to handle media library texts:
- Translate media library texts with posts
Set language information for existing media
sets the language to existing media. This is something you should do if you want to use WPML Media Translation.
既存メディアに言語情報を設定する
既存の wp_posts の post_type = attachment のものを
wp_icl_translations に element_type = post_attachment として追加
該当 wp_posts の wp_postmeta に meta_key = wpml_media_processed, meta_value = 1
→ 管理画面、デフォルト言語の Media Library に既存メディアが表示される(この操作をするまでは空)
Translate existing media in all languages
duplicates existing media into all languages.
全ての言語の既存メディアを翻訳する
wp_icl_translations に element_type = post_attachment で翻訳言語のものがない場合に追加
wp_posts の post_type = attachment がコピーされる (wp_postmetaも)
→ 管理画面、翻訳言語の Media Library に既存メディアが表示される
Duplicate existing media for translated content
goes through all existing content. If there is a translation and the content has media, it will update the translated content with the corresponding translated media.
翻訳コンテンツ用に既存メディアをコピーする
Duplicate the featured images for translated content
goes through all existing content. If there is a translation and the content has featured images, it will update the translated content with the corresponding featured images.
翻訳コンテンツ用に掲載画像をコピーする
When uploading media to the Media library, make it available in all languages
duplicates newly uploaded media so that it is available in all languages.
メディアをメディアライブラリにアップロードする時、全ての言語に利用可能にする
Duplicate media attachments for translations
duplicates newly uploaded media so that it can be translated.
メディア添付資料を翻訳にコピーする
Duplicate featured images for translations
duplicates newly uploaded featured image so that it can be translated
翻訳用に掲載画像をコピーする
tps_options
theia-post-slider プラグイン
mysql> select * from wp_postmeta WHERE meta_key='tps_options' LIMIT 1; +---------+---------+-------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+ | meta_id | post_id | meta_key | meta_value | +---------+---------+-------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+ | 363684 | 53419 | tps_options | a:4:{s:7:"enabled";s:6:"global";s:21:"nav_vertical_position";s:6:"global";s:23:"nav_hide_on_first_slide";b:0;s:23:"slide_loading_mechanism";s:6:"global";} | +---------+---------+-------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.01 sec)
wp_posts の post_type=attachment がコピーされる
wp_postmeta も
wpml_media_processed = 1
WPMLプラグイン使用中
初回のMedia Translation > Set language information for existing media を正常終了させる。
- 正常終了するとチェックボックスが選択できなくなる
- 終了前に画面遷移すると、再実行できてしまう
- 再実行すると重複ができる?
重複は後のエントリが有効のようだ → 削除
-- Step 1: Get post_id values to delete CREATE TEMPORARY TABLE tmp_post_ids SELECT DISTINCT p1.ID FROM wp_posts p1, wp_posts p2 WHERE p1.guid = p2.guid AND p1.post_name = p2.post_name AND p1.ID < p2.ID AND p1.post_type = 'attachment' AND p2.post_type = 'attachment';
-- Step 2: Delete from wp_icl_translations DELETE FROM wp_icl_translations WHERE element_type='post_attachment' AND element_id IN (SELECT ID FROM tmp_post_ids);
-- Step 3: Delete from wp_posts DELETE FROM wp_posts WHERE ID IN (SELECT ID FROM tmp_post_ids);
-- Step 4: Delete from wp_postmeta DELETE FROM wp_postmeta WHERE post_id IN (SELECT ID FROM tmp_post_ids);
WordPress plugin アンインストール データ削除 - WordPress Tips 2024
ただし、プラグインやテーマによっては、削除後も不要なテーブルが残る可能性があることに注意してください(これこそがまさにデータベースの最適化を行う理由)。どのプラグインやテーマが一時的なデータを残すのかを把握しておくと、後々役に立ちます。
https://kinsta.com/jp/blog/wordpress-database-optimization/
WP-Optimize
WP-Optimize > Tables
[not installed] のテーブルは Remove できる
例)
wp_mpd_log
Known plugins that use this table name:
multisite-post-duplicator [not installed]
https://tablasdbwp.com/wp_mpd_log/
mysql prefix
InfiniteWP iwp_
mysql -u wp_user -p -B -e "SELECT CONCAT('DROP TABLE ', TABLE_SCHEMA, '.', TABLE_NAME, ';') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'iwp_%' AND TABLE_SCHEMA = 'wp_database';" CONCAT('DROP TABLE ', TABLE_SCHEMA, '.', TABLE_NAME, ';') DROP TABLE wp_database.iwp_addons; DROP TABLE wp_database.iwp_allowed_login_ips; DROP TABLE wp_database.iwp_favourite_groups; DROP TABLE wp_database.iwp_favourites; DROP TABLE wp_database.iwp_favourites_groups_map; DROP TABLE wp_database.iwp_groups; DROP TABLE wp_database.iwp_groups_sites; DROP TABLE wp_database.iwp_hide_list; DROP TABLE wp_database.iwp_history; DROP TABLE wp_database.iwp_history_additional_data; DROP TABLE wp_database.iwp_history_raw_details; DROP TABLE wp_database.iwp_login_logs; DROP TABLE wp_database.iwp_multisites; DROP TABLE wp_database.iwp_options; DROP TABLE wp_database.iwp_popup_notification; DROP TABLE wp_database.iwp_settings; DROP TABLE wp_database.iwp_site_stats; DROP TABLE wp_database.iwp_sites; DROP TABLE wp_database.iwp_temp_storage; DROP TABLE wp_database.iwp_update_stats; DROP TABLE wp_database.iwp_user_access; DROP TABLE wp_database.iwp_users;
All of the database tables created by InfiniteWP admin panel · GitHub