So entfernen Sie alle Visual Composer Shortcodes/Tags aus dem post_content von WordPress, der mit einer benutzerdefinierten Abfrage abgerufen wurde
Lesezeit: 6 Minuten
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?
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
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
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
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.
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:
$content = "<p>Hi, this is a [example]<b>example</b>[/example]. [end]</p>";
$shortcodesToRemove = ["example", "end"];
echo removeShortcode($content, $shortcodesToRemove);
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.
13722900cookie-checkSo entfernen Sie alle Visual Composer Shortcodes/Tags aus dem post_content von WordPress, der mit einer benutzerdefinierten Abfrage abgerufen wurdeyes
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