0

プログラミングの演習があり、これまでに行ったことが、クエリ文字列の設定に基づいて投稿のタイトルを更新する最良の方法であるかどうかを確認したかった. 以下の例では、投稿を更新するためのリンクを作成し、オリジンを nonce で検証します。私は 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