WordPressについての軽作業一覧

WordPressについての作業メモ。
随時更新します。

# プラグイン
## WP Applaud
- 「拍手」プラグイン

## Stop Generating Unnecessary Thumbnails
- ほかのプラグインやテーマの意向を無視して上書きしてサムネイル表示を抑制します。
- 例えば、WooCommerceでページやサムネイルが自動的に解像度を落としてしまうのを抑制します。

## Disable Responsive Images Complete
- ほかのプラグインやテーマの意向を無視して上書きしてsrcsetを無効化して、強制的にレスポンシブ対応を辞めさせます。

## Show Current Template
- 現在使っているテンプレートの具体的なphpファイルを確認できます

## BackWPup
- バックアッププラグイン

## All in one WP migration
- 移行プラグイン

## Query Monitor 
- データベースの処理時間などを確認できます。

## WP phpMyAdmin
- phpmyadminを導入できるプラグイン

## NinjaScanner – Virus & Malware scan
- ファイルが改ざんされていないかチェックします。無料だと、自動でスキャンができません。

## NinjaFirewall (WP Edition)
- 不正なアクセスをブロックできるプラグインです。WordPressのサイトが動く前に、受信した内容を精査してくれるWAFのようなもの
    - 厳格すぎる設定(POSTやGET制限）に注意
    - WordFenceよりも無料でできることが多い、有料にしろとの主張が少ない

## Website File Changes Monitor
- ファイルの変更・追加・削除を毎日教えてくれます。
    - 改ざん等をチェックするときに使えます

## Health Check & Troubleshooting
- WordPress本体のファイルのハッシュ値をチェック

## Q2W3 Fixed Widget for WordPress
- ウィジェットの固定
- https://soundorbis.com/q2w3-fixed/#i-4

## DeMomentSomTres Export
記事やメディア(一覧)をちゃんとxmlとしてエキスポート
# Tips
## 記事IDから記事名にリダイレクトする
パーマリンク設定を変えると、元々の設定のURLではページが開けなくなりパーマネントで無くなってしまう。
以下の内容は、`/%post_id%/` から `/%postname%/`へのリダイレクトの方法。

https://wordpress.stackexchange.com/questions/373442/how-do-i-make-301-redirection-from-post-id-to-postname)

## カテゴリページの1ページ目でリダイレクトループする
URLが「~page/1」になるとき、URLから「page/1」を取り除けばよい。

```apache
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^category/(.*)/page/1   /category/$1 [R=301,L]
</IfModule>
```


## PHPを特定ディレクトリで開かせない
例えば、
wp-contents/uploads/
に以下のようなファイルを置くと、それ以下のフォルダのPHPを外部から実行させられなくできます。

```config:.htaccess
<Files *.php>
deny from all
</Files>
```

##サムネイル画像ではなくもともとの画像を表示する（生成しなくなるわけではない)
- サムネイルのファイル名の接尾辞をhtml出力時に抹消する
- the_content() から画像のサイズをURLから取り除く
    - 例: wp-contents/2020/01/test-320x480.jpg -> wp-contents/2020/01/test.jpg
    
```
function replace_content($content) {
    $content = preg_replace('/-([^-]*(\d+)x(\d+)\.((?:png|jpeg|jpg|gif|bmp)))"/', '.${4}"', $content);
    return $content;
}
add_filter('the_content','replace_content');
```
### 引用元:
- https://stackoverflow.com/questions/47222583/remove-width-and-height-from-filename-in-wordpress-content

### 関連:
-  https://stackoverflow.com/questions/26222911/remove-image-width-and-height-from-wordpress-image-url?rq=1

## WordPressのユーザー追加
WordPressにログインできなくなった時、mu-pluginsフォルダに入れるスクリプトで管理者アカウントを追加します。

- https://wpscholar.com/blog/add-wordpress-admin-user-via-php/
    - https://gist.github.com/wpscholar/86c236469f3610400f8a#file-create-admin-user-php

## 手っ取り早くDBを操作
https://www.adminer.org/ は1ファイルのDBマネージャー。


## テーマをデフォルトにリセットする
```
UPDATE wp_options SET option_value = 'twentynineteen' WHERE option_name = 'template' or option_name = 'stylesheet';
```
### 引用元: 
https://catswhocode.com/clean-up-wordpress-database/#switch-wordpress-themes-using-sql

## カスタム投稿タイプのリンク変更する
funcitions.phpで当該のカスタム投稿タイプのregister_post_typeについて、
fooからbarに変えたいとき(example.com/foo -> example.com/bar)、

```
register_post_type('foo', array(
・・・
'rewrite' => true,
・・・
```

から

```
register_post_type('foo', array(
・・・
'rewrite' => array('slug' => 'bar'),
・・・
```

へとrewriteすれば良い。

### 参考
https://tcd-manual.net/?p=2899

## MySQL(MariaDB）の/var/lib/mysql/ホスト名.logが肥大化してディスクが埋まる
```
mysql -u root -p 
SELECT @@GLOBAL.general_log;
+----------------------+
| @@GLOBAL.general_log |
+----------------------+
|                    1 |
+----------------------+
1 row in set (0.00 sec)
```
このログファイルにがぎっては消しても特に問題がない。

```
rm /var/lib/mysql/ホスト名.log
```

```
cd /etc/my.cnf.d 
vi server.cnf
general_logを0に。
```


## WordPressに管理者権限つきアカウントでログインしても、wp-adminが一切見れない
- 接頭辞usermeta内の接頭辞user_level、接頭辞capabilitiesの接頭辞が正しいかチェック。
- 接頭辞optionsの接頭辞user_rolesの接頭辞が正しいかチェック。

### 参考
https://myosotis.work/2017/06/03/wp/

## メディアライブラリに何も表示されない、メディアが適切なアップロードされるのにグリッド表示やリスト表示できない、記事作成がおかしい
WordPressの移行時にデータベースのwp_postmetaが適切にエクスポート＆インポートできてないか、値に_wp_という接頭辞があるが、その接頭辞がテーブルと食い違っている。
または、wp_postmetaとかwp_usermetaの構造がぶっ壊れている


### エラー表示1

```
: [Duplicate entry '0' for key 'PRIMARY'] INSERT INTO `wp_usermeta` (`user_id`, `meta_key`, `meta_value`) VALUES (1, 'wp_media_library_mode', 'grid')
```


```
: [Duplicate entry '0' for key 'PRIMARY'] INSERT INTO `wp_postmeta` (`post_id`, `meta_key`, `meta_value`) VALUES (なんちゃら, '_edit_lock', 'なんちゃら:1')
```

など...

#### 解決法
該当するテーブルをsqlのテキストファイルでエクスポート=>該当するテーブルをデータベースから削除ｰ>該当するテーブルをデフォルト(https://gist.github.com/rnagle/8844808ec324ac1eefca) のcreate文で作成＝＞sqlのテキストファイルのinsert文だけを別の.sqlファイルにコピペして、インポート

### エラー表示2

```
Notice: Trying to access array offset on value of type null in なになに/wp-includes/class-wp-list-util.php on line 161
```

```
media library Notice: Trying to get property 'ID' of non-object in wp-includes/post.php on line 6774
```


```
Notice: Trying to get property 'post_status' of non-object in  なになに/class-wp-media-list-table.php on line 655
```

####解決法(わからない）
wp_postsのテーブルにIDとかstatusにおかしな値を持つ記事が紛れ込んでいるんだろうけど... 
おかしな記事の探し方が謎です

## カスタムタクソノミーが何故か表示されない
Custom Post Type UIプラグインがない環境で、カスタムタクソノミーが使えなかったときの対処法を考えました。
「Custom Post Type UI」をインストールします。
登録されたタクソノミーは見当たらないはずです。
そこで、データベースのテーブル「term_taxonomy」にあるタクソノミー名のタクソノミーを、追加してしまいます。
そうすると管理ページの左のバーのメニューに表示されるようになります。

## All in one seo packのアップデート後の不具合

```
Fatal error: Uncaught RuntimeException: Error saving action: Error saving action: Table 'データベース名.接頭辞actionscheduler_actions' doesn't exist in ほにゃらら　wp-content/plugins/all-in-one-seo-pack/　ほにゃらら
```
### 対処法
```
CREATE TABLE データベース名.接頭辞actionscheduler_actions (
					action_id bigint(20) unsigned NOT NULL auto_increment,
					hook varchar(191) NOT NULL,
					status varchar(20) NOT NULL,
					scheduled_date_gmt datetime NOT NULL default '0000-00-00 00:00:00',
					scheduled_date_local datetime NOT NULL default '0000-00-00 00:00:00',
					args varchar(191),
					schedule longtext,
					group_id bigint(20) unsigned NOT NULL default '0',
					attempts int(11) NOT NULL default '0',
					last_attempt_gmt datetime NOT NULL default '0000-00-00 00:00:00',
					last_attempt_local datetime NOT NULL default '0000-00-00 00:00:00',
					claim_id bigint(20) unsigned NOT NULL default '0',
					extended_args varchar(8000) DEFAULT NULL,
					PRIMARY KEY  (action_id),
					KEY hook (hook(191)),
					KEY status (status),
					KEY scheduled_date_gmt (scheduled_date_gmt),
					KEY args (args(191)),
					KEY group_id (group_id),
					KEY last_attempt_gmt (last_attempt_gmt),
					KEY claim_id (claim_id)
					);
```

### 参考
- https://rankmath.com/kb/fatal-error-after-1-0-49-update/
- https://github.com/rankmath/_repair-action-scheduler
- https://github.com/rankmath/_repair-action-scheduler/blob/master/repair-action-scheduler.php

## Addquicktagがビジュアルエディタから消えた
jqueryを旧バージョンに戻せばよいです。
enable-jquery-migrate-helperを入れると、バージョンを戻すことができます。
- https://wordpress.org/plugins/enable-jquery-migrate-helper/

を入れて、古いjqueryを使う設定をしてjqueryを差し戻せばよいです。
### 参考
- https://github.com/bueltge/addquicktag/issues/48
- https://wordpress.org/support/topic/classic-editor-not-working-properly-after-update-to-wp-5-6/



## WordPressで記事内容が何故か2回表示される不具合の回避
the_content(); で記事内容を出力した際に、何故か二度同じ内容が表示される不具合がありました。その原因は定かでありませんが、回避する方法はわかりました。

### 対処法

```php
the_content(); 
```
を

```php
echo do_shortcode( get_the_content() );
```

に書き換えたら、回避できました。

### 参考
https://www.google.com/search?q=get_the_content&oq=get_the_content&aqs=chrome..69i57j0l7.298j0j4&sourceid=chrome&ie=UTF-8

## cssや画像が404 not foundに
wp-contentやuploadsの.htaccessのパーミッションをチェック。

## WordPressで「このページにアクセスする権限がありません。 」が出たときの修正
ドメイン/wp-admin/options-general.php?page=codepress-admin-columns&tab=columns
を開いたときに、

「このページにアクセスする権限がありません。」と言われたときの対処法です。
User Roles Editorを使うと起きるようです。

### 解決法
使用中のテーマのfunctions.phpに以下のコードを月して、権限を追加します。

```php
function add_cap_admin_columns() {
global $wp_roles;
$wp_roles->add_cap( "administrator", "manage_admin_columns" );
}
add_action( "admin_init", "add_cap_admin_columns");
```

権限を消したい場合は、上のコードを消して、以下のように追記します。

```php
function remove_cap_admin_columns() {
global $wp_roles;
$wp_roles->remove_cap( "administrator", "manage_admin_columns" );
}
add_action( "admin_init", "remove_cap_admin_columns");
```

一度実行されれば、記述を消して構わないはずではあります。

### 参考
https://wordpress.org/support/topic/error-sorry-you-are-not-allowed-to-access-this-page-15/