-
2012/12/11 10:08 오전 #6663
xmlrpc 기본 메소드 인 wp.newPost 가지고 글을 작성하고 있습니다.
아래 코드는 통신할때 실어서 날리는 데이터 형태입니다.
{
“post_content” = ” 내용”;
“post_status” = publish;
“post_title” = “제목”;
terms = {
category = (7);
};
}
숫자 7은 카테고리 id값입니다.
id값대신 카테고리 제목을 넣어도 정상적으로 작동되구요..
근데 저는 slug값으로 카테고리를 지정하고 싶습니다.
혹시 terms나 temrs_name 으로 해결이 가능할까요?
2012/12/11 10:35 오전 #6665필터 xmlrpc_wp_insert_post_data 후크를 이용해야합니다.
즉, xmlrpc_wp_insert_post_data 데이터를 변형시켜주는 부분을 플러그인 형태로 만들어서 워드프레스 사이트에 적용해야하지만, 무리가 있을 것으로 보여집니다.
그 이유는 해당 필터의 위치가 뒤쪽에 있기 때문에, terms에 slug를 넣으면 에러가 발생할 것이고, terms_name에 넣으면 slug명으로 카테고리를 추가하게 되기 때문입니다.
따라서 코어 수정 없이 slug를 통하여 입력하는 것은 어려울 것 같습니다.
꼭 해야한다면 wp.getCategory 를 통하여 카테고리를 전부 가져와서 입력할 슬러그를 비교해서 해당 아이디를 가져온 후 다시 wp.newPost를 통해 입력하는 방법을 해야할것 같습니다.
2012/12/11 11:00 오전 #6666그러쿤요..그냥 코드 수정했습니다..
기존에 있던 wp.newPosts 에서 3줄 추가 했어요.
[code title=””]
function gs_newPosts($args)
{
if ( ! $this->minimum_args( $args, 4 ) )
return $this->error;
$this->escape( $args );
$blog_id = (int) $args[0];
$username = $args[1];
$password = $args[2];
$content_struct = $args[3];
// 추가된 부분…
$category = get_term_by(‘slug’, $content_struct[‘slug’], ‘category’);
$content_struct[‘terms’] = array(“category” => array($category -> term_id));
if ( ! $user = $this->login( $username, $password ) )
return $this->error;
do_action( ‘xmlrpc_call’, ‘wp.newPost’ );
unset( $content_struct[‘ID’] );
//추가
unset( $content_struct[‘slug’] );
return $this->_insert_post( $user, $content_struct );
}
[/code]
2012/12/11 4:40 오후 #6669코어를 수정하시면 나중에 많이 후회하실거에요~ 보안 업그레이드도 맘대로 못하고 수정내역 항상 유지해야 하고 등등… 플러그인 생성하면 당시에는 조금 만들기 번거로울 수 있지만 용도별로 정리만 잘 해 놓으면 추가 기능 관리가 훨씬 수월해 집니다 🙂
2012/12/12 9:46 오전 #6672저번에 플러그인 형태로 사용하는게 좋다고 하셔서
플러그인으로 만들어서 사용중이애요.
관심 감사합니다.
[code title=””]
<?php
class pushService_xmlrpc_server
{
public function __construct()
{
add_filter(‘xmlrpc_methods’, array(&$this, ‘add_methods’) );
}
function add_methods($methods)
{
$methods[‘gs.pushServiceInsert’] = array(&$this, ‘gs_pushServiceInsert’);
$methods[‘gs.test’] = array(&$this, ‘gs_test’);
return $methods;
}
function gs_test($args)
{
//global $wpdb;
$category = get_term_by(‘slug’, ‘foodmenu’, ‘category’);
return $category -> term_id;
}
public function gs_pushServiceInsert($args)
{
global $blog_id;
// 사용자 아이디, 패스워드
$username = $args[0];
$password = $args[1];
// 데이터…
$field = $args[2];
// 로그인 체크
if(!wp_authenticate($username, $password))
return falue;
// 블로그 이름은 서버에서 처리하자..
$defaultStruct = array(
‘blog_id’ => $blog_id,
);
$dataStruct = array_merge($defaultStruct, $field);
return pushService_insert_db($dataStruct);
}
}
$pushServuceXMLrpc = new pushService_xmlrpc_server();
[/code]
-
AuthorPosts
- 답변은 로그인 후 가능합니다.