だから私は最近AjaxでWordpressで働いていて、私は自分のデータベースから私のサイトにいくらかの株価データを入れることに成功した。しかし、私は今Ajaxを使用してWordpressの投稿を左側のサイドバーにロードしようとしています。これにはWordpressの機能を使用する必要があり、これが正しく行われていないようです。
私はWordpress Codexと他のいくつかのスレッド/チュートリアルをこのトピックについて調べましたが、何が悪いのかについては非常に混乱しています。
Javascriptファイル
function load_blog_posts_function()
{
jQuery.ajax({
url: "wp-content/themes/Divi/js/stockchart/blog-list-query.php",
data: ({action : 'load_blog_posts_sidebar'}),
success: function(data) {
alert(data);
}
});
}
PHPファイル
<?php
function load_blog_posts_sidebar()
{
$stockSymbol = $_GET['symbol'];
/* Set up the query arguments. */
$options = get_option("widget_rpwe_widget");
$args = array('fb' => $cat);
$default_args = apply_filters( 'rpwe_default_query_arguments', $args );
$rpwewidget = get_posts($default_args);
//echo $options;
echo("hello world");
}
?>
私はまた、自分のfunctions.phpにいくつかのコードが必要であることを読んだので、私はこれを持っています:
$dirName = dirname(__FILE__);
$baseName = basename(realpath($dirName));
require_once ("$dirName/js/stockchart/blog-list-query.php");
add_action("wp_ajax_nopriv_load_blog_posts_sidebar", "load_blog_posts_sidebar");
add_action("wp_ajax_load_blog_posts_sidebar", "load_blog_posts_sidebar");
これを実行しようとすると、現在2つのエラーが出ます。
未定義の関数get_option()を呼び出します
これは私のphpスクリプトがWordpressの機能を認識していないことを私に伝えています、そして私もこれを得ます:
Warning:session_start():セッションキャッシュリミッタを送信できません - ヘッダはすでに送信されています(出力は.../www.3weekwebsites.com/wp-content/themes/Divi/js/stockchart/blog-list-query.php:12 1行目.../www.3weekwebsites.com/wp-content/themes/Divi/header.php
誰かがここに何らかの洞察を共有してもらえますか?とても感謝しております。 :)
PHPライブラリがロードされていないWordPressファイルにリクエストを送信しているため、未定義関数エラーが発生しています。
require '../../../wp-load.php'
のようなものを手動でWordPressにロードできました。
または、さらに良いことに、素晴らしい AJAX API を使用します。 wp-admin/admin-ajax.php
へのリクエストを実行し、action
パラメーター(この場合、load_blog_posts_sidebar
)に一致するコールバックをプラグインまたはテーマに登録します。
function wpse_147692_load_blog_posts_sidebar() {
// Do something!
exit;
}
add_action( 'wp_ajax_nopriv_load_blog_posts_sidebar', 'wpse_147692_load_blog_posts_sidebar' );
add_action( 'wp_ajax_load_blog_posts_sidebar', 'wpse_147692_load_blog_posts_sidebar' );