Я работаю над веб-сервисом (API), где я получаю результат WP_query () и анализирую его в формате JSON. который будет в дальнейшем использовать в приложении для Android.
Проблема в том, что post_content, который я получаю с запросом, составлен визуальным композитором, и весь контент представлен в виде таких тегов, как
[VC_ROW][/VC_ROW][VC_COLUMN]some text[/VC_COLUMN] etc.
Я хочу удалить / удалить все эти шорткоды из содержимого и извлечь из него только простой текст. Есть ли какая-нибудь визуальная функция композитора, с помощью которой я могу достичь этой вещи
<?php
require('../../../wp-load.php');
require_once(ABSPATH . 'wp-includes/functions.php');
require_once(ABSPATH . 'wp-includes/shortcodes.php');
header('Content-Type: application/json');
$post_name = $_REQUEST['page'];
if($post_name!=''){
if($post_name=='services') {
$args = array(
'post_parent' => $page['services']['id'],
'post_type' => 'page',
'post_status' => 'published'
);
$posts = get_children($args);
foreach($posts as $po){
$services_array[] = array('id'=>$po->ID,'title'=>$po->post_title,'image'=>get_post_meta($po->ID, 'webservice_page_image',true),'description'=>preg_replace("~(?:\[/?)[^/\]]+/?\]~s", '', $po->post_content));
}
$post = array(
'status'=>'ok',
'services'=>$services_array
);
echo json_encode($post);
}
}
?>
Здесь вы можете легко и просто добавить в массив необходимые короткие коды, а также удалить все короткие коды с помощью приведенного ниже кода.
$the_content = '[VC_ROW][VC_COLUMN]some text1[/VC_COLUMN] etc.[/VC_ROW][VC_COLUMN_INNTER width="1/3"][/VC_COLUMN_INNTER]';
$shortcode_tags = array('VC_COLUMN_INNTER');
$values = array_values( $shortcode_tags );
$exclude_codes = implode( '|', $values );
// strip all shortcodes but keep content
// $the_content = preg_replace("~(?:\[/?)[^/\]]+/?\]~s", '', $the_content);
// strip all shortcodes except $exclude_codes and keep all content
$the_content = preg_replace( "~(?:\[/?)(?!(?:$exclude_codes))[^/\]]+/?\]~s", '', $the_content );
echo $the_content;
Вы хотите оставить некоторые шорткоды, которые вы не можете использовать strip_shortcodes()
для этого.
Других решений пока нет …