检查请求的网址是否有文本模式,然后执行某些操作

时间:2018-12-18 08:33:16

标签: php wordpress youtube

我正在使用下面的代码在我的WordPress网站上执行视频短代码,但是某些页面已经包含手动添加的视频,当我使用该代码时,这些视频会导致重复。

如何检查页面是否已经包含YouTube嵌入式iframe或视频链接,并排除已经包含视频的页面,这是我的以下内容:

if (is_single() && in_category(1) ) 
{
 echo '<h4 class="post-title entry-title">Video</h4>' ;
 echo do_shortcode( '[yotuwp type="keyword" id="'.get_post_field( 'post_title', $post_id, 'raw' ).'" player="mode=large" template="mix" column="1" per_page="1"]' );
}

我想在此处添加youtube链接检查

 if (is_single() && in_category(1)

这是我能够找到的Here,但这会扫描所请求的url而不是其内容:

<?php
  if (stripos($_SERVER['REQUEST_URI'],'tout') == true && stripos($_SERVER['REQUEST_URI'],'dedans') == true) 
    {echo '<div class="clear"></div><a href="http://www.example.com/cakes/" class="btn"> >> View all Cakes</a>';}
?>

3 个答案:

答案 0 :(得分:5)

由于您已经拥有$post_id,因此建议您获取Post对象,并对'youtube'或简短网址版本'youtu.be'进行正则表达式匹配。查看示例代码:

$post = get_post($post_id);
$content = apply_filters('the_content', $post->post_content);

if (is_single() && in_category(1) && !preg_match('/youtu\.?be/', $content)) {
    echo '<h4 class="post-title entry-title">Video</h4>';
    echo do_shortcode('[yotuwp type="keyword" id="' . get_post_field('post_title', $post_id, 'raw') . '" player="mode=large" template="mix" column="1" per_page="1"]');
}

答案 1 :(得分:3)

使用file_get_contents,如下所示:

if (strpos(file_get_contents($_SERVER['REQUEST_URI']), 'youtube') === false) {
    // you can add your video
}

答案 2 :(得分:0)

我建议您挂在the_content过滤器上,以检查当前内容(如果已经具有所需的简码),如果没有,请添加它。

add_filter( 'the_content', 'func_53829055', 10 );
/**
 * Check if the shortcode exists, if not, add it
 *
 * @param string $post_content
 *
 * @return string
 */
function func_53829055( $post_content ) {
    // Add your custom conditions
    if( ! is_single() && ! in_category( 1 ) ) {
         return $post_content;
    }

    // Use a regex or strpos depending on the needs and post_content length/complexity
    if ( false !== strpos( $post_content, '[yotuwp' ) ) {
        // It already has the wanted shortcode, then return the post content
        return $post_content;
    }

    // If add the video before post content
    $before  = '<h4 class="post-title entry-title">Video</h4>';
    $before .= do_shortcode( 'my_shortcode' );
    $before .= '<br />';

    $post_content = $before . $post_content;

    // If add the video after post content
    $post_content .= '<br />';
    $post_content .= '<h4 class="post-title entry-title">Video</h4>';
    $post_content .= do_shortcode( 'my_shortcode' );

    return $post_content;
}

请注意,优先级必须低于11,因为在11上替换了短代码:add_filter( 'the_content', 'do_shortcode', 11 );