クイックアクションで "Publish"リンクを追加しようとしています。
しかし、私はそれがどのように実装されているのか正確にはわかりません。
これが私が今までに持っているものです:
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()
を使うべきだと思いますが、どこにそのコードを置くべきか、そしてどのようにそれにリンクするべきかわかりません。
(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 );
}
});