1

WordPressプラグインにいくつかのphpファイルがあります。問題が発生しているメインファイルにはクラスがあり、表示ページが読み込まれるときにそこから1つのメソッドを呼び出すことができます。これは正常に機能しますが、 jQuery投稿の3番目のファイル質問のタイトルにエラーが表示されます。エラーはクラスのファイルにあると言われていますが、エラーが表示されません。これがすべての関数に追加されていることを確認したglobal $wpdbので、最初の関数はトラック名を取得するために機能しますが、テストとして最後のコードを介して再度呼び出すと機能しません。どんな助けでもいただければ幸いです。

クラスファイル

<?php
class SelectList
{
public $tableName;
public $driverTableName;
public $classTableName;
public $posTableName;
public $trackTableName;

public function __construct()
{
    global $wpdb;
     $tableName = $wpdb->prefix . "raceresults";
     $driverTableName = $wpdb->prefix . "driverData";
     $classTableName = $wpdb->prefix . "classData";
     $posTableName = $wpdb->prefix . "posData";
     $trackTableName = $wpdb->prefix . "trackData";
}

public function ShowTrack()
{
    global $wpdb;
    $category = '<option value="0">choose...</option>';
    $postids = $wpdb->get_col("SELECT trackName FROM wp_trackData;");
    foreach ($postids as $value) 
    {
        $category .= '<option value="' . $value . '">' . $value . '</option>' ;
    }
    return $category;
}

public function ShowDate($track)
{
    global $wpdb;
    $type = '<option value="0">choose...</option>';
    $postids2 = $wpdb->get_col("SELECT DISTINCT raceDate FROM wp_raceresults WHERE trackName = '" . $track . "';");
    foreach ($postids2 as $value2) 
    {
        $type .= "<option>" . $value2 . "</option>"; 
    }
    return $type;
}
}

$opt = new SelectList();

jQueryコード

jQuery(document).ready(function()
{
    jQuery("select#kDate").attr("disabled","disabled");
    jQuery("select#kTrack").change(function()
    {
        jQuery("select#kDate").attr("disabled","disabled");
        jQuery("select#kDate").html("<option>wait...</option>");
        var id = jQuery("select#kTrack option:selected").attr('value');

        jQuery.post("<?php echo plugins_url("/race-results/getResults.php"); ?>", {id:id} , function(data)
        {
            jQuery("select#kDate").removeAttr("disabled");
            jQuery("select#kDate").html(data);
        })
        .success(function() { alert("success"); })
        .error(function(xhr, status, detail) { alert("error ("+status+") : " + detail); })
     });
  });

結果を得る

<?php
include "popDrp.php";
echo $opt->ShowDate($_POST[id]);
?>
4

1 に答える 1

2

コードの問題は、WordPressを「ブートストラップ」していないため、ajaxリクエストを実行するときにWordPressオブジェクトとクラスが適切に読み込まれていないことです。getResults.php簡単な(しかし正しくない)解決策は、ファイルの先頭に次のようなものを追加することです。

require_once( "relative/path/to/your/wp-load.php" );

しかし、はるかに良いことに、この記事を読んでください:

于 2012-12-29T12:45:35.577 に答える