我正在开发一个Web服务(API),我正在获取结果WP_query()函数并以JSON格式解析它。这将进一步用于Android应用程序。 问题是我得到的post_content查询是由视觉作曲家组成的,整个内容是这样的标签形式,如
\\
我想从内容中删除/删除所有这些短代码,并从中检索纯文本。是否有任何视觉作曲家功能,通过它我可以实现这个目标
[VC_ROW][/VC_ROW][VC_COLUMN]some text[/VC_COLUMN] etc.
答案 0 :(得分:2)
在这里,您可以尝试在阵列中轻松添加一些所需的短代码,也可以通过以下代码删除所有短代码。
$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()
的短代码。
答案 1 :(得分:2)
I want to remove/strip all these shortcode from the content and retrieve only plain text from it.
对我有用的解决方案:
$content = strip_tags( do_shortcode( $post->post_content ) );
do_shortcode
触发所有可视化作曲家的简码,从而返回html + text;
strip_tags
删除所有html标记并返回纯文本。
答案 2 :(得分:1)
最佳解决方案。
只需将以下代码添加到文件 wp-includes / rest-api.php ,位于底部,即可:
/**
* Modify REST API content for pages to force
* shortcodes to render since Visual Composer does not
* do this
*/
add_action( 'rest_api_init', function ()
{
register_rest_field(
'page',
'content',
array(
'get_callback' => 'compasshb_do_shortcodes',
'update_callback' => null,
'schema' => null,
)
);
});
function compasshb_do_shortcodes( $object, $field_name, $request )
{
WPBMap::addAllMappedShortcodes(); // This does all the work
global $post;
$post = get_post ($object['id']);
$output['rendered'] = apply_filters( 'the_content', $post->post_content );
return $output;
}
答案 3 :(得分:0)
我将其放在某个地方并对其进行了一些更新,以使其工作得更好:)。 在functions.php中添加以下功能:
/** Function that cuts post excerpt to the number of a word based on previously set global * variable $word_count, which is defined below */
if(!function_exists('kc_excerpt')) {
function kc_excerpt($excerpt_length = 20) {
global $word_count, $post;
$word_count = $excerpt_length;
$post_excerpt = get_the_excerpt($post) != "" ? get_the_excerpt($post) : strip_tags(do_shortcode(get_the_content($post)));
$clean_excerpt = strpos($post_excerpt, '...') ? strstr($post_excerpt, '...', true) : $post_excerpt;
/** add by PR */
$clean_excerpt = strip_shortcodes(remove_vc_from_excerpt($clean_excerpt));
/** end PR mod */
$excerpt_word_array = explode (' ',$clean_excerpt);
$excerpt_word_array = array_slice ($excerpt_word_array, 0, $word_count);
$excerpt = implode (' ', $excerpt_word_array).'...'; echo ''.$excerpt.'';
}
}
之后,您通常将其称为kc_excerpt(20);
,它将返回正常的post_content /摘录
答案 4 :(得分:0)
如何从 wp 帖子中删除视觉作曲家:即 [vc_row][vc_column width=\"2/3\"][distance][vc_single_image image=\"40530\" img_size=\"large\"][distance][distance][distance][vc_column_text]
还有 WP post remvoe 短代码和 html 标签。
while($posts->have_posts()) {
$postContent = get_the_content();
//Remove html tags. and short code
$postContent = strip_tags( do_shortcode( $postContent ) );
//Remove visual composer tags [vc_column] etc
$postContent = preg_replace( "/\[(\/*)?vc_(.*?)\]/", '', $postContent );
}
答案 5 :(得分:0)
从 wordpress api 中查看源代码,我做了一个功能来从内容中删除一些短代码。结果如下:
function removeShortcode($content, $shortcodeList){
preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $content, $matches);
$tagnames = array_intersect($shortcodeList, $matches[1]);
if(empty($tagnames)){
return $content;
}
$pattern = get_shortcode_regex($tagnames);
preg_match_all("/$pattern/", $content, $matchesTags);
foreach ($matchesTags[0] as $key => $value) {
$content = str_replace($value, $matchesTags[5][$key], $content);
}
return $content;
}
示例:
$content = "<p>Hi, this is a [example]<b>example</b>[/example]. [end]</p>";
$shortcodesToRemove = ["example", "end"];
echo removeShortcode($content, $shortcodesToRemove);
答案 6 :(得分:0)
foreach($posts as $po){
$services_array[] = array('id'=>$po->ID,'title'=>$po->post_title, 'description'=>do_shortcode($po->post_content));
}