미리보기 모드에서 직접 게시물을 승인 하시겠습니까?


10

편집 모드 및 / 또는 "게시물 목록"모드로 돌아 가지 않고 미리보기 모드에서 직접 게시물을 승인하려면 어떻게해야합니까?

스크립트로 여러 개의 게시물 (100 개)을 업로드하고 있지만 승인하기 전에 간단히 미리보고 싶습니다.

답변:


8

여기 내가 누워있는 것이 있습니다.

<?php
/*
Plugin Name: Approve From preview
Plugin URI: http://en.bainternet.info
Description: Approve from privew  is Plugin that lets yo approve posts (draft and pending) from the preview itself.
Version: 0.1
Author: Bainternet
License:

  Copyright 2012 Bainternet (admin@bainternet.info)

  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License, version 2, as 
  published by the Free Software Foundation.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

*/
if (!class_exists('ApproveFromPreview')){

        class ApproveFromPreview {
                /**
                 * Constructor
                 */
                function __construct() {
                    //create approve link
                    add_filter('the_content',array($this,'add_approve_button'));
                    add_filter('the_content',array($this,'show_approved'));

                    //create message
                    add_action('wp',array($this,'approve_post'));
                }

                /**
                 * add_approve_button  shows a link when in preview
                 * @param  string $content 
                 * @return string 
                 */
                public function add_approve_button($content){
                    global $post;
                    if (is_preview() &&  
                        current_user_can( 'edit_post', $post->ID ) &&  
                        current_user_can( 'publish_posts', $post->ID ) &&
                        in_array($post->post_status,array('draft', 'pending'))
                    ){
                        return $this->get_button().$content;
                    }

                    return $content;
                }

                /**
                 * show_approved shows a message if approved or not
                 * @param  string $content 
                 * @return string 
                 */
                public function show_approved($content){
                    //show fail success message
                    $msg = '';
                    if ( isset( $_GET['msg'] ) ){
                        if( $_GET['msg'] == 'approved' ) 
                            $con =  '<div class="success" style="background: #1599CC;padding: 3px;border-radius: 10px;">' . __( 'Post Approved' ) . '</div>';
                        else
                            $con =  '<div class="error" style="background: #CC1515;padding: 3px;border-radius: 10px;">' . __( 'Post not Approved' ) . '</div>';
                    }
                    return $con . $content;
                }

                public function get_button(){
                    global $post;
                    return '<a href="'.wp_nonce_url( "?action=AFP&pid=" . $post->ID, 'AFP_NONCE').'" class="button">'.__('Approve').'</a><br/>';
                }

                /**
                 * approve_post if needed this plugin will call the approval action and 
                 * redirect to the newly approved post with a message.
                 * @return Void
                 */
                public function approve_post(){
                    if (!isset($_REQUEST['_wpnonce']) || 
                        !isset($_REQUEST['pid']) || 
                        !isset( $_REQUEST['action']) || 
                        $_REQUEST['action'] != "AFP" )
                    {
                        return;
                    }

                    $nonce = $_REQUEST['_wpnonce'];
                    if ( !wp_verify_nonce( $nonce, 'AFP_NONCE' ) ) {
                        return; 
                    }
                    $pid = intval($_REQUEST['pid']);
                    if (current_user_can( 'edit_post',$pid ) && current_user_can( 'publish_posts', $pid )){
                        $p = $this->change_post_status($pid,'publish');
                        if ($p > 0){
                            $redirect = add_query_arg( array('msg' => 'approved'), get_permalink($p) );
                            wp_redirect( $redirect );
                            exit;
                        }else{
                            $redirect = add_query_arg( array('msg' => 'not_approved'), get_permalink() );
                            wp_redirect( $redirect );
                            exit;
                        }
                        return;
                    }
                    return;
                }

                /**
                * the function that will actually change the post status
                * $post_id - The ID of the post you'd like to change.
                * $status -  The post status publish|pending|draft|private|static|object|attachment|inherit|future|trash.
                */
                /**
                 * change_post_status description
                 * @param  int $post_id  post id
                 * @param  string $status  new status
                 * @return int 1 if successfully  0  if not :)
                 */
                public function change_post_status($post_id,$status){
                    $current_post = get_post( $post_id, 'ARRAY_A' );
                    $current_post['post_status'] = $status;
                    return wp_update_post($current_post);
                }



        } // end class
}//end if
new ApproveFromPreview();

나는 한동안 테스트하지 않았지만 제대로 작동해야합니다.


0

CTRL을 누른 상태에서 "미리보기"버튼을 클릭하면 브라우저의 다른 창 / 탭에서 미리보기를 볼 수 있습니까? 그런 다음 CTRL-W만으로 미리보기 탭을 닫은 다음 게시 버튼을 누르십시오.

좋아, 낮은 기술 솔루션과 Bainternet의 솔루션은 확실히 흔들립니다. 내가 거기에 넣을 줄 알았는데 ...


너무 많은 클릭 :) 사실, 그것은 "게시물 목록"모드의 의미입니다. 말 그대로 1000 개의 게시물을 검토하고 있으며 모든 클릭 수가 계산됩니다.
barrycarter
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.