사용자 지정 쿼리로 가져온 wordpress의 post_content에서 모든 시각적 작곡가 숏코드/태그를 제거하는 방법
결과 WP_query() 함수를 가져와 JSON 형식으로 파싱하는 웹 서비스(API) 작업을 하고 있습니다.안드로이드 어플리케이션에서 더 많이 사용될 것입니다.문제는 제가 쿼리를 통해 얻고 있는 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);
}
}
?>
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
모든 visual composer shortcode를 트리거하여 html+text를 반환합니다.
strip_tags
모든 html 태그를 제거하고 일반 텍스트를 반환합니다.
여기서는 필요한 배열로 짧은 코드를 쉽게 추가할 수 있으며 아래 코드를 통해 모든 짧은 코드를 제거할 수 있습니다.
$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()
그것을 위하여.
최고의 해결책, 해결.
아래에 있는 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;
}
좀 더 잘 작동하기 위해 어디론가 찍어 업데이트 했습니다 :).기능적으로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/ excerpt를 반환합니다.
wp 게시물에서 시각적 작곡가를 제거하는 방법: 즉[vc_row][vc_column width=\"2/3\"][distance][vc_single_image image=\"40530\" img_size=\"large\"][distance][distance][distance][vc_column_text]
또한 WP는 removie short code와 html tag를 게시합니다.
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 );
}
wordpress api에서 source code를 보고 컨텐츠에서 short code를 제거하는 기능을 했습니다.결과는 이렇습니다.
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);
foreach($posts as $po){
$services_array[] = array('id'=>$po->ID,'title'=>$po->post_title, 'description'=>do_shortcode($po->post_content));
}
- 이거 한 번 드셔보세요.
언급URL : https://stackoverflow.com/questions/38764170/how-to-strip-all-visual-composer-shortcode-tags-from-wordpresss-post-content-fe
'programing' 카테고리의 다른 글
JNI를 사용하여 Java에서 C로 데이터 유형 전달(또는 그 반대) (0) | 2023.10.28 |
---|---|
운영 체제 컴파일 시간 (0) | 2023.10.28 |
브리지 네트워크에서 컨테이너의 IP를 가져오는 방법 (0) | 2023.10.28 |
그럼 .는 왜 함수가 아닌가요? (0) | 2023.10.28 |
Mysql에서 Varchar를 텍스트로 마이그레이션 (0) | 2023.10.28 |