httpの場合、ユーザー管理画面のアプリケーションパスワードが有効にならない
define( 'WP_ENVIRONMENT_TYPE', 'development' );
をwp-config.phpに入れればよいとあるが、有効にならない.
function.phpに以下を入れる
// api使用のためにアプリケーションパスワードを強制表示
add_filter( 'wp_is_application_passwords_available', '__return_true' );
wp-json/wp/v2/media/のAPIは、パーマリンク設定がデフォルトの/?p=123になっていると呼べない?変えると呼び出せた.
データベースからwp関連のテーブルをごっそり消せばいいらしいが、「WPRESET」プラグインでやるのが楽.
プラグインなしで自作する場合、カスタムフィールドにアクセス数カラムを追加して、記事が表示されるごとにそのカラムをカウントアップする.
function set_post_views($post_id) {
$custom_key = 'post_views_count';
$view_count = get_post_meta($post_id, $custom_key, true);
if ($view_count === '') {
delete_post_meta($post_id, $custom_key);
add_post_meta($post_id, $custom_key, '0');
} else {
$view_count++;
update_post_meta($post_id, $custom_key, $view_count);
}
}
<?php
if ((!is_user_logged_in() || !current_user_can('administrator')) && !is_robots()) {
setPostViews(get_the_ID());
}
?>
function.phpに以下を追加
/* 投稿一覧、固定ページ一覧に最終更新日を追加 */
function add_posts_columns_last_modified( $columns ) {
$columns[ 'modified-last' ] = '最終更新日' ;
return $columns ;
}
add_filter( 'manage_posts_columns', 'add_posts_columns_last_modified' ) ;
add_filter( 'manage_pages_columns', 'add_posts_columns_last_modified' ) ;
// 最終更新日を表示
function custom_posts_columns_last_modified( $column_name, $post_id ){
if( 'modified-last' != $column_name ){
return ;
}
$modified_date = the_modified_date( 'Y年Md日 Ag:i' ) ;
echo $modified_date ;
}
add_action( 'manage_posts_custom_column', 'custom_posts_columns_last_modified', 10, 2 ) ;
add_action( 'manage_pages_custom_column', 'custom_posts_columns_last_modified', 10, 2 );
// ソートできるようにする
function sort_columns_last_modified( $columns ){
$columns['modified-last'] = 'modified' ;
return $columns ;
}
add_filter( 'manage_edit-post_sortable_columns', 'sort_columns_last_modified' ) ;
add_filter( 'manage_edit-page_sortable_columns', 'sort_columns_last_modified' ) ;
自サイトをラッコM&Aで売却できたときにやったことのメモ
digコマンド)WP Offload Mediaプラグインで静的コンテンツをCDNしているのでローカルに移した
Remove Files From Server設定をオンにしていなければローカルにコンテンツが残っているのでプラグインの無効化で記事のパスは自動的に戻り、ローカル参照になるmysql cliの起動
mysql -u root -p[password] [DB_NAME]
-pのあとにスペースも何も入れずにパスワードを記入する.
-pでEnterするとパスワードを聞いてきて、そこでパスワードを入れてもaccess deniedとなるクソ仕様…
実行したsql
show tables; //テーブル一覧表示
rename table wp_as3cf_items to bk_20221203_wp_as3cf_items;
create table bk_20221203_wp_options_delete_rec as select * FROM wp_options WHERE option_name = 'tantan_wordpress_s3' OR option_name LIKE 'as3cf_%'; //3 rows
delete FROM wp_options WHERE option_name = 'tantan_wordpress_s3' OR option_name LIKE 'as3cf_%';
create table bk_20221203_wp_postmeta_delete_rec as select * FROM wp_postmeta WHERE meta_key LIKE 'amazonS3_%' OR meta_key LIKE 'as3cf_%' OR meta_key LIKE 'wpos3_%'; //37 rows
delete FROM wp_postmeta WHERE meta_key LIKE 'amazonS3_%' OR meta_key LIKE 'as3cf_%' OR meta_key LIKE 'wpos3_%';
create table bk_20221203_wp_options_2_delete_rec as select * FROM wp_options WHERE option_name LIKE '%transient_as3cf%' OR option_name LIKE '%transient_timeout_as3cf%'; //6 rows
delete FROM wp_options WHERE option_name LIKE '%transient_as3cf%' OR option_name LIKE '%transient_timeout_as3cf%';
※wp_usermetaに条件に一致するレコードなし
1つ目でそのサイトが提供しているファイルをアップロードすれば対応できる、となっているが、さくらのレンタルサーバの環境では対応できないため、個別に行う。
前提として、このウィルスはなにかをトリガーにして、トップディレクトリの.htaccessとindex.phpを書き換える。
厳密にいうとこの2ファイルを削除して再作成する。
なので、ファイル属性を読み取り専用にしてもダメ。読み取り専用でも削除はできるから。
削除されるのを防ぐには、そのファイルが含まれるディレクトリの書き込み属性を剥奪する必要がある。
また、.htaccessを削除してもすぐに再作成されるので、
なので手順としては、 .htaccessの削除、index.phpの削除、ディレクトリの書き込み権限変更の3行のスクリプトを作って実行する。
そして、正しい.htaccess、index2.phpを保存する。
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index2\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index2.php [L]
RewriteCond %{REQUEST_URI} !^/index2.php$
RewriteRule ^$ /index2.php [L]
# END WordPress
<?php define( 'WP_USE_THEMES', true );require __DIR__ . '/wp-blog-header.php';
index2.phpとするのは、index.phpとするとまた書き換えられてしまうため。
このようにすると、https://[ドメイン]/index2.phpでアクセスできるようになり、https://[ドメイン]はindex2.phpにリダイレクトされるから、修正できる。
その後、他の書き換えられたファイルを戻すためにWordFenceプラグインをインストールして、スキャンして、書き換えられたファイルをすべて修復する。
書き換えられたファイルのせいで、プラグインをインストールするための管理者ログイン自体ができない場合は、画面に表示される異常ファイルを確認しながら最低限管理者ページが開くように個別にファイルを戻す(対象バージョンのWordPressインストーラをダウンロードして正規ファイルと比較する)。
最後に、.htaccessファイルが大量に生成されているので、タイムスタンプとサイズを確認して、同じファイルはすべて削除する。
セキュリティ系プラグイン。
メールアドレスを入力してライセンス登録が必要だが、Freeライセンスがある。
ウィルス汚染されてファイルが書き換えられた場合、スキャン・バージョンごとに書き換えられた内容が確認できる機能が超便利。本来ないファイルも検知されて一括削除が可能。テーマやプラグインのファイルもある程度はチェックしている模様。
ウィルス感染したらこれでスキャンして一律修復・削除がよい。