swcn
フォーラムへの返信
-
フォーラム: 使い方全般
返信が含まれるトピック: 記事を修正した時に更新日時(modified_time)を変更せずに保存する方法はな最終的にこのようにしました。
/*管理画面が開いたときに実行*/ add_action( 'admin_menu', 'add_update_level_custom_box' ); /*更新ボタンが押されたときに実行*/ add_action( 'save_post', 'save_custom_field_postdata' ); /* カスタムフィールドを投稿画面に追加 */ function add_update_level_custom_box() { //ページ編集画面にカスタムメタボックスを追加 add_meta_box( 'update_level', '更新レベル', 'html_update_level_custom_box', 'post', 'side', 'high' ); } /* 投稿画面に表示するフォームのHTMLソース */ function html_update_level_custom_box() { $update_level = get_post_meta( $_GET['post'], 'update_level' ); echo '<div style="padding-top: 3px; overflow: hidden;">'; echo '<div style="width: 100px; float: left;"><input name="update_level" type="radio" value="high" '; if( $update_level[0]=="" || $update_level[0]=="high" ) echo ' checked="checked"'; echo ' />通常更新</div><div style="width: 100px; float: left;"><input name="update_level" type="radio" value="low" '; if( $update_level[0]=="low" ) echo ' checked="checked"'; echo '/>修正のみ<br /></div>'; echo '</div>'; } /* 設定したカスタムフィールドの値をDBに書き込む記述 */ function save_custom_field_postdata( $post_id ) { $mydata = $_POST['update_level']; if( "" == get_post_meta( $post_id, 'update_level' )) { /* update_levelというキーでデータが保存されていなかった場合、新しく保存 */ add_post_meta( $post_id, 'update_level', $mydata, true ) ; } elseif( $mydata != get_post_meta( $post_id, 'update_level' )) { /* update_levelというキーのデータと、現在のデータが不一致の場合、更新 */ update_post_meta( $post_id, 'update_level', $mydata ) ; } elseif( "" == $mydata ) { /* 現在のデータが無い場合、update_levelというキーの値を削除 */ delete_post_meta( $post_id, 'update_level' ) ; } } /* 「更新」以外は更新日時を変更しない */ add_filter( 'wp_insert_post_data', 'my_insert_post_data', 10, 2 ); function my_insert_post_data( $data, $postarr ){ $mydata = $_POST['update_level']; if( $mydata == "low" ){ unset( $data["post_modified"] ); unset( $data["post_modified_gmt"] ); } return $data; }
フォーラム: 使い方全般
返信が含まれるトピック: 記事を修正した時に更新日時(modified_time)を変更せずに保存する方法はな更新時更新時とばかり考えていたので新規投稿時のことを忘れてました…
上のコードでは新規投稿時は更新日時が0になってしまうので、
$mydata != "high"
のところを
$mydata == "low"
にしました。
フォーラム: 使い方全般
返信が含まれるトピック: 記事を修正した時に更新日時(modified_time)を変更せずに保存する方法はなgogowebさん、アドバイスありがとうございます。
アドバイスを元に新しくメタボックスを追加して「手直し」か「更新」かの値を取得する方法にしてみました。
下記のコードで今のところうまく動いてくれているのですが、何かよくない所があればご指摘いただきたいです。
よろしくお願いします。
/*管理画面が開いたときに実行*/ add_action( 'admin_menu', 'add_update_level_custom_box' ); /*更新ボタンが押されたときに実行*/ add_action( 'save_post', 'save_custom_field_postdata' ); /* カスタムフィールドを投稿画面に追加 */ function add_update_level_custom_box() { //ページ編集画面にカスタムメタボックスを追加 add_meta_box( 'update_level', '更新レベル', 'html_update_level_custom_box', 'post', 'side', 'high' ); } /* 投稿画面に表示するフォームのHTMLソース */ function html_update_level_custom_box() { $update_level = get_post_meta( $_GET['post'], 'update_level' ); echo '<div style="padding-top: 3px; overflow: hidden;">'; echo '<div style="width: 80px; float: left;"><input name="update_level" type="radio" value="none" '; if( $update_level[0]=="" || $update_level[0]=="none" ) echo ' checked="checked"'; echo ' />未指定</div><div style="width: 80px; float: left;"><input name="update_level" type="radio" value="low" '; if( $update_level[0]=="low" ) echo ' checked="checked"'; echo ' />手直し<br /></div><div style="width: 80px; float: left;"><input name="update_level" type="radio" value="high" '; if( $update_level[0]=="high" ) echo ' checked="checked"'; echo '/>更新<br /></div>'; echo '</div>'; } /* 設定したカスタムフィールドの値をDBに書き込む記述 */ function save_custom_field_postdata( $post_id ) { $mydata = $_POST['update_level']; if( "" == get_post_meta( $post_id, 'update_level' )) { /* update_levelというキーでデータが保存されていなかった場合、新しく保存 */ add_post_meta( $post_id, 'update_level', $mydata, true ) ; } elseif( $mydata != get_post_meta( $post_id, 'update_level' )) { /* update_levelというキーのデータと、現在のデータが不一致の場合、更新 */ update_post_meta( $post_id, 'update_level', $mydata ) ; } elseif( "" == $mydata ) { /* 現在のデータが無い場合、update_levelというキーの値を削除 */ delete_post_meta( $post_id, 'update_level' ) ; } } /* 「更新」以外は更新日時を変更しない */ add_filter('wp_insert_post_data','my_insert_post_data',10,2); function my_insert_post_data( $data, $postarr ){ $mydata = $_POST['update_level']; if( $mydata != "high" ){ unset( $data["post_modified"] ); unset( $data["post_modified_gmt"] ); } return $data; }
フォーラム: 使い方全般
返信が含まれるトピック: 記事を修正した時に更新日時(modified_time)を変更せずに保存する方法はなgogowebさん、ありがとうございます。
試してみようと思ったのですが、ifの条件文になにを入れればよいか思いつきませんでした…
例えばで良いので何かありますでしょうか?
よろしくお願いします。
フォーラム: 使い方全般
返信が含まれるトピック: 記事を修正した時に更新日時(modified_time)を変更せずに保存する方法はなgogowebさん、コメントありがとうございます。
新着情報と更新情報を一緒に表示させ、新着記事には新着アイコンを付け、更新時には更新アイコンを付けてトップに表示するようにさせているので、投稿日時ではちょっとうまくないのです…
理想は更新ボタンを2つ設置し、片方を通常更新、片方は更新日時を変更せずに更新する、などの案はあるのですがなかなか実装まではいけません…
フォーラム: プラグイン
返信が含まれるトピック: Count Per Dayで記事別に直近7日間のユーザー数を取得したい。functions.phpに
function get_user_lastweek( $postID ) { global $wpdb; $sql = " SELECT COUNT(*) " . " FROM <code>wp_cpd_counter</code> " . " WHERE <code>page</code> = " . $postID . " AND <code>date</code> >= DATE_SUB( '" . date_i18n('Y-m-d') . "', INTERVAL 7 DAY ) " ; $res = $wpdb->get_var($sql); return $res; }
get_user_lastweek( $post->ID );
で取得。
これでいけてるようです。
皆様ご協力ありがとうございました。
フォーラム: プラグイン
返信が含まれるトピック: Count Per Dayで記事別に直近7日間のユーザー数を取得したい。いろいろ模索してデータベースから取得しよう考えました。
functions.phpに
function get_user_lastweek( $postID ) { global $wpdb; $sql = " SELECT COUNT(*) " . " FROM wp_cpd_counter " . " WHERE page = " . $postID ; $res = $wpdb->get_var($sql); return $res; }
と記述し記事ごとの総ユーザー数の取得まではできたのですが、この先の期間指定での抽出に詰まりました。
フィールド名’date’で’2013-08-29’などとありますので、これと比較してできないものかといろいろ試しましたがうまくいきませんでした。
詳しい方おられましたらお力お貸しください。