3

[http://wordpress.stackexchange.comのs_ha_dumによる解決策]

投稿設定で入力したパスワードに基づいて、ユーザーを特定の投稿に誘導しようとしています。私はほとんど機能しているコードを持っています:

ページ上のフォーム:

<form method="post" action="">
  <input type="password" name="passwordfield">
  <input type="hidden" name="homepagepassword" value="1">
  <input type="submit" value="Submit">
</form>

Functions.phpのコード

function doPasswordStuff(){
    if(isset($_POST['homepagepassword'])){
    $post_password = $_POST['passwordfield'];
    $post_id = $wpdb->get_var( $wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE post_password = %s", $post_password) );
    $q = new WP_Query( 'p=$post_id' );
    if($q->have_posts()){
        while($q->have_posts()){
            $q->the_post();
            wp_redirect(get_permalink());
            die();
        }
    } else {
        // oh dear, there isnt a post with this 'password', put a redirect to a fallback here
        wp_redirect('http://www.google.com');
        die();
    }
    wp_reset_query();
    }
}
add_action('init','doPasswordStuff');

ただし、次の行で致命的なエラー(致命的なエラー:非オブジェクトでのメンバー関数get_var()の呼び出し)が発生しています。

$ post_id = $ wpdb-> get_var($ wpdb-> prepare( "SELECT ID FROM $ wpdb-> posts WHERE post_password =%d"、$ post_password));

誰かが見てくれたら本当に感謝します:)ありがとう!

4

1 に答える 1

11

この前に$wpdbをグローバル化する

global $wpdb

$post_id = $wpdb->get_var( $wpdb->prepare("SELECT id FROM $wpdb->posts WHERE post_password = %s", $post_password) ); $q = new WP_Query( 'p=$post_id' );

また、小文字のテーブル/列名を使用することをお勧めします

そして、そのようにリダイレクトします

<?php if ( $q->have_posts() ) : while ( $q->have_posts() ) : $q->the_post(); ?>

wp_redirect( the_permalink() );

<?php endif;?>

また、wp_redirect()の2番目のパラメーターとしてhttpステータスコードを使用します。これは、HTTPステータスコードに役立つ可能性があります

于 2013-03-21T13:35:00.510 に答える