发布时删除旧的粘性帖子

时间:2015-03-06 作者:Leon S.

我正在优化WordPress网站。为此,我创建了一个函数来删除旧的粘性帖子。此功能在某些情况下无法正常工作。有时会删除所有粘性(因此不会设置粘性)。有人知道这是什么原因吗?

add_action( \'publish_post\', \'wf_clean_sticky\', 10, 2);
function wf_clean_sticky($post_id, $post)
{
    //disable function on autosave
    if (defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE)
    {
        return;
    }

    // check if current post is sticky
    if(isset($_POST[\'sticky\']) && ($_POST[\'sticky\'] == \'sticky\'))
    {
        $array = array($post_id);
        update_option(\'sticky_posts\', $array);
        unset($_POST[\'sticky\']);
    }
}
我已经尝试挂接其他函数(例如save\\u post和edit\\u post),并创建一个用于调试的日志函数来存储$\\u post,以查看是否有任何错误,但我不明白。。

2 个回复
最合适的回答,由SO网友:TheDeadMedic 整理而成

不要unset( $_POST[\'sticky\'] );, 别管它了。否则edit_post() 将在您刚“粘贴”完后立即“取消粘贴”您的帖子;)

SO网友:mrwweb

我知道发布插件作为解决方案有点不好,但是There Can Only Be One plugin 似乎正是你想要的。

它使用的解决方案(这几乎就是整个插件):

add_action( \'draft_to_publish\', \'only_one_sticky\' );
add_action( \'future_to_publish\', \'only_one_sticky\' );
add_action( \'new_to_publish\', \'only_one_sticky\' );
add_action( \'pending_to_publish\', \'only_one_sticky\' );
add_action( \'publish_to_publish\', \'only_one_sticky\' );

function only_one_sticky( $post_id ) {
    if( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) {
        return;
    }
    if ( ! wp_is_post_revision( $post_id ) ) {
        $post_id = $post_id->ID;
    }
    $sticky = ( isset( $_POST[\'sticky\'] ) && $_POST[\'sticky\'] == \'sticky\' ) || is_sticky( $post_id );
    if( $sticky ) {
        $sticky_posts = array();
        $sticky_posts_list = get_option( \'sticky_posts\', array() );

        // The Post IDs are stored in the options table as a single list, so we need to construct a new list with the future posts, plus the newly-published sticky post.
        $new_sticky_posts_list = array();
        foreach ($sticky_posts_list as $sticky_post) {
            $postStatus =  get_post_status ( $sticky_post );
            if ( get_post_status ( $sticky_post ) != \'publish\' || $sticky_post == $post_id ) {
                array_push( $new_sticky_posts_list, $sticky_post );
            }
        }
        update_option( \'sticky_posts\', $new_sticky_posts_list );
    }
}

结束

相关推荐