web-dev-qa-db-fra.com

Obtenir la valeur de la colonne dans la table des plugins

J'utilise le plug-in Calendrier d'événement tout-en-un de Time.ly. J'essaie d'obtenir une valeur de la table wp_ai1ec_event dans la colonne intitulée "end". Je veux obtenir ceci basé sur le post_id. Comme il s'agit d'une table personnalisée, post_id est identique à celle de la table post. J'ai essayé tout ce que je peux penser pour obtenir cette valeur. Cela fait des jours que j'y travaille, en essayant tous les résultats des recherches Google. Rien ne semble fonctionner. J'ai essayé:

$ event_date = get_post_meta ($ HitID, 'end', true);

et

$ event_date = mysql_query ("SELECT fin FROM wp_ai1ec_event WHERE post_id = '". $ HitID. "'");

Parmi beaucoup d'autres choses. Ceux-ci semblaient être les plus proches.

Rien que j'ai essayé fonctionne. Je n'ai tout simplement pas assez d'auto-apprentissage PHP pour que cela fonctionne. Toute aide serait appréciée.

Le but est d’obtenir la valeur dans la colonne "end" de la table "wp_ai1ec_event" en fonction du post_id, dans ce cas $ HitID.

1
Kirk

Ces gros plugins sont souvent "trop ​​cool" pour utiliser post_meta/post_custom - c’est la raison pour laquelle vous n’avez pas pu récupérer les données via le moyen habituel du plugin de stocker des informations supplémentaires. La documentation de développement pour ai1ec est sombre, je n’ai trouvé aucune fonction permettant de simplifier la tâche que vous recherchiez (bien qu’elles existent dans le code source si elles ont été parcourues assez longtemps).

La table que vous suivez est wp_ai1ec_events (pluriel. Pas wp_ai1ec_event).

Utiliser un outil comme phpmyadmin est un excellent moyen de construire vos requêtes à l’avance, puis de faire le travail dans votre code php.

J'ai pu récupérer les informations de date end avec les éléments suivants:

add_action('init','myplugin_get_alic_enddate');
function myplugin_get_alic_enddate() {
    global $wpdb;

    $HitID = 537; // wtv
    $query = "SELECT end FROM `{$wpdb->prefix}ai1ec_events` WHERE `post_id` = {$HitID}";
    $event = $wpdb->get_row($query); 

    //echo $event->end;
    //echo date(get_option('date_format'),$event->end);
}

Cela ne fait rien avec les événements qui sont des événements toute la journée ou ceux sans date de fin définie (évidemment).

UPDATE

Pour refléter le code posté par OP dans une autre réponse

add_filter('relevanssi_hits_filter', 'rlv_remove_expired');

function rlv_remove_expired($hits) {
    global $wpdb;

    $non_expired = array();
    $now = time();

    foreach ($hits[0] as $hit) {

        $HitID = $hit->ID;
        $Result_PostType = get_post_type($HitID);

        if( $Result_PostType == 'ai1ec_event' ){

            echo "<pre>Made it to: if(Result_PostType=='ai1ec_event')</pre>";

            $query = "SELECT end FROM {$wpdb->prefix}ai1ec_events WHERE post_id = {$HitID}";
            $row = $wpdb->get_row($query); 

            if($wpdb->last_error !== '') {
                echo "<pre> MYSQL ERROR:\n";
                $wpdb->print_error();
                echo "</pre>";
            }

            $end_date = $row->end;

            echo "<pre>In Function.\n End Date: ".$end_date."\n HitID: ".$HitID."</pre>";

            if($end_date >= $now)
                $non_expired[] = $hit;

        } else {
            $end_date = 0;
            $non_expired[] = $hit;
        }

        echo "<pre>Hit ID: ".$HitID."\n End Date: ".$end_date."\n Now: ".$now."\n Post Type: ".$Result_PostType."</pre>";
    } // end foreach

    $hits[0] = $non_expired;
    return $hits;
}
1
David Sword

Merci pour cela. Beaucoup plus loin que j'ai eu. Voici mon code de filtre complet. Ce code a pour but de faire en sorte que seuls les événements non expirés apparaissent dans la recherche. J'ai mis votre code, David Sword, mais je devais en commenter une partie pour pouvoir s'exécuter. De plus, dans votre code (ou comment il a été marqué comme code par stackexchange), vous avez le "'" comme "` "qui a généré une erreur, je les ai donc changés en guillemets simples normaux.

        add_filter('relevanssi_hits_filter', 'rlv_remove_expired');function rlv_remove_expired($hits) {
$non_expired = array();
$now = time();
foreach ($hits[0] as $hit) {
    $HitID=$hit->ID;
    $Result_PostType=get_post_type($HitID);
    if($Result_PostType=='ai1ec_event'){
        echo "<strong>Made it to: if(Result_PostType=='ai1ec_event')</strong><br>";

        //add_action('init','myplugin_get_alic_enddate');
        //function myplugin_get_alic_enddate() {
            global $wpdb;
            $query = "SELECT end FROM '{$wpdb->prefix}ai1ec_events' WHERE 'post_id' = {$HitID}";
            $end_date = $wpdb->get_row($query); 
            echo "<strong>In Function.<br>End Date: ".$end_date."<br>HitID: ".$HitID."</strong><br>";
        //}
        if($end_date >= $now){
            $non_expired[] = $hit;
        }
    }else{
        $end_date = 0;
        $non_expired[] = $hit;
    }
        echo "<p>Hit ID: ".$HitID."<br>End Date: ".$end_date."<br>Now: ".$now."<br>Post Type: ".$Result_PostType."</p>";
           }
           $hits[0] = $non_expired;
           return $hits;
        }
0
Kirk