So entfernen Sie alle Visual Composer Shortcodes/Tags aus dem post_content von WordPress, der mit einer benutzerdefinierten Abfrage abgerufen wurde

Lesezeit: 6 Minuten

Benutzer-Avatar
Harisch Kumar

Ich arbeite an einem Webdienst (API), wo ich die Ergebnisfunktion WP_query() abrufe und diese im JSON-Format analysiere. die in der Android-Anwendung weiter verwendet werden. Das Problem ist, dass der post_content, den ich mit der Abfrage erhalte, von Visual Composer zusammengestellt wurde und der gesamte Inhalt in Form von Tags wie

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

Ich möchte alle diese Shortcodes aus dem Inhalt entfernen/entfernen und nur Klartext daraus abrufen. Gibt es eine visuelle Composer-Funktion, mit der ich dieses Ding erreichen kann?

<?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);
}
}
?>

  • Du kannst es versuchen strip_shortcodes() und diese Funktion wird von WordPress bereitgestellt.

    – Raul K

    4. August 2016 um 10:02 Uhr


  • @Rocky strip_shortcodes() Hat nicht funktioniert, schon mal probiert

    – Harish Kumar

    4. August 2016 um 10:07 Uhr


  • Hast du es versucht ? regulärer Ausdruck preg_replace("~(?:\[/?)[^/\]]+/?\]~s", '', $the_content);

    – Raul K

    4. August 2016 um 10:13 Uhr

  • @ Rocky ja Mann, es funktioniert. Aber warum funktioniert es nicht mit strip_shortcodes()? Es hat auch dasselbe in dieser Funktion

    – Harish Kumar

    4. August 2016 um 10:17 Uhr


  • Können Sie Ihren Code teilen, damit ich überprüfen kann, warum er von Ihrer Seite aus nicht funktioniert?

    – Raul K

    4. August 2016 um 10:19 Uhr

I want to remove/strip all these shortcode from the content and retrieve only plain text from it.

Lösung, die bei mir funktioniert hat:

$content = strip_tags( do_shortcode( $post->post_content ) );

do_shortcode löst alle Visual Composer Shortcodes aus und gibt somit html+text zurück;

strip_tags entfernt alle HTML-Tags und gibt einfachen Text zurück.

  • Nach einiger Recherche war dies die klügste Art, mit dem Problem umzugehen.

    – wbq

    14. Dezember 2020 um 21:00 Uhr

Benutzer-Avatar
Raul K

Hier können Sie versuchen, einige Shortcodes im Array hinzuzufügen, die Sie benötigen, und Sie können auch alle Shortcodes über den folgenden Code entfernen.

$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;

Sie möchten einige Shortcodes behalten, die Sie nicht verwenden können strip_shortcodes() dafür.

  • Bei mir funktioniert dieser Code jetzt str_replace(‘[vc_column_inner width=”1/3″]’,”,preg_replace(“~(?:[/?)[^/]]+/?]~s”, ”, $po->post_content)) Es gibt tatsächlich verschiedene Parameter in vc_column, also werde ich sie mit str_replace entfernen, wenn sie kommen. Ihre Antwort hilft ein wenig. Ich werde sie aber positiv bewerten es ist nicht die genaue Lösung

    – Harish Kumar

    4. August 2016 um 11:12 Uhr

  • Schauen Sie, ich habe den Code aktualisiert, auch der Parameter spielt keine Rolle im Shortcode, diese Regex überprüft nur den Shortcode, den Sie im Array verwendet haben. Sie können diesen Code immer noch ausführen VC_COLUMN_INNTER dann im Array übergeben und dann im Inhalt mit Parametern akzeptiert.

    – Raul K

    4. August 2016 um 12:23 Uhr


  • Ich habe ein kostenloses WordPress-Plugin entwickelt, um dieses Problem zu lösen, das Plugin namens (Shortcode Cleaner Lite). wordpress.org/plugins/shortcode-cleaner-lite Es bietet eine einfache Möglichkeit, ungenutzte, defekte Shortcodes automatisch aus WordPress-Inhalten zu bereinigen, sodass Sie ohne Bedenken zwischen Themen und Plugins wechseln und Ihre Inhalte jederzeit sauber und frisch halten können, es wird mit jedem Thema (Divi, Avada usw.) ) Shortcodes, die beim Ändern von Themen oder Plugins oder Seitenerstellern (Visual Composer, Elementor, Beaver…etc.) übrig bleiben.

    – mohamdio

    12. Februar 2018 um 11:58 Uhr

  • Entschuldigung, aber weder die erste noch die zweite preg_replace-Zeile entfernten die Shortcodes aus meiner Inhaltszeichenfolge.

    – wbq

    9. Januar 2020 um 0:28 Uhr

Benutzer-Avatar
Muhammad Khizer Khan

Beste Lösung, gelöst.
Fügen Sie einfach den folgenden Code zur Datei hinzu wp-includes/rest-api.phpganz unten:

/**
 * 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;
}

  • Es funktioniert, aber das Problem ist, dass beim Aktualisieren von WordPress ein Problem aufgetreten ist. Können wir dies nicht hinzufügen oder ein benutzerdefiniertes Plugin dafür erstellen?

    – Zahier Ahmad

    14. März 2019 um 10:49 Uhr

  • Kerndateien zu ändern ist das Schlimmste, was Sie tun können.

    – wbq

    14. Dezember 2020 um 20:52 Uhr

Benutzer-Avatar
Swetoslaw

Ich habe es irgendwo hingebracht und ein bisschen aktualisiert, damit es ein bisschen besser funktioniert :). Fügen Sie in der functions.php diese Funktion hinzu:

/** 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.'';

  }
}

und danach rufst du es normal an kc_excerpt(20); und es wird normal post_content/excerpt zurückgegeben

So entfernen Sie den visuellen Komponisten aus dem wp-Beitrag: dh [vc_row][vc_column width=\"2/3\"][distance][vc_single_image image=\"40530\" img_size=\"large\"][distance][distance][distance][vc_column_text]
Auch WP-Post-Remvoe-Kurzcodes und HTML-Tags.

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 );
}

Benutzer-Avatar
Jocelino Pereira

Beim Suchen des Quellcodes von der WordPress-API habe ich eine Funktion ausgeführt, um einen Shortcode aus dem Inhalt zu entfernen. Das ist also das Ergebnis:

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;
}

Beispiel:

$content = "<p>Hi, this is a [example]<b>example</b>[/example]. [end]</p>";
$shortcodesToRemove = ["example", "end"];
echo removeShortcode($content, $shortcodesToRemove);

Benutzer-Avatar
Hitesh Gandhi

foreach($posts as $po){
    $services_array[] = array('id'=>$po->ID,'title'=>$po->post_title, 'description'=>do_shortcode($po->post_content));
}
  • Sie sollten dies versuchen.

1372290cookie-checkSo entfernen Sie alle Visual Composer Shortcodes/Tags aus dem post_content von WordPress, der mit einer benutzerdefinierten Abfrage abgerufen wurde

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy