Шорткод галереи Wordpress Pregreplace

В основном мне нужно удалить шорткод галереи из содержимого Wordpress, я использую

echo preg_replace('/\[gallery ids=[^\]]+\]/', '',  get_the_content() );

Он успешно удаляет шорткод галереи, а также теги абзаца, которые мне нужно сохранить. Идея в том, что я хочу вывести в контент все, кроме галереи.


person user2677732    schedule 15.08.2013    source источник


Ответы (2)


Вы можете использовать функции Wordpress strip_shortcode.

Посмотрите на пример в Кодексе. Вы можете создать фильтр, удаляющий короткие коды:

function remove_shortcode_from($content) {
  $content = strip_shortcodes( $content );
  return $content;
}

и вызовите его, когда вам нужно (в вашем шаблоне):

add_filter('the_content', 'remove_shortcode_from');
the_content();
remove_filter('the_content', 'remove_shortcode_from')

ИЗМЕНИТЬ 1

Другой способ получить это (и ответить на ваш комментарий) вы можете использовать функция Wordpress apply_filters в содержимом после удалить нежелательные шорткоды.

//within loop
$content = get_the_content();
$content = preg_replace('/\[gallery ids=[^\]]+\]/', '',  $content );
$content = apply_filters('the_content', $content );
echo $content;

Но я бы не советовал вам этого делать. Я думаю, что принуждение вашего сайта к изменению содержания сообщения может затруднить понимание. Возможно, вам стоит поработать с выдержкой Wordpress и избежать каких-либо проблем.

Ссылка, которая мне помогла

person hugofcampos    schedule 15.08.2013
comment
Это хорошее решение, и оно хорошо работает для того, чего я пытаюсь достичь, но удаление всех шорткодов может вызвать проблемы с более сложной темой. - person user2677732; 15.08.2013

чтобы удалить шорткод или определенный список шорткодов, вы можете использовать этот код.

global $remove_shortcode;
/**
* Strips and Removes shortcode if exists
* @global int $remove_shortcode
* @param type $shortcodes comma seprated string, array of shortcodes
* @return content || excerpt
*/
function dot1_strip_shortcode( $shortcodes ){
  global $remove_shortcode;
  if(empty($shortcodes)) return;

  if(!is_array($shortcodes)){
    $shortcodes = explode(',', $shortcodes);
  }
  foreach( $shortcodes as $shortcode ){
    $shortcode = trim($shortcode);
    if( shortcode_exists($shortcode) ){
        remove_shortcode($shortcode);
    }
    $remove_shortcode[$shortcode] = 1;
  }
  add_filter( 'the_excerpt', 'strip_shortcode' );
  add_filter( 'the_content', 'strip_shortcode' );    
}
function strip_shortcode( $content) {
  global $shortcode_tags, $remove_shortcode;

  $stack = $shortcode_tags;
  $shortcode_tags = $remove_shortcode;
  $content = strip_shortcodes($content);

  $shortcode_tags = $stack;
  return $content;
}
dot1_strip_shortcode( 'gallery' );

Принимает одну строку шорткода, разделенную запятыми, или массив шорткодов.

person sven    schedule 27.12.2013