由于WordPress处理发布帖子的方式,默认情况下没有“发布”链接<“发布”不是以同样的方式考虑操作,“删除”是,而是保存帖子及其所有数据,包括帖子状态。
为了解决这个问题,您可以创建自己的操作处理程序。为了避免与WP或其他插件发生潜在冲突,您可能应该在自定义操作之前加前缀,或者至少在nonce之前加前缀。
以下代码应适用于此链接(注意前缀为action和nonce):
$url = add_query_arg(array(\'action\'=>\'mypublish\', \'post\'=>$post->ID),home_url());
echo "<a href=\'" . wp_nonce_url($url, \'my-publish-post_\' . $post->ID) . "\'>Publish</a>";
以下函数执行一些检查,发布帖子,然后将您重新定向到发布的帖子。
//Run the publish function only if the action variable is correct.
if(isset($_REQUEST[\'action\']) && $_REQUEST[\'action\']==\'mypublish\')
add_action(\'init\',\'my_publish_draft\');
function my_publish_draft(){
//Get the post\'s ID.
$post_id = (isset($_REQUEST[\'post\']) ? (int) $_REQUEST[\'post\'] : 0);
//No post? Oh well..
if(empty($post_id))
return;
$nonce = $_REQUEST[\'_wpnonce\'];
//Check nonce
if (! wp_verify_nonce($nonce,\'my-publish-post_\'.$post_id))
wp_die(\'Are you sure?\');
//Check user permissions
if (!current_user_can(\'publish_posts\'))
wp_die("You can\'t do that");
//Any other checks you may wish to perform..
//Publish post
wp_publish_post( $post_id );
//Redirect to published post
$redirect = get_permalink($post_id);
wp_redirect($redirect);
exit;
}
如注释中所述,使用此方法时不会设置段塞。WordPress不会自动给草稿贴一个slug,但只有当您单击“发布”时才会自动给草稿贴一个slug。以上内容不会更新slug,只会更新状态。要解决这个问题,可以在创建拔模时手动设置slug。
或者,您可以更换wp_publish_post
使用以下代码(稍微重一点,稍微难看一点)呼叫:
$post = get_post($post_id,ARRAY_A);
$post[\'post_status\'] =\'publish\';
wp_update_post($post);