后元表格中的WordPress格式json

时间:2018-05-29 作者:Sushivam

如何格式化meta_value 列的jsonpost_meta wordpress中的表,以仅获取正确的值。

我有这样的价值:

$posttype=  Mage::helper(\'wordpress\')->getPostType2();
$posttype = explode(\',\',$posttype);
echo \'Post type:\';

echo \'<pre>\';print_r($posttype);

Output:

数组([0]=>a:12:{s:3:“键”;s:19:“字段57bdd83367bb1”;s:5:“标签”;s:4:“类型”;s:4:“名称”;s:4:“类型”;s:4:“类型”;s:4:“选择”;s:6:“选择”;s:12:“说明”;s:0:;s:8:“必需”;s:1:“0”;s:7:“选择”;a:7:{s:7:“文章”;s:9:“博客帖子”;s:9:“博客帖子”;s:16:“艺术家和制作者”制沙工:s:6:“视频”;s:6:“视频”;s:12:“新闻界”;s:12:“新闻界”;s:14:“你知道吗?”;s: 12:“Dod\\u you\\u know”;s: 14:“词汇表A-Z”;s: 8:“词汇表”;}s: 13:“default\\u值”;s: 39:“blog\\u post in\\u the\\u press did\\u you\\u know”;s: 10:“allow\\u null”;s: 1:“0”;s: 8:“多个”;s: 1:“1”;s: 17:“条件逻辑”;a: 3:{s:6:“状态”;s:1:“0”;s:5:“规则”;a:1:{i:0;a:2:{s:5:“字段”;s:4:“空”;s:8:“运算符”;s:2:“=”;}}}s: 8:“allorany”;s: 3:“全部”;}s: 8:“订单号”;i: 0;})

我只需要得到下拉列表中的值

Article

Blog Post

Artists & Makers

<div class="category-list">
            <?php // echo $this->__(\'All Types\') ?>
            <select id="blogcat">
                <option><?php echo $this->__(\'Article Type\') ?></option>
                <option value=""><?php echo $this->__(\'All Types..\') ?></option>
                <option value="<?php echo $posttype;?>"> </option>
                <?php foreach($posttype as $value) { ?>
                        <?php $namecheck = preg_replace(\'/\\s*/\', \'\', strtolower($value[\'name\']));
                        if ($value[\'slug\'] != \'artists-and-makers\'&&$namecheck != \'artistsandmakers\') : ?>
                        <option value="<?php echo $value[\'slug\'];?>"><?php echo $value[\'name\'];?> </option>
                        <?php echo \'TRUE\';?>
                    <?php endif; ?>
                <?php } ?>  
                    <option value="events"><?php echo $this->__(\'Events\') ?></option>
            </select>
        </div>

2 个回复
SO网友:SeventhSteel

第1部分-删除双引号/额外字符:

由于输出在某种程度上是可预测的,因此我将尝试以下方法,而不是使用getCapitalleters函数,而不是使用正则表达式:

function strip_cruft( $str ) {
    $str = str_replace( \'";s\', \'\', $str );
    $str = str_replace( \'"\', \'\', $str );
    return $str;
}
第2部分-要输出填充的下拉列表:

使用上述功能并记住在开始和结束标记之间添加一个值:

<?php foreach($posttype as $post) {
    $post = strip_cruft( $post ); ?>
    <option value="<?php echo esc_attr( $post ); ?>">
        <?php echo esc_html( $post ); ?>
    </option>
<?php } ?>
如果您希望它们都是小写的,可以使用WordPress的sanitize_title 作用

SO网友:Jacob Peattie

在你最初的问题中,你有这样的文字

a:12:{s:3:"key";s:19:"field_57bdd83367bb1";s:5:"label"
这不是JSON。这是一个PHP序列化数组。这是用于存储在数据库中的PHP数组的表示形式。它是使用serialize() 作用如果你想update_post_meta()update_option() 使用WordPress中的数组值,WordPress将首先序列化数据。当您使用get_post_meta()get_option() WordPress将unserialize() 为您提供数据。

这里的问题是您没有使用WordPress函数检索此数据。您正在使用Mage::helper(\'wordpress\')->getPostType2(), 这似乎是一个Magento函数。如果您在Magento中使用此数据,那么A.这是错误的论坛,请在Magento论坛中询问您在Magento和B中是否有问题。您需要自己取消序列化数据:

$posttype=  Mage::helper(\'wordpress\')->getPostType2();
$posttype = unserialize($posttype);
echo \'Post type:\';

echo \'<pre>\';print_r($posttype);
PS:我将您的问题回滚到了第一个版本,因为这是问题的唯一一个包含解释问题的信息的版本。

结束