如何从使用自定义查询获取的wordpress的post_content中删除所有可视化作曲家短代码/标签

时间:2016-08-04 09:57:52

标签: php wordpress strip-tags visual-composer

我正在开发一个Web服务(API),我正在获取结果WP_query()函数并以JSON格式解析它。这将进一步用于Android应用程序。 问题是我得到的post_content查询是由视觉作曲家组成的,整个内容是这样的标签形式,如

\\

我想从内容中删除/删除所有这些短代码,并从中检索纯文本。是否有任何视觉作曲家功能,通过它我可以实现这个目标

[VC_ROW][/VC_ROW][VC_COLUMN]some text[/VC_COLUMN] etc.

7 个答案:

答案 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 po​​st 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));
}
  • 你应该试试这个。