カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

WordPress更新で502エラー?WP-CLIで解決

さくらのレンタルサーバー(例:さくらインターネット)などの共有サーバーでWordPressを運用していると、

  • 「502 Bad Gateway」
  • 「504 Gateway Timeout」

といったエラーで管理画面から更新できないことがあります。

特にプラグインが多いサイトや、やや重めのテーマを使っている場合に発生しやすいです。

この記事では、ブラウザ更新で失敗する場合の確実な解決策として、WP-CLIを使った更新方法を解説します。

なぜブラウザ更新でエラーが出るのか?

WordPressの管理画面から更新を行うと、内部では以下の処理が一度に実行されます。

  • ZIPファイルのダウンロード
  • 展開処理
  • 数百〜数千ファイルの上書き
  • データベース更新

共有サーバーでは以下の制限があります。

  • PHPの実行時間制限
  • メモリ制限
  • 同時実行プロセス制限
  • WAF(Web Application Firewall)

これらに引っかかると、処理途中でPHPが停止し、結果として「502」「504」エラーになります。

続きを読む…»

81 views

wp_nav_menu()を使わずにメニューをカスタマイズ表示

WordPressのメニューを表示する際、wp_nav_menuメソッドを使って表示することがあると思います。
その際の例

wp_nav_menu( array( 'menu' => 'GlobalMenu', 'menu_id' => 'global_navi', 'container_class' => 'global_navigation' ) );

wp_nav_menuではidやクラス等、ある程度はパラメータを与えることでカスタマイズ出来るようになっています。
しかし、例えばメニューアイテムの最後に任意のアイテムを追加で表示させたいなど、柔軟なカスタマイズをすることが出来ません。

そんな柔軟なカスタマイズを行いたいときの手法をご紹介します。

順に解説していきますが、実際には一連の処理をfunctions.phpにカスタムメソッドとして作成し、メニューを表示したい任意の箇所で実行してください。

解説

メニュー名を指定し、wp_get_nav_menu_objectメソッドでメニュー情報を取得します。
※メニュー名は[外観]->[メニュー]->[メニュー構造]で設定しているメニュー名を指定してください。

// メニュー名
$menu_name = 'GlobalMenu';
// メニュー情報取得
$menu = wp_get_nav_menu_object($menu_name);

取得したメニュー情報を基にメニューアイテムを取得します。

// メニューアイテム取得
$menu_items = wp_get_nav_menu_items($menu->term_id);

続きを読む…»

518 views

「HaCkeD by SA3D HaCk3D」WordPressの改ざん

WordPressの脆弱性を突いて、記事を改竄される事態が多数発生しています。
名の知れた有名所のサイトも被害にあっているのを見ました。

当サイトでも最新記事が改竄されていました。
日時は2月5日の10時頃。

その時の状態がこちら

問題があるのはWordPressの4.7.0と4.7.1だそうです。
対策がまだの方は最新版の4.7.2にアップデートしましょう。

参考URL:WordPress の脆弱性対策について:IPA 独立行政法人 情報処理推進機構
https://www.ipa.go.jp/security/ciadr/vul/20170206-wordpress.html

1,920 views

XML-RPC WordPress APIで記事を投稿

The Incutio XML-RPC Library for PHP
http://scripts.incutio.com/xmlrpc/
「Download the Library」をクリックしダウンロードします。

解凍すると「php-ixr-1.7.4」というフォルダーに「IXR_Library.php」というファイルがありますので
このファイルをインクルードするだけです

ライブラリをインクルード

include_once("php-ixr-1.7.4/IXR_Library.php");

投稿先アドレスを引数としてインスタンスを生成します。

$client = new IXR_Client("http://www.example.jp/xmlrpc.php");

WordPressのユーザー名とパスワードを設定します。

$wp_username = "username";
$wp_password = "password";

投稿の処理

$status = $client->query(
    "wp.newPost", //使うAPIを指定(wp.newPostは、新規投稿)
    1,            //ブログID 通常は1、マルチサイトの場合は変更が必要
    $wp_username, //ユーザー名
    $wp_password, //パスワード
    array(
        "post_author" => 1,                        //投稿者ID 未指定の場合、投稿者名なしになります
        "post_status" => "publish",                //投稿状態
        "post_title" => "テスト投稿です。",        //タイトル
        "post_content" => "テスト投稿本文です。",  //本文
        "terms" => array("category" => array(1)),  //カテゴリ
    )
);

if(!$status){
    die("エラー! - ".$client->getErrorCode()." : ".$client->getErrorMessage());
} else { 
    $post_id = $client->getResponse(); //返り値は投稿ID
}

続きを読む…»

4,497 views

WordPress テーマの一覧を取得

日本語の公式リファレンスが未記入だったので、覚書の意味も含めて書きたいと思います。

WordPressにて、現在インストールされているテーマの一覧を表示する方法です。
wp_get_themesという関数を使用します。

戻り値に各テーマの情報を連想配列で返してくれますので、ループして情報を取り出すことができます。

$themes = wp_get_themes();
print_r($themes);

続きを読む…»

2,341 views