2012-01-24 9 views
0

나는 사용자 정의 게시 유형을 사용하여 제품을 호출 할 수 있습니다. 사용자가이 제품을 쇼핑 바구니 (droppable jQuery UI)로 드래그하면 내 맞춤형 게시물에 "amount"라는 키가 하나씩 줄게됩니다.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로 함수를 호출합니다. 이것은 나에게 500 오류를 제공

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

는, 나는 그것을 전송하고, 키 (양)를 포함하는 필드의 이름을 확인하고있다 올바른 ID 확신했습니다.

그래서 여기에 내 바보 같은 자기가 무엇입니까?

답변

0

$_POST['postid'] 변수가 필요하지 않습니다.

$.ajax 메서드는 데이터 개체를 serialize하고 요청 헤더의 데이터를 일반 POST처럼 보냅니다. jQuery가 서버에 JSON을 보내지 않습니다. (. 설치 당신이 $.ajax 괜찮 사용하는 방법을 실제로 JSON을 보낼 아약스 매개 변수를 변경할 수 있지만, 나는 워드 프레스를 통해 당신의 인생을 복잡하게하지 않을 것입니다.)

이처럼보십시오 :

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

예, 좋은 지적입니다. 나는 여기에 오기 전에 마지막 도랑 노력으로 거기에 버렸습니다. 어느 쪽이든 작동하지 않습니다. 대답 tho를 주셔서 감사합니다. 언제 그리고 왜 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

좋아, 해결했습니다. WP 함수 파일에는 json 컨텐트를 처리하는 것을 승인하지 않는 무언가가 있습니다. 따라서 표준 WP 함수 (예 : get_post_meta)를 인식하지 못하고 빈 페이지를 작성한 다음 PHP 코드로 사용자 정의 템플리트를 사용한 다음 jquery 코드에서 해당 WP 페이지에 링크했다. 그것은, 지금은 단지 스티븐이 말을 할 일부 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; 
} 

이제 코드를 실행 :

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

및 페이지 ID = 43 아래의 템플릿을 사용하여 페이지입니다 . 답변 주셔서 감사합니다! 올바른 방향으로 나를 잡았어!

관련 문제