Wordpress Query formcraft таблицы эхо-полей на экран - PullRequest
0 голосов
/ 13 июня 2019

Первая работа с Wordpress. Я хочу получить случайную строку из таблицы formcraft, чтобы я мог опубликовать победителя розыгрыша из набора регистраций на странице.

Содержимое, которое я хочу получить из таблицы formcraft, хранится в столбце с именем content в таблице с именем wp_formcraft_3_submissions:

[
{\"label\":\"Name\",\"value\":\"Annette\",\"identifier\":\"field1\",\"type\":\"oneLineText\",\"page\":1,\"page_name\":\"Step 1\",\"width\":\"100%\",\"altLabel\":\"Name\"},
{\"label\":\"Company Name\",\"value\":\"My Co \",\"identifier\":\"field3\",\"type\":\"oneLineText\",\"page\":1,\"page_name\":\"Step 1\",\"width\":\"100%\",\"altLabel\":\"Company Name\"},
{\"label\":\"Email\",\"value\":\"annette@email.com\",\"identifier\":\"field6\",\"type\":\"email\",\"page\":1,\"page_name\":\"Step 1\",\"width\":\"100%\",\"altLabel\":\"Email\"}
]

Я пытаюсь выбрать случайную строку, а затем опубликовать name, company name.

Я застрял, и wordpress не регистрирует никаких ошибок, хотя я включил регистрацию ошибок. Я делаю это через shortcode. Для начала я хотел бы отобразить содержимое на экране, но в конечном итоге отобразить только три поля.

function wa_awards_winner() {

    global $wpdb;

    $sql = $wpdb->query("
    SELECT *
    FROM wp_formcraft_3_submissions
    ORDER BY RAND()
    LIMIT 1
    ");

    $result = $wpdb->get_results( $sql );

    if ( ! $result ) { return false; }

    $winner = json_encode($result[0]->content);

    echo $winner;

}

add_shortcode( 'get_wa_awards_winner', 'wa_awards_winner' );

Пока я не пытаюсь получить эти значения, но это не работает:

// NAME
echo '<h3 class="col">' . $winner[0][0] . '</h3>';

// COMPANY NAME
echo '<h3 class="col">' . $winner[1][0] . '</h3>';

// EMAIL
echo '<h3 class="col">' . $winner[2][0] . '</h3>';

Ценю любую помощь. Спасибо.


Попытка предложения ниже, как это:

$winner = json_decode(stripslashes($result[0]->content),true);

echo '<div style="color:white;">' . print_r($winner, true) . '</div>';

Я получаю;

[13-Jun-2019 12:28:25 UTC] PHP Notice:  Undefined offset: 0 in /var/www/site.com/wp-content/themes/dp-click-Child/functions.php on line 30
[13-Jun-2019 12:28:25 UTC] PHP Notice:  Trying to get property 'content' of non-object in /var/www/site.com/wp-content/themes/dp-click-Child/functions.php on line 30

Это работает благодаря предложению ниже:

$sql = "
    SELECT *
    FROM wp_formcraft_3_submissions
    ORDER BY RAND()
    LIMIT 1
";

$result = $wpdb->get_results( $sql );

Затем я пытаюсь получить доступ к информации:

$winner = json_decode(stripslashes($result[0]->content),true);

echo var_dump($winner);

echo '<h3 style="color: white;">NAME: ' . $winner[0]["Name"] . '</h3>';
echo '<h3 style="color: white;">COMPANY: ' . $winner[1]["Company Name"] . '</h3>';
echo '<h3 style="color: white;">EMAIL: ' . $winner[2]["Email"] . '</h3>';

Возвращает var_dump:

array(3) { [0]=> array(8) { ["label"]=> string(4) "Name" ["value"]=> string(14) "Annette" ["identifier"]=> string(6) "field1" ["type"]=> string(11) "oneLineText" ["page"]=> int(1) ["page_name"]=> string(6) "Step 1" ["width"]=> string(4) "100%" ["altLabel"]=> string(4) "Name" } [1]=> array(8) { ["label"]=> string(12) "Company Name" ["value"]=> string(19) "My Company" ["identifier"]=> string(6) "field3" ["type"]=> string(11) "oneLineText" ["page"]=> int(1) ["page_name"]=> string(6) "Step 1" ["width"]=> string(4) "100%" ["altLabel"]=> string(12) "Company Name" } [2]=> array(8) { ["label"]=> string(5) "Email" ["value"]=> string(20) "annette@email.com" ["identifier"]=> string(6) "field6" ["type"]=> string(5) "email" ["page"]=> int(1) ["page_name"]=> string(6) "Step 1" ["width"]=> string(4) "100%" ["altLabel"]=> string(5) "Email" } }

Но мои переменные возвращаются пустыми:

NAME:
COMPANY NAME:
EMAIL:

1 Ответ

1 голос
/ 13 июня 2019

Сначала вам нужно сделать "полоску" и превратить данную строку в данные JSON. Тогда вам нужно его декодировать, а не кодировать.

Вот оно:

 $winner = json_decode(stripslashes($result[0]->content),true);
 echo $winner[0]["value"];

И еще одна вещь. Запрос $ wpdb-> нельзя использовать внутри get_results. Удалите их и используйте вместо этого

   $sql = "
    SELECT *
    FROM wp_formcraft_3_submissions
    ORDER BY RAND()
    LIMIT 1
    ";

   $result = $wpdb->get_results( $sql );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...