Как получить данные о ценах из этого сериализованного массива PHP в базе данных - PullRequest
1 голос
/ 29 июня 2019

Привет, я делаю сайт по аренде вилл на WordPress и пытаюсь составить таблицу цен по сезонам. Цены в базе данных так же сериализуются, и я хотел бы рисовать цены отдельно с помощью шорткода. Есть кто-то, кто может помочь? как сделать этот шорткод?

это значения виллы в БД

('meta_id' => '3307','post_id' => '426','meta_key' => 'mphb_season_prices','meta_value' => 'a:12:{i:0;a:2:{s:6:"season";s:3:"252";s:5:"price";a:4:{s:7:"periods";a:1:{i:0;i:1;}s:6:"prices";a:1:{i:0;d:422;}s:17:"enable_variations";b:0;s:10:"variations";a:0:{}}}i:1;a:2:{s:6:"season";s:3:"253";s:5:"price";a:4:{s:7:"periods";a:1:{i:0;i:1;}s:6:"prices";a:1:{i:0;d:422;}s:17:"enable_variations";b:0;s:10:"variations";a:0:{}}}i:2;a:2:{s:6:"season";s:3:"254";s:5:"price";a:4:{s:7:"periods";a:1:{i:0;i:1;}s:6:"prices";a:1:{i:0;d:422;}s:17:"enable_variations";b:0;s:10:"variations";a:0:{}}}i:3;a:2:{s:6:"season";s:3:"255";s:5:"price";a:4:{s:7:"periods";a:1:{i:0;i:1;}s:6:"prices";a:1:{i:0;d:493;}s:17:"enable_variations";b:0;s:10:"variations";a:0:{}}}i:4;a:2:{s:6:"season";s:3:"256";s:5:"price";a:4:{s:7:"periods";a:1:{i:0;i:1;}s:6:"prices";a:1:{i:0;d:493;}s:17:"enable_variations";b:0;s:10:"variations";a:0:{}}}i:5;a:2:{s:6:"season";s:3:"257";s:5:"price";a:4:{s:7:"periods";a:1:{i:0;i:1;}s:6:"prices";a:1:{i:0;d:708;}s:17:"enable_variations";b:0;s:10:"variations";a:0:{}}}i:6;a:2:{s:6:"season";s:3:"258";s:5:"price";a:4:{s:7:"periods";a:1:{i:0;i:1;}s:6:"prices";a:1:{i:0;d:893;}s:17:"enable_variations";b:0;s:10:"variations";a:0:{}}}i:7;a:2:{s:6:"season";s:3:"259";s:5:"price";a:4:{s:7:"periods";a:1:{i:0;i:1;}s:6:"prices";a:1:{i:0;d:893;}s:17:"enable_variations";b:0;s:10:"variations";a:0:{}}}i:8;a:2:{s:6:"season";s:3:"260";s:5:"price";a:4:{s:7:"periods";a:1:{i:0;i:1;}s:6:"prices";a:1:{i:0;d:708;}s:17:"enable_variations";b:0;s:10:"variations";a:0:{}}}i:9;a:2:{s:6:"season";s:3:"261";s:5:"price";a:4:{s:7:"periods";a:1:{i:0;i:1;}s:6:"prices";a:1:{i:0;d:565;}s:17:"enable_variations";b:0;s:10:"variations";a:0:{}}}i:10;a:2:{s:6:"season";s:3:"262";s:5:"price";a:4:{s:7:"periods";a:1:{i:0;i:1;}s:6:"prices";a:1:{i:0;d:465;}s:17:"enable_variations";b:0;s:10:"variations";a:0:{}}}i:11;a:2:{s:6:"season";s:3:"263";s:5:"price";a:4:{s:7:"periods";a:1:{i:0;i:1;}s:6:"prices";a:1:{i:0;d:422;}s:17:"enable_variations";b:0;s:10:"variations";a:0:{}}}}')

я использую этот шорткод; (но это не работает)

function fiyatlar_shortcode_function() {
$var    = get_post_meta( get_the_ID(), 'mphb_season_prices', true);
$var    = unserialize($var);
$season = 252; // 252 january, 253 february, 254 march...

   $foo = array_column($var, 'price', 'season');

}          

print_r($foo[$season]['prices'][0]);

add_shortcode( 'fiyat_tablosu', 'fiyatlar_shortcode_function' );

- Предложения -

Предложение 1)

function fiyatlar_shortcode_function() {
$var    = get_post_meta( get_the_ID(), 'mphb_season_prices', true);
$var    = unserialize($var);
$season = 252; // 252 january, 253 february, 254 march...
    $foo = array_column($var, 'price', 'season');
return ($foo[$season]['price']['prices']); 
}

add_shortcode( 'fiyat_tablosu', 'fiyatlar_shortcode_function' );

//Output: Error Message;
Warning: array_column() expects parameter 1 to be array, boolean given in /home/

Предложение 2)

function fiyatlar_shortcode_function() {
$var = get_post_meta( 426, 'mphb_season_prices', true); 
$season = 252; // 252 january, 253 february, 254 march...
    $foo = array_column($var, 'price', 'season');
return $foo;
}

add_shortcode( 'fiyat_tablosu', 'fiyatlar_shortcode_function' );

//Output: Array

1 Ответ

0 голосов
/ 29 июня 2019

Попробуйте ниже и дайте мне знать.

function fiyatlar_shortcode_function() {
    $var    = get_post_meta( get_the_ID(), 'mphb_season_prices', true);
    $var    = unserialize($var);
    $season = 252; // 252 january, 253 february, 254 march...

       foreach ($var as $key=> $value){
                $season_array[] = $var[$key]['season']; 
                $prices_array[]=  $var[$key]['price']['prices'][0];
                $array_combo  = array_combine($season_array,$prices_array);

            }          

        return $array_combo[$season];
        }

        add_shortcode( 'fiyat_tablosu', 'fiyatlar_shortcode_function' );

Fiddle

http://phpfiddle.org/main/code/k9gq-4abf

...