「トップページの一部だけをシンプルに更新できるように」というような要望があったときに便利な更新システムをダッシュボードウィジェットに追加する方法です。
functions.phpに以下をコピペすると、上画像のフォームがダッシュボードに追加され、投稿を更新することができるようになります。
add_action ( 'init', 'update_post');
function update_post() {
if( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] ) && $_POST['action'] == 'update_post') {
$data = array(
'ID' => 1,
'post_content' => $_POST['content'],
);
$pid = wp_update_post($data);
wp_redirect(admin_url());
}
}
add_action('wp_dashboard_setup', 'my_dashboard_widgets');
function my_dashboard_widgets() {
wp_add_dashboard_widget('my_widget', 'お知らせ', 'my_dashboard_widget');
}
function my_dashboard_widget() {
echo '<form id="post" class="form-content" name="post" method="post" action="">'
.'<textarea style="width:100%;height:20em;" name="content">' . get_post(1)->post_content . '</textarea>'
.'<input type="hidden" name="action" value="update_post">'
.'<input type="submit" value="お知らせを更新" class="button" name="submit">'
.'</form>';
}
↑「ID」の部分を更新させたい投稿やページのIDに変更して使ってください。
この例の場合はWordPressのデフォルト投稿であるID1の投稿(Hello World!というタイトルの投稿です)の内容が更新されます。
新規追加する場合は、
$data = array(
'post_title' => 'これはタイトルです',
'post_content' => $_POST['content'],
'post_status' => 'publish',
'post_type' => 'post'
);
$pid = wp_insert_post($data);
$dataの中身を↑にして、wp_update_post()をwp_insert_post()に変更すればOK.
この例の場合は「投稿」にどんどん新規追加されるようになります。
更新した内容を表示する時は以下をテンプレートの表示させたい場所に追加します。
<?php $post = get_post(1); echo apply_filters('the_content',$post->post_content); ?>
もしPタグや改行を自動挿入してくれるwpautopが不要な場合は、
<?php echo get_post(1)->post_content ;?>
これだけでOK。
保存場所に関してはカスタムフィールドでも良いので、その辺は「update_post_meta」を使うなど適宜変更して使ってください。