Просматривать ассоциативный массив значений при создании тестовых данных для активации нового плагина WordPress - PullRequest
0 голосов
/ 24 декабря 2018

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

public static function installData()
    {
        global $wpdb;

        $authorID = (get_current_user_id()) ? get_current_user_id() : '1';
        $demoData = [
            0 => [
                'id' => '122',
                'title' => 'Lorem ipsum dolor sit amet',
                'url' => 'https://www.efsnetworks.com',
                'image' => 'http://www.news.ucsb.edu/sites/www.news.ucsb.edu/files/styles/article_horizontal/public/images/2018/Cubic%20salt%20crystal%20aggregate.jpg',
                'type' => 'small-block',
                'authorID' => $authorID,
                'dateCreated' => '2016-09-23 21:57:34',
                'lastUpdate' => null,
                'publishStatus' => '0'
            ],
            1 => [
                'id' => '123',
                'title' => 'Ut enim ad minim veniam, quis nostrud',
                'url' => 'https://www.google.com',
                'image' => 'https://cdn.britannica.com/s:500x350/66/143166-049-4900844D.jpg',
                'type' => 'small-block',
                'authorID' => $authorID,
                'dateCreated' => '2017-07-23 22:02:34',
                'lastUpdate' => null,
                'publishStatus' => '0'
            ],
            2 => [
                'id' => '124',
                'title' => 'Duis aute irure dolor in reprehenderit in voluptate',
                'url' => 'https://www.disruptivetechnology.com',
                'image' => 'https://vignette.wikia.nocookie.net/forgottenrealms/images/1/13/Rock_crystal.jpg',
                'type' => 'small-block',
                'authorID' => $authorID,
                'dateCreated' => '2018-12-23 22:03:34',
                'lastUpdate' => null,
                'publishStatus' => '0'
            ]
        ];
        $table_name = $wpdb->wpAdvertisementAds;

        foreach ($demoData as $index=>$values) {
            foreach ($values as $key=>$value) {
                $wpdb->insert(
                    $table_name,
                    [ $key => $value]
                );
            }
        }
    }

При этом я вижу, что данные добавляют новую строку из-за предложения $wpdb-insert внутри вложенного foreach,Тем не менее, когда я перемещаю это наружу в первый foreach, данные не добавляются.В конце концов мне придется переписать его следующим образом:

public static function installData()
    {
        global $wpdb;

        $authorID = (get_current_user_id()) ? get_current_user_id() : '1';
        $table_name = $wpdb->wpAdvertisementAds;

        $wpdb->insert(
            $table_name,
            [
                'id' => '122',
                'title' => 'Lorem ipsum dolor sit amet',
                'url' => 'https://www.efsnetworks.com',
                'image' => 'http://www.news.ucsb.edu/sites/www.news.ucsb.edu/files/styles/article_horizontal/public/images/2018/Cubic%20salt%20crystal%20aggregate.jpg',
                'type' => 'small-block',
                'authorID' => $authorID,
                'dateCreated' => '2016-09-23 21:57:34',
                'lastUpdate' => null,
                'publishStatus' => '0'
            ]
        );
        $wpdb->insert(
            $table_name,
            [
                'id' => '123',
                'title' => 'Ut enim ad minim veniam, quis nostrud',
                'url' => 'https://www.google.com',
                'image' => 'https://cdn.britannica.com/s:500x350/66/143166-049-4900844D.jpg',
                'type' => 'small-block',
                'authorID' => $authorID,
                'dateCreated' => '2017-07-23 22:02:34',
                'lastUpdate' => null,
                'publishStatus' => '0'
            ]
        );
        $wpdb->insert(
            $table_name,
            [
                'id' => '124',
                'title' => 'Duis aute irure dolor in reprehenderit in voluptate',
                'url' => 'https://www.disruptivetechnology.com',
                'image' => 'https://vignette.wikia.nocookie.net/forgottenrealms/images/1/13/Rock_crystal.jpg',
                'type' => 'small-block',
                'authorID' => $authorID,
                'dateCreated' => '2018-12-23 22:03:34',
                'lastUpdate' => null,
                'publishStatus' => '0'
            ]
        );
    }

Есть ли у вас какие-либо советы, как заставить этот метод работать с помощью простой команды foreach моих данных.Таким образом, я мог бы переместить набор данных за пределы php в файл json или любой другой источник файла (не связанный, но мог бы использоваться для будущего использования).

1 Ответ

0 голосов
/ 24 декабря 2018

Не думаю, что вам нужен внутренний цикл foreach.Ваш код должен быть:

foreach ($demoData as $value) {
    $wpdb->insert(
        $table_name,
        $value
    );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...