2016-09-07 28 views
2

私のWordPressのサイトでは、さまざまな人々の周りに数多くの動的ページがあります。私はデータを取得するために、JavaScript関数に含まれているデータをすべてのhtmlを生成し、実際のページのdivにすべてを挿入するAjax呼び出しを行います。これで、ページがロードされた特定の人に関する最新の3つの記事を表示したいと思います。私はのfunctions.phpにこれを追加するために私に言った結果見つけた:RSSフィードを非同期的に動的ページに入れる - wordpress

//This file is needed to be able to use the wp_rss() function. 
include_once(ABSPATH.WPINC.'/rss.php'); 
function readRss($atts) { 
    extract(shortcode_atts(array(
    "feed" => 'http://', 
     "num" => '1', 
    ), $atts)); 

    return wp_rss($feed, $num); 
} 
add_shortcode('rss', 'readRss'); 

をそれでは、私は私のhtmlでこれを入れてみました:

var rsser = '<h2>In the News</h2>' + 
      '[rss feed="http://website.com/tag/' + tagname + '/feed/" num="3"]'; 
$('#rssCon').html(rsser); 

しかし、これは動作していないようですそれが非同期的に起こっている可能性があることに恐れています。この場合の「タグネーム」は、Ajaxコールから取得したデータです。

私が探しているのは、RSSフィードを非同期的に動的に生成する方法です。可能であれば、誰かが私の方向を指すことができれば素晴らしいかもしれません。もしそうでなければ、私に教えてください!

追加するよりコード:

var getNewsPerson = function() { 
    $.ajax({ 
     url:"http://website/api/v1/api?pid=" + personId, 
     type:"get", 
     success:function(res) { 
      return_tagname(res); 
      processPerson(res); 
     } 
    }); 
}; 

function processPerson(data) { 
    var returnedFeedShortcode = return_tagname(data); 
    var head = 
     '<div class="headForPerson-nt">' + 
      '<div class="hfpm-NextPerson-nt">' + 
       '<div class="hfpm-header-nt">' + data[0][0].FirstName + '</div>' + 
       '<div class="hfpm-ng-one-nt">' + data[0][0].LastName + '</div>' + 
      '</div>' + 
      '<div class="hfpm-News-nt">' + 
       '<div class="hfpm-header-nt">In the News</div>' + returnedFeedShortcode + 
      '</div>' + 
     '</div>'; 
    $('#personPageHead-nt').html(head); 
} 

$(document).ready(function() { 
    if($('#personPageHead-nt').length) { 
     getNewsPerson(location.search); 
    } 
}); 

function return_tagname(data) { 
    var tagname = data[0][0].FirstName + '+' + data[0][0].LastName; 
    return do_shortcode('[rss feed="http://website/tag/' + tagname + '/feed/" num="3"]'); 
}; 

答えて

2

JavaScriptでショートを追加するには、仕事に行くのではありません。 PHPが既にページ上で実行されているため、処理されません。ショートコードをAJAX呼び出しで処理し、そのHTMLをタグ名の代わりにjavascript関数に返す必要があります。

次はJavaScript呼び出しです。あなたはここにdo_shortcodeを持ってはいけません。これは、私が後に示すfunctions.phpファイルにある必要があるPHP呼び出しです。ここで

var getNewsPerson = function() { 
    $.ajax({ 
     url:"http://website/api/v1/api?pid=" + personId, 
     type:"get", 
     success:function(res) { 
      processPerson(res); 
     } 
    }); 
}; 

function processPerson(data) { 
    var returnedFeedShortcode = return_tagname(data); 
    var head = 
     '<div class="headForPerson-nt">' + 
      '<div class="hfpm-NextPerson-nt">' + 
       '<div class="hfpm-header-nt">' + data[0][0].FirstName + '</div>' + 
       '<div class="hfpm-ng-one-nt">' + data[0][0].LastName + '</div>' + 
      '</div>' + 
      '<div class="hfpm-News-nt">' + 
       '<div class="hfpm-header-nt">In the News</div>' + returnedFeedShortcode + 
      '</div>' + 
     '</div>'; 
    $('#personPageHead-nt').html(head); 
} 

$(document).ready(function() { 
    if($('#personPageHead-nt').length) { 
     getNewsPerson(location.search); 
    } 
}); 

function return_tagname(data) { 
    var tagname = data[0][0].FirstName + '+' + data[0][0].LastName; 
    var requestData = { 
     'action': 'return_tagname', 
     'tagname': tagname 
    }; 
    $.ajax({ 
     url: MyAjax.ajaxurl, 
     data: requestData, 
     success: function(tagdata) { 
      return tagdata; 
    } 
}) 
}; 

はあなたのfunctions.phpファイルに追加する必要があるものです:

//You need to do this when enqueuing your javascript so that you have access to the Wordpress AJAX URL. The contents of this function can be added to your current function that is enqueuing your styles and scripts. 
function my_enqueue_script(){ 
    // declare the URL to the file that handles the AJAX request (wp-admin/admin-ajax.php) 
    wp_localize_script('my-ajax-request', 'MyAjax', array('ajaxurl' => admin_url('admin-ajax.php'))); 
} 
add_action('wp_enqueue_scripts', 'my_enqueue_script'); 

//The 'action data ('return_tagname') sent in the ajax call will tell Wordpress to use this function. You need to have it end in _callback. 
function return_tagname_callback(){ 
    //$_POST['tagname'] is coming from the AJAX post made in the return_tagname function on the javascript side. do_shortcode will return the result of the function. 
    return do_shortcode('[rss feed="http://website/tag/' + $_POST['tagname'] + '/feed/" num="3"]'); 
} 
add_action('wp_ajax_my_action', 'return_tagname_callback'); 
add_action('wp_ajax_nopriv_my_action', 'return_tagname_callback'); 
+0

「AJAXコールでショートコードを処理する」とはどういう意味ですか。私はreturn_tagname()を作成し、それがAJAX呼び出しによって生成されたhtmlに返されたものを入れましたが、関数のreturn文で "wp_rssが定義されていません"ということになります。私は "do_shortcode"と "add_shortcode"も使ってみましたが、functions.phpに追加したコードは "wp_rss"を使うと言われました。何か案は? –

+0

AJAXを使用しているので、functions.phpでdo_shortcodeを実行して値を返す必要があります。使用しているドキュメントがAJAXを使用していない可能性があります。あなたの質問にAJAX呼び出しのjavascript部分全体を投稿して、それが正しいことを確認します。 – Fencer04

+0

が追加されました。 rssフィードを追加しようとすると、他のすべての部分がうまく動作しないため、別の場所でエラーが発生しているとは思わないが、それはいつでも可能です。 –

1

RSSフィードについてあなたはこれを使用することができます。テンプレートページに貼り付けます。

<?php 
    $curl = 
    curl_init('http://website.com/tag/'); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); 
    $page = curl_exec($curl); 
    if(curl_errno($curl)) // check for execution errors 
    { 
    echo 'Scraper error: ' . curl_error($curl); 
    exit; 
    } 
    curl_close($curl); 
    $regex = '/<table class="StoryengineTable">(.*?)<\/div>/s'; 
    if (preg_match($regex, $page, $list)) 
    echo $list[0]; 
    else 
    print "Not found"; 
    ?> 
関連する問題