2012-01-24 10 views
0

私はカスタムの投稿の種類があり、商品と呼ぶことができます。ユーザーがこの商品をショッピングカート(droppable jQuery UI)にドラッグすると、カスタムポストタイプの「金額」というキーを1つ減らすことができます。JSONを使用してWordpressのカスタム投稿の種類を更新する

これまでのところ、私はこのようになりますjQueryの$のアヤックスを経由してJSONの機能を持っている:

$.ajax({ url: 'http://localhost:8888/MAMP/nogg/wordpress/wp-content/themes/twentyeleven/functions.php', 
    data: { postid: +id }, 
    type: 'post', 
    success: function(output) { 
     alert("amount is reduced by 1."); 
    } 
}); 

これはのfunctions.phpにポストのIDを送信し、私は私の中のデータを取得するためにこれを使用しますfunctions.php

if(isset($_POST['postid']) && !empty($_POST['postid'])) { 
    $postid = $_POST['postid']; 
    $response = json_decode($postid); 
    remove_amount($response); 
} 

postidで関数を呼び出します。

function remove_amount($postid) { 
    $amount = get_post_meta($postid, 'amount', true); 
    update_post_meta($postid, 'amount', $amount--); 
} 

これは私に500エラーを与え、私はそれが送信された正しいIDだことを確認した、とキー(量)を含むフィールドの名前をチェックしました。

ここで私のダムの自己は何ですか?

答えて

0

json_decode$_POST['postid']変数は必要ありません。

$.ajaxメソッドは、データオブジェクトをシリアル化し、通常のPOSTのようにリクエストヘッダーにデータを送信します。 jQueryはサーバーにJSONを送信しません。 (。。あなたが実際にJSONを送信するために、あなたのAjaxのパラメータを変更することもできますが、私はあなたが$.ajaxを使用している方法で結構ですワードプレスのインストールの上にあなたの人生を複雑にしません)

このようにそれを試してみてください。

if(isset($_POST['postid']) && !empty($_POST['postid'])) { 
    // Make sure you do something in this function to prevent SQL injection. 
    remove_amount($_POST['postid']); 
} 

また、データオブジェクトの+idはどうですか?それは意図的なのでしょうか?それ以外の場合は、HTTP 500の原因となるPHPエラーを与える必要があります。

+0

はい、それは良い点です。私はちょうどここに来る前に最後の溝の努力としてそこにそれを投げた。それはいずれの方法でも動作しません。答えてくれてありがとう、json_decodeを使う理由と理由:) – ninja

+0

ああそう!私はphp_error.logを調べることができます。エラーログには次のようなメッセージが表示されます:PHP致命的なエラー:/Applications/MAMP/bin/mamp/nogg/wordpress/wp-content/themes/twentyeleven/functions.phpの706行目にある定義されていない関数get_post_meta()を呼び出して、 functions.phpにjsonを処理することを妨げる何かがありますか?関数で新しい.phpファイルを読み込もうとしますか? – ninja

0

get_post_metaは、$ single paramをtrueに設定すると文字列を返します。

文字列値をデクリメントしようとしていますか?

金額をintにキャストしてから減らすのはどうですか?

function remove_amount($postid) { 
    (int)$amount = get_post_meta($postid, 'amount', true); 
    update_post_meta($postid, 'amount', $amount--); 
} 

あなたが取得しているエラーメッセージ(706)の行は、あなたの更新のメタを処理しているラインに対応していますか?

0

[OK]を解決しました。どうやら、WP関数ファイルには、そのようなjsonコンテンツの処理を承認しない何かがあります。したがって、標準のWP関数(get_post_metaなど)を認識していないので、空のページを作成し、phpコードでカスタムテンプレートを使用してからjqueryコードでWPページにリンクしました。

$.ajax({ url: 'http://localhost:8888/MAMP/nogg/wordpress/?page_id=43', 
       data: {postid2: id }, 
       type: 'post', 
       success: function(output) { 
     } 
}); 

とpage_idの= 43は、以下のテンプレートを使用したページである:それは、今私はスティーブンが言っ行うと、いくつかのSQLインジェクションの保護を追加する必要がなければならないよう

<?php 
/** 
* Template Name: ajax template 
* Description: ajax * 
* @package WordPress 
*/ 


if(isset($_POST['postid']) && !empty($_POST['postid'])) { 
remove_amount($_POST['postid']); 
} 

function remove_amount($postid) { 
$amount = get_post_meta($postid, 'amount', true); 
if($amount > 0): 
    update_post_meta($postid, 'amount', $amount-1); 
    echo $amount-1; 
endif; 
} 

は今、コードが実行されます。答えをありがとう!正しい方向に私を得ました!

関連する問題