web-dev-qa-db-fra.com

Obtenir l'identifiant du sondage de WP base de données

J'ai donc une déclaration php:

$latest_pollsid qui contient un nombre qui augmente de 1 chaque fois qu'un formulaire spécifique est soumis. Je lis cette déclaration en plusieurs fonctions et je voudrais qu’une de ces fonctions saisisse la valeur actuelle et ne mette pas à jour. Essentiellement, je veux qu’il lise l’instruction lorsque la fonction est exécutée, saisisse le nombre, puis l’affiche sans que cela change, même lorsque la valeur de l’instruction change. Est-il possible de faire cela avec PHP?


Le scénario:

Je crée une publication en arrière-plan lorsque l'utilisateur crée un nouveau sondage qui incorpore le sondage qu'il vient de faire avec un shortcode. Le shortcode utilise généralement le dernier sondage, ce qui signifie généralement que si je crée un sondage maintenant et le crée demain, les deux messages de demain afficheront un sondage demain. La poste d'aujourd'hui ne montrera pas le sondage d'aujourd'hui.

Code utilisé pour créer le post de fond:

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' );

CODE DE FONCTION 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);
}

Gérer le code

Cette page réussit à lister tous les sondages avec les identifiants corrects mais sans savoir PHP très bien, j'ai du mal à interpréter ceci:

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

Le premier problème que j'ai identifié est que vous ne définissez pas $latest_pollid mais que vous essayez néanmoins de l'utiliser comme identifiant de sondage. Vous devriez avoir quelque chose comme: $latest_pollid = polls_latest_id(); avant cette ligne afin de définir la valeur.

Ce que vous faites cependant pose de gros problèmes. Accrocher à after_setup_theme signifie que votre code est exécuté à chaque chargement de page. Vous limitez l'essentiel à la page intitulée "Mon exemple de message de base", mais je soupçonne toujours que vous obtenez une déconnexion entre le quiz et le message que vous créez. Je ne sais pas comment résoudre ce problème à moins que le plug-in de test ait un crochet que vous pouvez utiliser, ou peut-être que les données $_POST contiennent des informations qui pourraient être pertinentes.

1
s_ha_dum