• 解決済 gobylover

    (@gobylover)


    管理画面・投稿一覧で、レビュー待ちの投稿を1クリックで公開、または削除出来るよう、投稿一覧の新たなカラムに、『公開ボタン』を表示しました。

    公開・削除ボタンを投稿一覧に表示することは可能でしょうか?

    function show_publish_button($post_id){
    $pub_form = <<<EOF
            <form name="front_end_publish" method="post" action="">
                    <input type="hidden" name="pid" id="pid" value="{$post_id}">
                    <input type="hidden" name="fe_publish" id="fe_publish" value="fe_publish">
                    <input type="submit" name="submit" id="submit" value="approve">
             </form>
    EOF;
    
    echo $pub_form;
    }
    
    function change_post_status($post_id,$status){
        $current_post = get_post( $post_id, 'ARRAY_A' );
        $current_post['post_status'] = $status;
        wp_update_post($current_post);
    }
    
    if (isset($_POST['fe_publish']) && $_POST['fe_publish'] == 'fe_publish'){
    	if (isset($_POST['pid']) && !empty($_POST['pid'])){
    		change_post_status((int)$_POST['pid'],'publish');
    	}
    }
    
    add_theme_support( 'post-thumbnails', array( 'post' ) );//if custom post type then post type name 
    set_post_thumbnail_size( 50, 50, true );
    
    function manage_posts_columns($columns) {
    	$columns['publish'] = "承認";
    	$columns['thumbnail'] = __('Thumbnail');
    	$columns['custom_field'] = "カスタムフィールド";
    	return $columns;
    }
    
    function add_column($column_name, $post_id) {
    
    	if($column_name == 'publish'){
    		$pub = "publish";
    	}
    
    	if ( $column_name == 'thumbnail') {
    		$thum = get_the_post_thumbnail($post_id, array(150,150), 'thumbnail');
    	}
    
    	if( $column_name == 'custom_field' ) {
    		$stitle = get_post_meta($post_id, 'custom_field', true);
    	}
    
    	if ( isset($thum) && $thum ) {
    		echo $thum;
    	} else if ( isset($stitle) && $stitle ){
    		echo attribute_escape($stitle);
    	} else if ( isset($pub) && $pub ){
    		show_publish_button($post_id);
    	} else {
    		echo __('None');
    	}
    }
    add_filter( 'manage_posts_columns', 'manage_posts_columns' );
    add_action( 'manage_posts_custom_column', 'add_column', 10, 2 );

    基本的には期待する挙動を実現できたものの、1点だけ問題が生じてしまいました。

    投稿一覧では、一括操作や絞り込みにformを使用していますが、そのformが閉じるのがページ最下部の『一括操作』の後の様です。

    結果として以下の様に、formが入れ子となってしまい、当然ですが、一番上の投稿のみ追加した『公開ボタン』が効かなくなってしまいます。

    <form>
    一括操作に関するもの
    絞り込みに関するもの
    ---
    投稿1
    タイトル|作成者|カテゴリー|<form>公開ボタン</form>|...
    ---
    投稿2
    タイトル|作成者|カテゴリー|<form>公開ボタン</form>|...
    ---
    :
    :
    ---
    一括操作に関するもの
    </form>
    

    これを回避する方法が全く思いつかないのですが、何か良い方法はありませんでしょうか。。。?

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック投稿者 gobylover

    (@gobylover)

    別途JSを用意し、解決しました。

    function quick_delete_post(post_id){
    var delForm = document.createElement('form');
    delForm.method = 'POST';
    delForm.action = '';
    
    var pid = document.createElement('input');
    pid.name = 'pid';
    pid.value = post_id;
    delForm.appendChild(pid);
    
    var fe_delete = document.createElement('input');
    fe_delete.name = 'fe_delete';
    fe_delete.value = 'fe_delete';
    delForm.appendChild(fe_delete);
    
    document.body.appendChild(delForm);
    delForm.submit();
    }
    
    function quick_submit_post(post_id){
    var subForm = document.createElement('form');
    subForm.method = 'POST';
    subForm.action = '';
    
    var pid = document.createElement('input');
    pid.name = 'pid';
    pid.value = post_id;
    subForm.appendChild(pid);
    
    var fe_publish = document.createElement('input');
    fe_publish.name = 'fe_publish';
    fe_publish.value = 'fe_publish';
    subForm.appendChild(fe_publish);
    
    document.body.appendChild(subForm);
    subForm.submit();
    }
    function js_admin($hook) {
    	if($hook == 'edit.php'){
    		wp_enqueue_script('custom_admin_script',get_bloginfo('template_url').'/quick_submit_post.js');
    	}
    }
    add_action('admin_enqueue_scripts', 'js_admin');

    こんにちは

    ご希望の方法ではありませんが、私ならAjaxで処理しますね・・・

    あれ、解決済みだったんですね。
    すいません。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「管理画面・投稿一覧でformの入れ子を回避する方法」には新たに返信することはできません。