サポート » 使い方全般 » wp_update_postについて

  • 解決済 k-morita

    (@k-morita)


    お世話になります。

    固定ページにGoogleカレンダーを埋め込んで表示しています。
    Googleカレンダーからカレンダーの更新日時が取得できないので
    Googleカレンダーの更新日時として当該固定ページの更新日時を
    固定ページ内に表示させています。

    この手段にwp_update_post関数を用いて特定のURLにアクセスすると
    当該固定ページに表示させている日付を更新するようにしているのですが
    管理画面にログインしているブラウザで試すと何ら問題ないのですが
    WordPressからログアウトしたブラウザやログインしていない別端末で試すと
    Googleカレンダーのみ消えてしまいます。

    調べてみるとWordPress3.5あたりで予約投稿使用時にiframeタグが
    消えてしまうといった不具合が生じていたようですが
    この事例もバグなのでは・・・と思っています。

    試しにYouTube動画のiframeタグを使った埋め込みコードを使用して
    同様の操作を行ったところ動画のみ消えてしまいました。

    実際に使用しているコードが以下です。

    <?php
    	require_once( dirname( __FILE__ ) . '/wp-load.php' );
    		$my_post = array();
    		$my_post['ID'] = 671;
    		//$my_post['post_content'] = '';
    
    	 wp_update_post( $my_post );
    ?>

    post_contentをコメントアウトしていますが、ここに投稿本文を書き込んで実行しても
    同様にiframeタグが削除されてしまいます(涙

    そもそもバグなどでは無く、単純に扱い方が悪いだけなのかもしれませんが、
    ここが問題だと言う部分があればお教え願えますでしょうか。
    よろしくお願いします。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • tmatsuur

    (@tmatsuur)

    k-moritaさん、こんにちは。

    症状からまず思いつくことは、未ログイン状態なので更新に失敗していることですかね。

    まずwp_update_postの戻り値の内容を確認してみてはいかがでしょうか。
    var_dump( wp_update_post( $my_post ) );
    正常であれば投稿IDが返るので、それ以外であれば更新エラーになります。

    nobita

    (@nobita)

    こんにちは

    wp_update_post() を実行する前に引数に渡す投稿情報を作成する必要があります。wp_insert_post() とは異なり、投稿 ID を指定する必要があります。

    http://wpdocs.sourceforge.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/wp_update_post

    なので、変更する、投稿情報を作成する必要があるのではないでしょうか

    nobita

    (@nobita)

    こんにちは

    wp_update_post() を実行する前に引数に渡す投稿情報を作成する必要があります。wp_insert_post() とは異なり、投稿 ID を指定する必要があります。

    http://wpdocs.sourceforge.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/wp_update_post

    ちょっと良くわからないですが、動きますか?

    <?php
    	require_once( dirname( __FILE__ ) . '/wp-load.php' );
    
    	$my_post = get_post( 671 ,'OBJECT');
    	//	var_dump( $my_post );
    	$my_post->post_content = $my_post->post_content.'更新できてるかなチェック';
    	$my_post->post_modified = current_time( 'mysql' );//これでいいのかなー
    	wp_update_post( $my_post ) ;
    ?>

    トピック投稿者 k-morita

    (@k-morita)

    tmatsuur様 ありがとうございます。
    実行結果はint(671)となりました。
    尚、ログイン、ログアウト状態共に
    $my_post['post_content'] = 'テスト';などと入れて試験すると
    固定ページの本文はテストに書き換えられますが、これを例えば
    $my_post['post_content'] = '<iframe src="">テスト</iframe>';とすると
    ログイン状態ではそのまま投稿されますが、ログアウト状態ですと
    <iframe src=””></iframe>が消えて本文がテストだけになってしまいます。
    当然これも結果はint(671)となります。

    nobita様 ありがとうございます。
    お教え頂きましたコードを試すと【更新できてるかなチェック】が追記されるだけでした。
    ログイン状態ではカレンダーは消えすに上記が追記され
    ログアウト状態ではカレンダーが削除され上記が追記されるだけでした。

    かなり自分の説明が下手なのですが、ログアウト状態で実行すると
    普通の文字は登録更新可能ですが<iframe src=””>~</iframe>が消えてしまうのです。

    以上、よろしくお願いします。

    tmatsuur

    (@tmatsuur)

    k-moritaさん、こんばんは。

    更新はされるけど、コンテンツの中身からタグが消えているのですね。

    wp_update_postを呼び出す前に
    remove_filter( 'content_save_pre', 'wp_filter_post_kses' );
    を入れてみてください。

    これで大丈夫だと思います。

    トピック投稿者 k-morita

    (@k-morita)

    tmatsuur様 ありがとうございます。

    試してみましたところ投稿内容は保持されるようになりましたが日付が変わりません…
    と言うことはページ自体更新されていないと言うことなのでしょうか…
    う~ん…

    tmatsuur

    (@tmatsuur)

    k-moritaさん、内容が変わったのであれば、更新はされていると思うのです。

    ただ日付を変更する目的であれば、カスタムフィールドをに更新日時を
    セットし、その内容を表示するほうが楽かもしれませんね。
    とりあえず、現在日付を表示している部分はどんな感じになっていますか。

    トピック投稿者 k-morita

    (@k-morita)

    お返事が遅くなりまして申し訳ございません。

    色々と調べてみましたら以下サイトの内容を書き足すだけで実現できました。
    http://liginc.co.jp/programmer/archives/1665

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • トピック「wp_update_postについて」には新たに返信することはできません。