我在WordPress中有一个变量(使用Visual Composer插件模板)
$posts_query = $settings['posts_query']
当我打印__
时print_r($posts_query);
结果:
size:4|order_by:date|post_type:donation_slider|post_status:publish
我如何获得字段post_type?
我试过$posts_query['post_type']
,但它只显示了字母" s"或$posts_query->post_type;
显示空白!
有什么想法吗?
答案 0 :(得分:1)
这是一种非典型的情况,也是一种存储信息的非典型方式。看起来有人决定发明自己的serialization存储(将数组存储在字符串中)。
要访问所需信息,您需要使用explode将字符串操作到各种数组组件中。
这里有一些代码可以帮助您入门:
// $posts_query is equal to "size:4|order_by:date|post_type:donation_slider|post_status:publish"
$parts = explode('|', $posts_query);
// now parts is an array: ['size:4', 'order_by:date', 'post_type:donation_slider', 'post_status:publish'
$array = [];
// loop over the exploded parts
foreach( $parts AS $part ) {
// split the sub-parts apart
$split = explode(':', $part);
// glue it into a proper associative array
$array[$split[0]] = $split[1];
}
现在你有一个看起来像这样的数组:
array(
'size' => 4,
'order_by' => 'date',
'post_type' => 'donation_slider',
'post_status' => 'publish'
)
您可以像这样访问每个单独的部分:
$post_type = $array[ 'post_type']; // returns "donation_slider"
答案 1 :(得分:0)
我不太了解WordPress,但原生的PHP方法是这样的:
match
答案 2 :(得分:0)
答案 3 :(得分:0)
我找到了这个解决方案:
$post_type_query = explode("|", $posts_query);
$post_type = str_replace("post_type:","",$post_type_query[2]);
并打印post_type的值。
非常感谢你的帮助,我很感激!
答案 4 :(得分:0)
另一种解决方案:
$posts_query
似乎是一个字符串,因此像数组一样访问它不会取出'post_type'
。
您可以尝试使用此功能(来源:http://php.net/manual/en/function.explode.php),这会使$posts_query
中的新数组成为|
,而:
是数据字段和post_type
之间的分隔符键和值之间的分隔符。然后,您可以$parsed_posts_query['post_type']
获得function explode_with_keys($delim1,$delim2,$inputstring)
{
$firstarr = explode($delim1,$inputstring);
$finalarr = array();
foreach($firstarr as $set)
{
$setarr = explode($delim2,$set);
$finalarr[$setarr[0]] = $setarr[1];
}
return $finalarr;
}
$parsed_posts_query = explode_with_keys("|",":",$posts_query);
print_r($parsed_posts_query['post_type']);
,如图所示。
process.log = {};
process.traceMethodCalls = function (obj) {
return new Proxy(obj, {
get(target, method, receiver) {
if (typeof process.log[method] === 'undefined') {
process.log[method] = { calls: 0, params: new Set() };
}
return function (...args) {
process.log[method].calls += 1;
process.log[method].params.add(JSON.stringify(args));
return target[method].apply(this, args);
};
}
});
}