前提・実現したいこと
WordPressの管理画面の投稿一覧の公開・下書きボタンを追加したい。
問題が発生するまでの流れ・手順
一度も公開していない投稿は、投稿一覧から公開ボタンを押しても公開されませんでした。
具体的には、新たな投稿を作成し、下書きまたはレビュー待ちにしておいた状態で保存。
その後、投稿一覧から公開ボタンを押すと公開されない。
問題が発生しない流れ・手順
一度でも公開した投稿は、投稿一覧から公開・下書きボタンを押すと期待通りに動作します。
投稿の編集画面で、一度、公開済みにしてから、下書きまたはレビュー待ちにしておく。
その後、投稿一覧から公開ボタンを押すと公開される。
気になったこと
データベース(wp_post)で確認したところ、一度も公開していない(下書きまたはレビュー待ち)投稿は、post_date_gmtが追加されていませんでした。
ソースコード
functions.phpに下記のソースコードを追加しました。
php
1/*------------------------------------*\ 2 投稿一覧に公開・下書きボタンを追加 3*------------------------------------*/ 4 5function show_publish_button($post_id){ 6$pub_form = <<<EOF 7 <form name="make_it_publish" method="post" action=""> 8 <input type="hidden" name="pid" id="pid" value="{$post_id}"> 9 <input type="hidden" name="mi_publish" id="mi_publish" value="mi_publish"> 10 <input type="submit" name="submit" id="submit" value="公開する"> 11 </form> 12EOF; 13echo $pub_form; 14} 15 16function show_private_button($post_id){ 17$pri_form = <<<EOF 18 <form name="make_it_private" method="post" action=""> 19 <input type="hidden" name="pid" id="pid" value="{$post_id}"> 20 <input type="hidden" name="mi_private" id="mi_private" value="mi_private"> 21 <input type="submit" name="submit" id="submit" value="下書き"> 22 </form> 23EOF; 24echo $pri_form; 25} 26 27function change_post_status($post_id,$status){ 28 $current_post = get_post( $post_id, 'ARRAY_A' ); 29 $current_post['post_status'] = $status; 30 wp_update_post($current_post); 31} 32 33add_action( 'admin_init', function() { 34 if (isset($_POST['mi_publish']) && $_POST['mi_publish'] == 'mi_publish'){ 35 if (isset($_POST['pid']) && !empty($_POST['pid'])){ 36 change_post_status((int)$_POST['pid'],'publish'); 37 } 38 } 39 if (isset($_POST['mi_private']) && $_POST['mi_private'] == 'mi_private'){ 40 if (isset($_POST['pid']) && !empty($_POST['pid'])){ 41 change_post_status((int)$_POST['pid'],'draft'); 42 } 43 } 44}); 45 46function manage_posts_columns($columns) { 47 $columns['publish'] = "公開"; 48 $columns['private'] = "下書き"; 49 return $columns; 50} 51 52function add_column($column_name, $post_id) { 53 54 if($column_name == 'publish'){ 55 $pub = "publish"; 56 } 57 if($column_name == 'private'){ 58 $pri = "private"; 59 } 60 61 if ( isset($pub) && $pub ){ 62 show_publish_button($post_id); 63 } else if ( isset($pri) && $pri ){ 64 show_private_button($post_id); 65 } else { 66 echo __('None'); 67 } 68} 69add_filter( 'manage_posts_columns', 'manage_posts_columns' ); 70add_action( 'manage_posts_custom_column', 'add_column', 10, 2 ); 71
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。