WordPress」カテゴリーアーカイブ

WordPress ウィジットの大文字を小文字にする

外観->テーマエディター->style.css

/* Small headers */
.archive-title,
.page-title,
.widget-title,
.entry-content th,
.comment-content th {
	font-size: 11px;
	font-size: 0.785714286rem;
	line-height: 2.181818182;
	font-weight: bold;
     /*	text-transform: uppercase;*/
	color: #636363;
}

text-transformで大文字指定しているのでコメントアウトすると小文字の英字が使えるようになります。
1行だけコメントアウトするのは気になるという神経質な方はパラメータにnoneを指定すると上記コメントアウトと同じ結果になります。

    text-transform: none;

WordPress サイトに重大なエラーがありました。

2020年5月10日にサイトに重大なエラーがありました。と出た人のほとんどがプラグイン「all-in-one-seo-pack」が原因かと思われます。

※2020/05/28追記
All In One SEO Pack 3.5.2にアップデートでエラーは表示されなくなりました。

一時的な回避方法

一時的に問題を回避したい方は「all-in-one-seo-pack」を停止にすれば問題は解決しますが、筆者は情報が出揃ってから修正していきます。

原因の突き止め方

wp-config.php

/**
 * 開発者へ: WordPress デバッグモード
 *
 * この値を true にすると、開発中に注意 (notice) を表示します。
 * テーマおよびプラグインの開発者には、その開発環境においてこの WP_DEBUG を使用することを強く推奨します。
 */
define('WP_DEBUG', false);

デバッグモードをtrueにして「サイトに重大なエラーがありました。」と表示されているURLにアクセスするとエラーメッセージが表示されるので、エラーメッセージから原因を突き止めます。

筆者が表示されていたエラーメッセージは以下の通り

Notice: Trying to get property of non-object in /サーバーの場所/blog/wp-content/plugins/all-in-one-seo-pack/inc/schema/aioseop-context.php on line 372

Notice: Trying to get property of non-object in /サーバーの場所/blog/wp-content/plugins/all-in-one-seo-pack/inc/schema/aioseop-context.php on line 372

Notice: Trying to get property of non-object in /サーバーの場所/blog/wp-content/plugins/all-in-one-seo-pack/inc/schema/aioseop-context.php on line 372

Notice: Trying to get property of non-object in /サーバーの場所/blog/wp-content/plugins/all-in-one-seo-pack/inc/schema/aioseop-context.php on line 372

Notice: Trying to get property of non-object in /サーバーの場所/blog/wp-content/plugins/all-in-one-seo-pack/inc/schema/aioseop-context.php on line 587

Notice: Trying to get property of non-object in /サーバーの場所/blog/wp-content/plugins/all-in-one-seo-pack/inc/schema/aioseop-context.php on line 774

Recoverable fatal error: Object of class WP_Error could not be converted to string in /サーバーの場所/blog/wp-content/plugins/all-in-one-seo-pack/inc/schema/graphs/graph-webpage.php on line 73

オブジェクトにプロパティがないエラーですが修正方法はわからない為、プラグイン作成者がアップデートするか情報が出揃うまで寝かせます。

そのほかのエラーメッセージが表示されている方はファイルの行を見て修正するか、外部のプラグインが問題なら一時的に停止するか対応が必要となります。

WordPress 自動生成されるタグを無効化する

WordPressプラグインでスライダーを実装したらうまくいかなかったのでjQueryのプラグインを記事内に直で書いて実装する手順をまとめました。

jQuery本体と実装したいプラグインを読み込む

書く場所は 概観->テーマエディター->header.php

<head>
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<script src="jQuery-plug-in"></script>
</head>

jQueryCDNで読み込んでいます。
jQuery本体を先に読み込むようにしましょう。
実装するプラグインによっては読み込むファイルが複数あるのでReadMeかデモファイルを見てください。

固定ページのURLで分岐させる方法

<?php if (get_permalink() == get_site_url()."/fixed-page-url/") : ?>
    <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
    <script src="jQuery-plug-in"></script>
<?php endif ?>

WPの自動生成されるタグを無効化する

WPのエディタ(ビジュアル・テキストの両方)で書いた記事は「p」タグと「br」タグが自動で生成されます。
この機能によってjQueryで動的な動きをした際に勝手に空の「p」タグと「br」タグが生成され表示がズレる問題が起きます。
なので自動生成されるタグを無効化するのですがこれが大変な作業になります。

記事全ての自動生成を無効化する
functions.php

remove_filter('the_content', 'wpautop');
remove_filter('the_excerpt', 'wpautop');

この場合記事数が多い場合全ての記事に「p」タグと「br」タグを記載するハメになります。

固定ページの自動生成を無効化する
functions.php

function auto_generation_disabled() {
    if (is_page()) {
        remove_filter('the_content', 'wpautop');
        remove_filter('the_excerpt', 'wpautop');
    }
}
add_action('wp', 'auto_generation_disabled');

この場合固定ページのみ「p」タグと「br」タグを記載するだけで済みます。
それでも大変な量だと思いますので一度記事のソースコードからコピーする方法が確実だと思います。

WordPress 引越し・移行したのでまとめ

※事前に必ずバックアップを取りましょう

環境
WordPress:5.0.3
PHP:7.1.3
OS:Win10 XAMPP
ツール:WinSCP,phpMyAdmin
DB:MySQL

ファイルのダウンロード

まずは現在WPが稼動しているサーバーから全ファイルをダウンロードします。
※特に注意点なし

データベースのエクスポート

WPが稼動しているデータベースからデータのエクスポート
公式ドキュメントより
「生成オプション」セクション
「DROP TABLE / VIEW / PROCEDURE / FUNCTION / EVENT / TRIGGER コマンドを追加する」をチェックしてエクスポート

ファイルを移行先にアップロード

ファイルをアップロードしたら設定ファイルを編集して移行先のデータベース情報を設定してください。
wp-config.php

// ** MySQL 設定 - この情報はホスティング先から入手してください。 ** //
/** WordPress のためのデータベース名 */
define('DB_NAME', 'database_name_here');

/** MySQL データベースのユーザー名 */
define('DB_USER', 'username_here');

/** MySQL データベースのパスワード */
define('DB_PASSWORD', 'password_here');

/** MySQL のホスト名 */
define('DB_HOST', 'localhost');

/** データベースのテーブルを作成する際のデータベースの文字セット */
define('DB_CHARSET', 'utf8');

/** データベースの照合順序 (ほとんどの場合変更する必要はありません) */
define('DB_COLLATE', '');

データベースのインポート

厄介なのでSQLで一括で編集

UPDATE wp_options SET option_value="https://localhost/blog" WHERE option_name="siteurl";
UPDATE wp_options SET option_value="https://localhost/blog" WHERE option_name="home";
UPDATE wp_posts SET post_content=REPLACE(post_content, "https://office-goto.info", "https://localhost/blog");

WordPress アドレス (URL)とサイトアドレス (URL)を移行先のURLに書き換えています。

記事内のデータに関してはリンクや画像などを追加するとき直で参照先を記載するWPの仕様なので記事内容のみ文字列を新しいURLに置換しています。
記事はwp_postsテーブルのpost_contentに格納されています。

ちなみにエクスポートしたsqlファイルを編集してURLを全て一括で置換してからインポートするやり方はウィジットが消えたりめちゃくちゃになったので辞めておいたほうが無難です。

.htaccessの修正

http、https、wwwあり・なしなどを統一したりしてる場合
ログインURLをプラグイン等で変更している場合などさまざまな場合がありますので自身の環境に合わせた修正が必要です。

例)ローカルのblogフォルダにWPを入れて検証する場合

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>
# END WordPress

原因不明

外観->メニューのURLがどこで設定されているか分かっていないためメニューのURLだけWPの管理画面から編集した。
タグをどこかのファイルに書き出しているのかも?

WordPress ショートコードでPHPファイルをインクルード

ショートコードを使ってPHPファイルをインクルードする方法についてechoするPHPファイルを読み込みたいとき表示がずれたので公式ドキュメントを調べました。

公式より抜粋
echo ではなく return を使うようにしてください。
echo されたものはすべてブラウザへ出力されますが、ページの適切な箇所に表示されません。

ob_get_cleanをリターンすればいいとのことでさっそく作成

function my_shortcode() {
    ob_start();
    include('phpfile.php');
    return ob_get_clean();
}
add_shortcode('shortcode', 'my_shortcode');

phpfile.phpがecho するファイルでも【shortcode】で呼び出したとき正しく表示されるようになります。