サポート » テーマ » 記事保存時に保存する内容を取得する

  • osamuya

    (@osamuya)


    お世話になります。現在テーマのfunctions.php内で、記事保存時の内容をメールで飛ばすような仕組みを考えております。専ら勉強中で恐縮なのですが、記事の内容がうまく取り出せません。
    $postに内容が入ってくるんじゃないかと思っているのですが、グローバル宣言しても中身が空になっています。メール送信自体は、送信内容を直書きで指定してやると送信できるので問題ないと思いますが、大本の投稿内容が取得できません。
    皆様どのように行なっているのでしょうか?
    もしそれに類する詳しい資料など載っている場所があれば教えていただければと思います。
    よろしくお願いします。

    現在書いているコードは、(端折っていますが)大まかな内容は以下のようになっています。

    function send_the_content() {
    
    	global $post; //たぶん、ここがすでに違う
    	$send_title = post['title'];
    	$send_content = post['content'];
    
    	wp_mail('user@example.com',$send_title,$send_content,'From:user@example.com' );
    }
    add_action( 'publish_post', 'send_the_content', 1 ,6);

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • pluto1234

    (@pluto1234)

    $send_title = post[‘title’]; で Syntax Error となり PHP は実行されていないと思います。

    function send_the_content($post_id) {
        $p = get_post($post_id);
        $send_title = $p->post_title;
        $send_content = $p->post_content;
                       :
        wp_mail('user@example.com',$send_title,$send_content,'From:user@example.com' );
    }
    add_action( 'publish_post', 'send_the_content', 1 ,6);

    トピック投稿者 osamuya

    (@osamuya)

    pluto1234さん
    ありがとうございます。バッチリできました。

    idを引数で取り込んでget_post()でプロパティーを得る…というところまではコードを見てわかるのですが、get_postsではなくてget_postなんですね。ググってもget_postがなかなか出てこないのですが、これは文脈上どういう関数なのでしょうか?
    idを得るところから、データベースに格納された後に投稿された記事の内容を読みだしている…という順番になっているのでしょうか?
    イマイチその内部での動作がわかりませんでした。
    何かヒントになるようなものがあればご教授願いたいです。よろしくお願いいたします。

    pluto1234

    (@pluto1234)

    [get_posts]
    抽出条件を指定して、複数(0個以上)のポストオブジェクトの配列を取得する関数です。
    [get_post]
    ID から1つのポストオブジェクト(ポストデータ)を取得する関数です。
    http://codex.wordpress.org/Function_Reference/get_post

    このフックがDBに保存された後に起動するのか、保存される直前に起動されるのかはソースを見ないとわかりません(見るのは嫌だ)。
    ですが、get_post() で取得できているということは、保存後のデータを取得しているような気がします。

    誰か詳しい人が答えてくれるかもしれません。

    トピック投稿者 osamuya

    (@osamuya)

    ありがとうございます。
    get_postsはWPループの中でも使っていたのですが、get_postに関しては日本語のページでは全然見つかりませんでした。英語ページ探すのをすっかり忘れていました。ありがとうございます。
    私もちょっとソースの中探してみます。

    トピック投稿者 osamuya

    (@osamuya)

    ちゃんと調べていないのですが、
    /wp_record/wp-includes/post.php
    の中にありました。。。WP_Postの中身を更に見てみないと何とも言えないのですが、これは、また今週中に頑張って見てみます。

    function get_post( $post = null, $output = OBJECT, $filter = 'raw' ) {
    	if ( empty( $post ) && isset( $GLOBALS['post'] ) )
    		$post = $GLOBALS['post'];
    
    	if ( is_a( $post, 'WP_Post' ) ) {
    		$_post = $post;
    	} elseif ( is_object( $post ) ) {
    		if ( empty( $post->filter ) ) {
    			$_post = sanitize_post( $post, 'raw' );
    			$_post = new WP_Post( $_post );
    		} elseif ( 'raw' == $post->filter ) {
    			$_post = new WP_Post( $post );
    		} else {
    			$_post = WP_Post::get_instance( $post->ID );
    		}
    	} else {
    		$_post = WP_Post::get_instance( $post );
    	}
    
    	if ( ! $_post )
    		return null;
    
    	$_post = $_post->filter( $filter );
    
    	if ( $output == ARRAY_A )
    		return $_post->to_array();
    	elseif ( $output == ARRAY_N )
    		return array_values( $_post->to_array() );
    
    	return $_post;
    }
5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「記事保存時に保存する内容を取得する」には新たに返信することはできません。