お問い合わせはコチラから

PerlからPHP(WordPress関数)を呼び出して値を返す方法

サイト運営

Perlで組まれたCGIから同じサーバーにあったWordpressのデータを呼び出す機会がありました。

WordPress上でACFのOptionsページを用意し、Optionsページで設定した値を読みだしてPerl側に渡してあげるという内容です。

かなり泥臭い方法ですが、実現できました。

方法1:Wordpress関数でDBからデータ取得

Perl側の処理

Perl側では、シェル実行でPHPファイルを実行し、結果を変数に格納する処理を書きます。

PHPに引数でパラメータを渡すこともできます。

$holiday=`/usr/local/php74/bin/php /home/users/www.xxxx.jp/form_xxx.php ja`;

PHP側の処理

PHP側では、wordpress関数を実行できるようにwp-load.phpを読みだします。あとはACF Optionページのフィールドを読みだして、echoします。

<?php

$lang = $argv[1];
// wp-load.phpのパスを指定
require_once "wp/wp-load.php"; 

// acfのフィールドを読みだす

$val = get_field('field_name','option');
// 最後にechoで出力

echo $val;

方法2:PHPのPDOでDBからデータ取得

Perl側の処理

方法1と同じです。

PHP側の処理

PHP側では、Wordpressのwp-load.phpを読みださずにPHPのPDOを使ってMySQLにアクセスして値を取得します。

<?php


$lang = $argv[1];
// wp-config.phpのパスを指定
require_once "wp/wp-config.php"; // 適切なパスに変更してください

// データベース接続情報を取得
$host = DB_HOST;
$db = DB_NAME;
$user = DB_USER;
$pass = DB_PASSWORD;
$charset = DB_CHARSET;

// DSNを作成
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES => false,
];

try {
    // PDOインスタンスを作成
    $pdo = new PDO($dsn, $user, $pass, $options);

    // 読み出したいオプション名
    $option_names = [
        "options_message_" . $lang . "_en",
        "options_message_" . $lang
    ];

    // プレースホルダーを生成
    $placeholders = rtrim(str_repeat('?,', count($option_names)), ',');
    
    // SQLクエリを準備
    $stmt = $pdo->prepare("SELECT option_name, option_value FROM wp_options WHERE option_name IN ($placeholders)");
    $stmt->execute($option_names);

    // 結果を取得
    $results = $stmt->fetchAll();

    // 結果を配列に格納
    $resdb = [];
    foreach ($results as $row) {
        $resdb[$row['option_name']] = $row['option_value'];
    }

    // メッセージを設定
    // options_message_enが1の場合は$messageを設定し、0の場合は空文字にする
    if (isset($resdb["options_message_" . $lang . "_en"]) && $resdb["options_message_" . $lang . "_en"] == 1) {
        $message = isset($resdb["options_message_" . $lang]) ? $resdb["options_message_" . $lang] : '';
    } else {
        $message = ""; // options_message_enが0の場合
    }
    echo $message;

} catch (\PDOException $e) {
    echo "接続エラー: " . $e->getMessage();
}

参考:https://do-jo.jp/plugins/1120/

方法3:テキストファイルからデータ取得

方法1と方法2は実際に適用してみるとレスポンスが遅くなります。

シェルの実行とPHPの呼び出しがあるので実行速度が犠牲になっているようです。

できればPerlだけで閉じて処理をしたいところです。

ACFのオプションページの保存時にデータをファイルに書きだしておいて、Perl側から読み込むのが一番早いと思います。

do_action( 'acf/options_page/save', $post_id, $menu_slug );
ACF | acf/options_page/save
Fires after publishing a save on an options page.

まとめ

PerlからwordpressのDBにアクセスしてデータを受け取る方法をご紹介しました。

PHPをシェルスクリプトで呼び出すため、処理の遅さがネックでした。

ACFのオプションページのデータを保存時にテキストに書き出し、Perlからテキストを読み出すのが一番スッキリしてオーバーヘッドが少ないかと思います。

この記事を書いた人
ブーン

はるばる日本よりオランダ王国へやってまいりました。
自分の経験が少しでも参考になれば嬉しいです。
お問い合わせは、『こちら』からお願い致します。

\ブーンをフォロー/
スポンサーリンク
サイト運営
\シェアお願いします!/
\ブーンをフォロー/
こんな記事も読まれています

失敗しないレンタルサーバーランキング

mixhost

不正アクセスに強くて使いやすいおススメサーバー
\本サイトで利用中/
メリット①:自動ウィルス駆除対応
メリット②:サイトの表示速度が速い!
メリット③:転送量の上限が多い!
メリット④:自由にプラン変更ができ、アクセス増にも対応できる!
メリット⑤:バックアップデータが無料で復元できる!
メリット⑥:Wordpressが簡単にインストールできる!
メリット⑦:どのプランでも初期費用が無料!
メリット⑧:10日間の無料お試し期間と30日の返金保証!

Conoha Wing

国内Wordpress最速の最強サーバー
メリット①:圧倒的な表示速度
メリット②:レンタルサーバーと独自ドメインがセットでお得◎
メリット③:プラン変更はすべてのプランで自由自在
メリット④:一か月の利用転送量の制限が緩い(9TB~)
メリット⑤:WordPresサイトの移行が簡単

エックスサーバー

国内シェアNo1の安定性と実績が魅力。ALL SSDで死角なしの万能サーバー。
メリット①:サイトの表示速度が安定して速い!
メリット②:アクセス負荷に強くて安定性が高い!
メリット③:24時間365日の充実サポートで安心!電話サポートもあり!
メリット④:転送量が多い!
メリット⑤:自動バックアップ機能付き!
メリット⑥:WordPressが簡単にインストールできる!
メリット⑦:10日の無料お試し期間がある!

タイトルとURLをコピーしました