워드프레스 자동포스팅(with PHP)

워드프레스를 자동 포스팅 하는 방법에 대해서 소개 드립니다.
파이썬을 이용해서 자동 포스팅하는 글은 많이 있는데 PHP 를 이용한 방법은 자세히 설명된 글이 없어서 PHP 를 이용해서 자동 포스팅 하는 방법에 대해서 소개 합니다.

API를 이용해서 자동 포스팅을 할때는 업로드용 사용자를 생성해서 작업하시는게 좋습니다.
아이디와 비밀번호도 별도로 하나 만들어서 작업하도록 하겠습니다.

업로드용 사용자 생성

사용자 -> 새로추가 에서 새로운 사용자를 추가해 줍니다.
역할은 관리자로 해 주셔야 합니다.

어플리케이션 비밀번호 생성하기

워드프레스 관리자 화면에 들어갑니다.
모든 사용자 메뉴를 클릭 한 후 방금 만든 사용자명을 클릭 합니다.

그럼 아래와 같은 응용프로그램 비밀번호를 입력하는 항목이 나옵니다.

이제 비밀번호가 아래 뜹니다.

비밀번호 형식은
아래와 같은 형식으로 되어 있습니다.
gwrK QRmB XXX XXXX O4e1 z8sA

비밀번호 항목은 잘 메모해서 기억해 주세요.
만약 비밀번호를 잊어버리면 다시 새응용프로그램을 생성하시면 됩니다.

public function autoWrite()
    {
         $WP_URL = 'https://xxx.co.kr/wordpress/'; // 자신의 워드프레스 주소
        $WP_USERNAME = 'userId'; // 워드프레스 사용자이름
        $WP_PASSWORD = 'password'; // 어플리케이션 비밀번호

        $status = 'publish'; // 즉시발행: publish, 임시저장: draft
        $slug = 'auto-post-rest-api-test'; // 슬러그를 입력하세요

        $title = '워드프레스 자동포스팅'.rand(1, 10000); // 글의 제목(랜덤으로 생성)

        $content = "<h1>h1테그</h1><h2>h2테그</h2><div class='featured-image  page-header-image-single'>
				<img loading='lazy' width='984' height='1014' 
				    src='https://img.buzzfeed.com/buzzfeed-static/static/2024-02/20/16/asset/ed2ec7ae0396/sub-buzz-680-1708446951-3.png'>
			    </div>";
        // 본문내용을 적을 것. html 로 적으면 된다
        $category_ids = [1]; // 카테고리 아이디는 글/카테고리/ 해당카테고리에 커서를 가져가면 하다나에 카테고리 아이디값이 나온다. 숫자다
        $tag_ids = [23]; // 태그아이디도 카테고리 아이디 찾는 방법과 동일

        $media_id = null; // 이미지 업로드 없음

        $user_ = $WP_USERNAME;
        $pass_ = $WP_PASSWORD;

        $payload = [
            "status"     => $status,
            "slug"       => $slug,
            "title"      => $title,
            "content"    => $content,
            "date"       => date("c"),
            "categories" => $category_ids,
            "tags"       => $tag_ids
        ];
        if ($media_id !== null) {
            $payload['featured_media'] = $media_id;
        }

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $WP_URL . "wp-json/wp/v2/posts");
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, [
            'Content-Type: application/json'
        ]);
        curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
        curl_setopt($ch, CURLOPT_USERPWD, "$user_: $pass_");

        $res = curl_exec($ch);
        $info = curl_getinfo($ch);
        curl_close($ch);

        if ($res !== false && ($info['http_code'] == 200 || $info['http_code'] == 201)) {
            $result = "성공 code: {$info['http_code']}";
        } else {
            $result = "실패 code: {$info['http_code']} reason: {$info['http_code']} msg: $res";
        }
        plog($result);
    }

카테고리, 태그 번호는 아래와 같이 카테고리에 마우스를 가져가면 아패 뜨는 주소 중 숫자를 사용하시면 됩니다.

코드 실행하기

코드를 완성 후 해당 코드를 실행하면 아래와 같이 자동 포스팅이 생성 됩니다.

해당 포스팅을 접속하면 아래 화면처럼 제목 테그와 이미지 첨부도 잘 되는것을 확인 할 수 있습니다.

자동 포스팅은 보안적인 측면에서 좋지 않기 때문에
사용하지 않을 때에는 꼭 어플리케이션 비밀번호를 삭제하시기 바랍니다.

주의사항) http 프로토콜에서는 어플리케이션 비밀번호 생성하기가 활성화 되지 않습니다.

댓글 남기기