web-dev-qa-db-ja.com

から投票のIDを取得 WP データベース

だから私はphpステートメントがあります:

特定のフォームが送信されるたびに1ずつ増加する番号を含む$latest_pollsid。私はこの声明をいくつかの機能に読んでいます、そして、これらの機能のうちの1つのために私はそれが現在で値をとらえて、更新しないことを望みます。基本的には、関数の実行時に文を読み、数値を取得して、文自体の値が変わっても将来も変わらずに表示するようにします。 PHPでこれを行う方法はありますか?


シナリオ:

ユーザーがショートコードで行ったばかりの投票を埋め込む新しい投票をユーザーが作成したときに、バックグラウンドで投稿を作成しています。ショートコードは一般的に最新のアンケートを使用します。つまり、今アンケートを作成して明日アンケートを作成した場合、明日両方の投稿に明日のアンケートが表示されます。今日の投稿では今日の投票は表示されません。

バックグラウンド投稿を作成するために使用されるコード:

function programmatically_create_post() {

    // Initialize the page ID to -1. This indicates no action has been taken.
    $post_id = -1;

    // Setup the author, slug, and title for the post
    $author_id = 1;
    $slug = 'example-post';
    $title = 'My Example Background Post';

    // If the page doesn't already exist, then create it
    if( null == get_page_by_title( $title ) ) {

        // Set the post ID so that we know the post was created successfully
        $pollq_question = wp_kses_post( trim( $_POST['pollq_question'] ) );
        $post_id = wp_insert_post(
            array(
                'comment_status'    =>  'open',
                'ping_status'       =>  'closed',
                'post_author'       =>  $author_id,
                'post_name'         =>  $slug,
                'post_title'        =>  $pollq_question,
                'post_status'       =>  'publish',
                'post_type'         =>  'post',
                'post_content'      =>  '[poll id="' . $latest_pollid . '"]'
            )
        );

    // Otherwise, we'll stop
    } else {

            // Arbitrarily use -2 to indicate that the page with the title already exists
            $post_id = -2;

    } // end if

} // end programmatically_create_post
add_filter( 'after_setup_theme', 'programmatically_create_post' );

PHP関数コード:

function polls_latest_id() {
    global $wpdb;
    $poll_id = $wpdb->get_var("SELECT pollq_id FROM $wpdb->pollsq WHERE pollq_active = 1 ORDER BY pollq_timestamp DESC LIMIT 1");
    return intval($poll_id);
}

ポールコード管理

このページでは、正しいIDを使用してすべての投票を一覧表示していますが、PHPをよく知っていなくても、私はこれを解釈するのに苦労しています。

echo "<tr id=\"poll-$poll_id\" $style>\n";
                    echo '<td><strong>'.number_format_i18n($poll_id).'</strong></td>'."\n";
                    echo '<td>';
                    if($current_poll > 0) {
                        if($current_poll == $poll_id) {
                            echo '<strong>'.__('Displayed:', 'wp-polls').'</strong> ';
                        }
                    } elseif($current_poll == 0) {
                        if($poll_id == $latest_poll) {
                            echo '<strong>'.__('Displayed:', 'wp-polls').'</strong> ';
                        }
                    } else if(in_array($poll_id, $multiple_polls)) {
                            echo '<strong>'.__('Displayed:', 'wp-polls').'</strong> ';
                    }
1
dwinnbrown

私が発見した最初の問題は、あなたが$latest_pollidを設定していないことですが、それでもそれを投票IDとして使用しようとしているということです。値を設定するには、その行の前に$latest_pollid = polls_latest_id();のようなものが必要です。

あなたがやっていることに大きな問題があります。 after_setup_themeにフックすると、コードはすべてのページロードで実行されます。あなたはそれの大部分を '私の例のバックグラウンド投稿'と題したページに制限しています、しかし私はあなたがあなたが作成しているクイズと投稿の間の切断を得ているとまだ疑います。クイズプラグインがあなたが使えるフックを持っていないか、おそらく$_POSTデータが関連しているかもしれない情報を持っていない限り、私はこれをどのように解決するかわかりません。

1
s_ha_dum