web-dev-qa-db-ja.com

クイックアクションに「公開」リンクを追加する方法

クイックアクションで "Publish"リンクを追加しようとしています。

enter image description here

しかし、私はそれがどのように実装されているのか正確にはわかりません。

これが私が今までに持っているものです:

add_filter('post_row_actions', function ( $actions )
{
    global $post;

    // If the post hasn't been published yet
    if ( get_post_status($post) != 'publish' )
    {
        $nonce = wp_create_nonce('quick-publish-action');

        $link = get_admin_url('path to where') . "?id={$post->id}&_wpnonce=$nonce";

        $actions['publish'] = "<a href=\"$link\">Publish</a>";
    }

    return $actions;
});

ご覧のとおり、get_admin_urlのどこにリンクするかわかりません。私は wp_publish_post() を使うべきだと思いますが、どこにそのコードを置くべきか、そしてどのようにそれにリンクするべきかわかりません。

3
MegaHit

(Quick Editのように)Ajaxをしないと、admin_urlはまさにedit.phpページになるはずです。

ご了承ください:

  • フィルタpost_row_actionsは2つの引数を取り、2番目の引数は$postであるため、グローバルは必要ありません。
  • クエリ引数としてidを使用する代わりに、カスタム名、この場合はupdate_idを使用することをお勧めします。
  • 私は関数get_admin_urlを知りませんでした、そして通常これのために admin_url を使います。
add_filter( 'post_row_actions', function ( $actions, $post )
{
    if ( get_post_status( $post ) != 'publish' )
    {
        $nonce = wp_create_nonce( 'quick-publish-action' ); 
        $link = admin_url( "edit.php?update_id={$post->ID}&_wpnonce=$nonce" );
        $actions['publish'] = "<a href='$link'>Publish</a>";
    }   
    return $actions;
},
10, 2 );

次に、非常に早いアクションload-edit.phpをフックして、nonceとwp_update_postが問題なければ、 update_id を実行する必要があります。

add_action( 'load-edit.php', function() 
{
    $nonce = isset( $_REQUEST['_wpnonce'] ) ? $_REQUEST['_wpnonce'] : null;
    if ( wp_verify_nonce( $nonce, 'quick-publish-action' ) && isset( $_REQUEST['update_id'] ) )
    {
        $my_post = array();
        $my_post['ID'] = $_REQUEST['update_id'];
        $my_post['post_status'] = 'publish';
        wp_update_post( $my_post );
    }
});
3
brasofilo