修改前端删除按钮以发布挂起的帖子

时间:2012-02-25 作者:Bennett

我发现这个有用的片段可以在前端创建删除帖子链接:

<?php if (current_user_can(\'edit_post\', $post->ID)) 
    echo "<a href=\'" . wp_nonce_url("/wp-admin/post.php?action=delete&amp;post=$id", \'delete-post_\' . $post->ID) . "\'>Delete</a>" ?>
我想知道的是,是否有办法修改此代码并创建一个补充发布链接,该链接将从前端发布一篇挂起的帖子。我尝试了以下方法,但没有成功。。。

<?php if (current_user_can(\'edit_post\', $post->ID)) 
    echo "<a href=\'" . wp_nonce_url("/wp-admin/post.php?action=publish&amp;post=$id", \'publish-post_\' . $post->ID) . "\'>Publish</a>" ?>
如果有人知道前端发布帖子链接是否可能或如何可能,以及它是否可以从删除帖子链接派生出来,那将非常有用。

非常感谢。

1 个回复
最合适的回答,由SO网友:Stephen Harris 整理而成

由于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);

结束

相关推荐

PUBLISH_POST的添加操作不起作用

我正在开发一个个人投票插件,我不打算公开发布它,因为我还在学习WP。一般来说,你可以投票给帖子“向上”或“向下”。我有两个表,一个收集IP(不允许多次投票),另一个名为“post\\u votes”的表收集每个帖子的投票数。当我发布一篇新帖子时,它的ID存储在“post\\u votes”中,我可以在人们投票时更新每个帖子的“up”、“down”。这在几天前奏效了。我做了一些修改,但我不明白为什么它不再工作了。。这是目前为止的全部代码。。我仍然需要实施一些安全预防措施。<?php /*&#x