web-dev-qa-db-ja.com

投稿からリンクのURLを抽出する方法

私はWordPressがかなり新しいので、次のような疑問を抱いています。

特定のカテゴリに属する​​投稿のリストからいくつかの情報を取得し、それらを「ダッシュボード」のようなものに表示するページがあります。

だから私はこのコードがあります:

<?php
/**
 * The template for displaying all Parallax Templates.
 *
 * @package accesspress_parallax
 */
?>
    <div class="service-listing clearfix">
    <?php 
        $args = array(
            'cat' => $category,
            'posts_per_page' => -1
            );
        $count_service = 0;
        $query = new WP_Query($args);
        if($query->have_posts()):
            $i = 0;
            while ($query->have_posts()): $query->the_post();
            $i = $i + 0.25;
            $count_service++;
            $service_class = ($count_service % 2 == 0) ? "even wow fadeInRight" : "odd wow fadeInLeft";
        ?>

        <div class="clearfix service-list <?php echo $service_class; ?>" data-wow-delay="<?php echo $i; ?>s">
            <div class="service-image">
                <?php if(has_post_thumbnail()) : 
                $image = wp_get_attachment_image_src(get_post_thumbnail_id(get_the_ID()),'thumbnail'); ?>
                    <img src="<?php echo esc_url($image[0]); ?>" alt="<?php the_title(); ?>">
                <?php else: ?>
                    <img src="<?php echo get_template_directory_uri(); ?>/images/no-image.jpg" alt="<?php the_title(); ?>">
                <?php endif; ?>
            </div>

            <div class="service-detail">
                <h3><?php the_title(); ?></h3>
                <div class="service-content"><?php the_content(); ?></div>
            </div>
        </div>

        <?php 
        if($count_service % 2 == 0): ?>
            <div class="clearfix"></div>
        <?php endif;
        ?>

        <?php
            endwhile;
            wp_reset_postdata();
        endif;
    ?>
    </div><!-- #primary -->

前のコードでわかるように、スクリプトはクエリを実行している投稿リストを取得し、このリストの対話でこの投稿を特定の方法で表示します。

だから各投稿の内容はこれらの行で私のページに表示されます。

<div class="service-detail">
    <h3><?php the_title(); ?></h3>
    <div class="service-content"><?php the_content(); ?></div>
</div>

これはブラウザに次のようにレンダリングされます。

<div class="service-detail">
    <h3>TEST</h3>

    <div class="service-content">
        <p><a href="https://it.wikipedia.org/wiki/Pagina_principale">test</a></p>
    </div>
</div>

ですから、divに見えるようにclass = "service-content"が含まれているのはthe_content()関数によって検索されたcontent値です。

今、私は次の操作を実行する必要があります。

the_content()関数によって取得された値がHTMLリンク(a harefタグの値)である場合、それは変数に入れられます(名前付きurl、それ以外の場合、この変数はnullに設定されます。

簡単な方法でできますか。投稿にあるリンクのリスト(私の特定のケースでは1つだけ)を取得するWordPress関数が存在しますか?

存在しない場合、投稿コンテンツがURLであるかどうか、そしてその値が変数に格納されているかどうかを確認する方法はありますか。

TNX

1
AndreaNobili

投稿にあるリンクのリスト(私の特定のケースでは1つだけ)を取得するWordPress関数が存在しますか?

コア wp_extract_urls() 関数をチェックしてください。

$urls = wp_extract_urls( $content );

与えられたコンテンツからURLを抽出します。

$content = 'Two test sites: <a href="http://foo.tld">Foo.tld</a> and https://bar.tld';
$urls    = wp_extract_urls( $content );
print_r( $urls  );

出力あり:

Array
(
    [0] => http://foo.tld
    [1] => https://bar.tld
)
3
birgire