web-dev-qa-db-ja.com

Content_arr ['extended']が段落タグを削除するのはなぜですか?

content_arr['extended']またはcontent_arr['main']が出力の段落タグを削除するという奇妙な問題に遭遇しています。

これを解決しようとしているどんな助け、または私が見ていることに対する何かへの洞察は大いに感謝されるでしょう。

1
Zach Smith

私は出力にwpautopを使用して以下を追加するとそれが問題を解決するようです。私はこれがなぜそれを修正するのか私よりも賢い人から知りたいのですが。 the_contentを使用したときにpタグが含まれるのに対し、get_extendedを使用したときにpタグが削除されるのはなぜですか。

$content_arr = get_extended ( $post->post_content );

            if( strpos( get_the_content(), '<span id="more-' ) == true ) {
                echo wpautop($content_arr['main']);
                echo '<div class="morecontent">'. wpautop($content_arr['extended']).'</div>';
            }
            else {
                the_content();
            }
1
Zach Smith

$post->post_contentにはデフォルトで段落タグがありません。 wpautopはこの関数を使用するときに適用されるフィルタの1つなので、通常はthe_content()を使用して表示されるときに追加されます。これはdo_shortcodeと他のいくつかの関数にも当てはまります。

拡張コンテンツをページに表示するときは、各部分を関数wpautopおよびdo_shortcodeなどに渡すか、代わりにフィルタthe_contentを適用する必要があります。

<?php $parts = get_extended( $post->post_content ); ?>
<div class="post_content">
    <?php echo wpautop( do_shortcode( $parts['main'] ) ); // Not entirely sure of the best order. ?>
    <?php if ( ! empty( $parts['extended'] ) ) : ?>
        <!-- Example Bootstrap toggle link. -->
        <a href="#read-more" data-toggle="collapse" data-target="#read-more">
            <?php _e( 'Read More' ); ?>
        </a>
        <div id="read-more">
            <?php echo apply_filters( 'the_content', $parts['extended'] ); ?>
        </div>
    <?php endif; ?>
</div>
0
Shaun Cockerill