Обрезать автоматические теги P вокруг изображений, видео и фреймов в WordPress 4.9

ПРОБЛЕМА

Я пытаюсь изменить размер моего видео на YouTube, которое я вставляю, и у меня есть немного работающего CSS, чтобы правильно его стилизовать, но тот факт, что WordPress продолжает добавлять <п> теги вокруг моего видео, изображения и теги iframe нарушают мой код. Я только пытаюсь удалить обертки тегов абзацев из элементов (video / img / iframe) в разделах контента блога (не на боковых панелях, виджетах, нижних колонтитулах и т. Д.)

САЙТ КЛИЕНТА:

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

Вот сообщение в блоге на соответствующем веб-сайте:
http://ehepperle.com/in-progress/feelheal/11/how-to-create-125-px-ad-banner-gimp/

[IMG]

МОЯ СИСТЕМА

МОЙ КОД

Так как это относится к фильтрам WordPress, а не к общим концепциям кодирования, я не нашел способа сделать хороший демонстрационный пример, но вот фрагменты кода, показывающие то, что я пробовал:

functions.php — ver. 1

// Remove P Tags Around Images
// From: http://justlearnwp.com/remove-p-tag-around-wordpress-images/
function filter_ptags_on_images($content){
return preg_replace('/<p>\s*(<a .*>)?\s*(<img .* \/>)\s*(<\/a>)?\s*<\/p>/iU', '\1\2\3', $content);
}
add_filter('the_content', 'filter_ptags_on_images');

functions.php — ver. 2

// https://stackoverflow.com/questions/44539888/remove-automatic-p-tag-in-wordpress#answer-44540531
function reformat_auto_p_tags($content) {
$new_content = '';
$pattern_full = '{(\[raw\].*?\[/raw\])}is';
$pattern_contents = '{\[raw\](.*?)\[/raw\]}is';
$pieces = preg_split($pattern_full, $content, -1, PREG_SPLIT_DELIM_CAPTURE);
foreach ($pieces as $piece) {
if (preg_match($pattern_contents, $piece, $matches)) {
$new_content .= $matches[1];
} else {
$new_content .= wptexturize(wpautop($piece));
}
}

return $new_content;
}

remove_filter('the_content', 'wpautop');
remove_filter('the_content', 'wptexturize');

add_filter('the_content', 'reformat_auto_p_tags', 99);
add_filter('widget_text', 'reformat_auto_p_tags', 99);

ССЫЛКИ, КОТОРЫЕ Я УЗНАЛ, ПЕРЕД ПОСТАВКОЙ

Я пробовал решения, собранные из этих разных возможных решений, но все безрезультатно.

МОИ ВОПРОСЫ

Следующие вопросы на самом деле являются несколькими аспектами одного и того же основного вопроса, чтобы собрать наиболее полное понимание с разных точек зрения.

  1. Как я могу удалить <п> теги из фреймов, видео и изображений в WordPress? Методы, которые я нашел за последние 2 года (и ранее), похоже, не работают.

  2. Что не так с моим кодом? Почему удаление фильтров wpautop не работает в моем файле functions.php?

  3. Что-то изменилось с версией WP 4.8-4.9, из-за которой эти хаки фильтров больше не работают?

Я добавляю свой полный файл functions.php на тот случай, если кто-то может помочь идентифицировать что-то, что вызывает конфликт. Я не вижу ничего, но, возможно, вы увидите то, что я пропустил.

functions.php (завершено)

<?php
add_action( 'wp_enqueue_scripts', function() {
//* Parent CSS
wp_enqueue_style( 'storefront',
get_template_directory_uri() . '/style.css' );

//* Child CSS
wp_enqueue_style( 'storefront-ehw-1',
get_stylesheet_directory_uri() . '/style.css', [ 'storefront' ] );
} );

/* Adds search box to top nav menu
add_filter( 'wp_nav_menu_items','add_search_box', 10, 2 );
function add_search_box( $items, $args ) {
$items .= '<li class="widget widget_search">' . get_search_form( false ) . '</li>';
return $items;
}
*/

/* Hide categories from WordPress category widget
NOTE: 59 is the id of .Test-Posts category. This hides that from users.*/
function exclude_widget_categories($args){
$exclude = "59";
$args["exclude"] = $exclude;
return $args;
}
add_filter("widget_categories_args","exclude_widget_categories");

/* Add Google fonts */
function wpb_add_google_fonts() {

wp_enqueue_style( 'wpb-google-fonts', 'http://fonts.googleapis.com/css?family=Aguafina Script|Neucha|The Girl Next Door|Quintessential|Open Sans|Raleway', false );
}

add_action( 'wp_enqueue_scripts', 'wpb_add_google_fonts' );


/**
* Display the theme credit
*
* @since  1.0.0
* @return void
*/
function storefront_credit() {
?>
<div class="site-info">
<?php echo esc_html( apply_filters( 'storefront_copyright_text', $content = 'Copyright &copy; ' . date( 'Y' ) . ' ' . get_bloginfo( 'name' ) ) ); ?>
<?php if ( apply_filters( 'storefront_credit_link', true ) ) { ?>

<br />

<?php echo '<a href="https://erichepperle.com" target="_blank" title="' . esc_attr__( 'Eric Hepperle Designs - Affordable eCommerce WordPress websites for small business', 'storefront-ehw-1' ) . '" rel="author">' . esc_html__( 'Designed by: Eric Hepperle Designs', 'storefront-ehw-1' ) . '</a>' ?>
<?php } ?>
</div><!-- .site-info -->/*<?php
}


/* **** VARIOUS ATTEMPTS TO REMOVE P-TAGS FROM YOUTUBE VIDEO THUMBNAILS ****

// Remove P Tags Around Images
// From: http://justlearnwp.com/remove-p-tag-around-wordpress-images/
function filter_ptags_on_images($content){
return preg_replace('/<p>\s*(<a .*>)?\s*(<img .* \/>)\s*(<\/a>)?\s*<\/p>/iU', '\1\2\3', $content);
}
add_filter('the_content', 'filter_ptags_on_images');

// Remove P Tags Around videos
function filter_ptags_on_vids($content){
return preg_replace('/<video>\s*(<a .*>)?\s*(<img .* \/>)\s*(<\/a>)?\s*<\/video>/iU', '\1\2\3', $content);
}
add_filter('the_content', 'filter_ptags_on_vids');

// https://stackoverflow.com/questions/44539888/remove-automatic-p-tag-in-wordpress#answer-44540531
function reformat_auto_p_tags($content) {
$new_content = '';
$pattern_full = '{(\[raw\].*?\[/raw\])}is';
$pattern_contents = '{\[raw\](.*?)\[/raw\]}is';
$pieces = preg_split($pattern_full, $content, -1, PREG_SPLIT_DELIM_CAPTURE);
foreach ($pieces as $piece) {
if (preg_match($pattern_contents, $piece, $matches)) {
$new_content .= $matches[1];
} else {
$new_content .= wptexturize(wpautop($piece));
}
}

return $new_content;
}

remove_filter('the_content', 'wpautop');
remove_filter('the_content', 'wptexturize');

add_filter('the_content', 'reformat_auto_p_tags', 99);
add_filter('widget_text', 'reformat_auto_p_tags', 99);

// ------------ FROM STACK OVERFLOW ------------------------
//
// Remove p tags from images, scripts, and iframes.
function remove_some_ptags( $content ) {
$content = preg_replace('/<p>\s*(<a .*>)?\s*(<img .* \/>)\s*(<\/a>)?\s*<\/p>/iU', '\1\2\3', $content);
$content = preg_replace('/<p>\s*(<script.*>*.<\/script>)\s*<\/p>/iU', '\1', $content);
$content = preg_replace('/<p>\s*(<iframe.*>*.<\/iframe>)\s*<\/p>/iU', '\1', $content);
return $content;
}
add_filter( 'the_content', 'remove_some_ptags' );

*/

// Add the filter to manage the p tags
add_filter( 'the_content', 'jb_remove_autop_for_image', 0 );

function jb_remove_autop_for_image( $content )
{
global $post;

// Here you can write condition as per your requirement.
// i have added example for your idea
if ( is_single() && $post->post_type == 'image' )
remove_filter('the_content', 'wpautop');

return $content;
}

0

Решение

Здесь я отправляю код для удаления тега p из изображений, сценариев и фреймов.

// Remove p tags from images, scripts, and iframes.
function remove_some_ptags( $content ) {
$content = preg_replace('/<p>\s*(<a .*>)?\s*(<img .* \/>)\s*(<\/a>)?\s*<\/p>/iU', '\1\2\3', $content);
$content = preg_replace('/<p>\s*(<script.*>*.<\/script>)\s*<\/p>/iU', '\1', $content);
$content = preg_replace('/<p>\s*(<iframe.*>*.<\/iframe>)\s*<\/p>/iU', '\1', $content);
return $content;
}
add_filter( 'the_content', 'remove_some_ptags' );

Пожалуйста, проверьте.

0

Другие решения

Пожалуйста, попробуйте ниже код.

// Add the filter to manage the p tags
add_filter( 'the_content', 'jb_remove_autop_for_image', 0 );

function jb_remove_autop_for_image( $content )
{
global $post;

// Here you can write condition as per your requirement.
// i have added example for your idea
if ( is_single() && $post->post_type == 'image' )
remove_filter('the_content', 'wpautop');

return $content;
}
0

По вопросам рекламы [email protected]