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 の結果とあわせてチェックしてみるといいです。
極端に多い場合、たとえば数万とかになると要注意です。

WP-CLIをつかったWordPressの健康診断方法まとめ - タロスカイ株式会社タロスカイ公式ブログ 2017

設定

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):

↑既存の画像、コンテンツに対する操作

How to handle media for new content:

↑新規に登録される画像、コンテンツに対する設定

How to handle media library texts:

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.

翻訳コンテンツ用に既存メディアをコピーする

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.

メディア添付資料を翻訳にコピーする

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

Remove InfinteWP options left after the client plugin is removed from WordPress using WP-CLI · GitHub