0

我有一个编程练习,我想检查到目前为止我所做的是否是基于设置查询字符串更新帖子标题的最佳方式。在下面的示例中,我创建了一个链接来更新帖子并使用随机数验证来源。我使用了 template_redirect 动作,因为它只触发一次,而wpandparse_query动作似乎触发了多次。GET 请求可以来自表单提交或链接点击,但我只附上了链接示例,但代码应该适用于这两种情况。

function update_post_title() {
    global $wpdb;

    $post_id = get_query_var( 'post_id', 0 );
    $post_title = get_query_var( 'post_title', '' );
    $post_nonce = get_query_var( 'update_post_title_nonce', '' );

    if( ! empty( $post_title ) AND $post_id > 0 ) {

        if ( ! wp_verify_nonce( $post_nonce, 'update_post_title_action' ) ) {
            wp_die( 'Security check failed' );
        }

        $post_title = sanitize_text_field( $post_title );
        //$post_slug = sanitize_title_with_dashes( $post_title );
        $post_id = intval( $post_id );

        $rows_affected = $wpdb->update( 
                            $wpdb->posts, 
                            array( 'post_title' => $post_title ), 
                            array( 'ID' => $post_id ), 
                            array( '%s'), 
                            array( '%d' ) 
                        );
    }
}

function add_custom_query_vars( $public_query_vars ) {
    $public_query_vars[] = 'post_id';
    $public_query_vars[] = 'post_title';
    $public_query_vars[] = 'update_post_title_nonce';

    return $public_query_vars;
}

add_filter( 'query_vars', 'add_custom_query_vars' );
add_action( 'template_redirect', 'update_post_title' );

示例链接生成。

global $post;

<a href="<?php echo wp_nonce_url( add_query_arg( array( 
                                                'post_id' => 123, 
                                                'post_title' => 'The New Title', ), 
                                            site_url( $post->post_name ) ), 
                                            'update_post_title_action', 
                                            'update_post_title_nonce' ); 
    ?>">Click To Update</a>
4

0 回答 0