it-swarm.com.de

Holen Sie sich alle Youtube-Videos von Posts und binden Sie sie auf einer anderen Seite ein

Ist das möglich? Ich möchte, dass alle meine Beiträge überprüft werden, um festzustellen, ob ein eingebettetes Youtube-Video vorhanden ist. Wenn ja, möchte ich das auf einer anderen Seite zeigen, eingebettet und mit diesem bestimmten Beitrag verknüpft ...

Ich habe das folgende Snippet ausprobiert, aber das hat bei mir nicht funktioniert. Es wird kein Video eingebettet ...

function aihato_latest_video() {
  $query_args = array(
    's' => 'youtube.com/watch?v=',
    'posts_per_page' => 1
  );

  $posts = get_posts( $query_args );
  $post1 = $posts[0];

  $matches = array();

  preg_match('|http://www.youtube.com/watch\?v=([a-zA-Z0-9]+)|', $post1->post_content, $matches);
  $v = $matches[1];
?>
<object width="415" height="250">
  <param name="movie" value="http://www.youtube.com/v/<?php echo $v ?>&hl=en_US&fs=1&"></param>
  <param name="allowFullScreen" value="true"></param>
  <param name="allowscriptaccess" value="always"></param>
  <embed src="http://www.youtube.com/v/<?php echo $v ?>&hl=en_US&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="415" height="250"></embed>
</object>
<?php
}

Bearbeiten: Dies funktioniert weder:

function aihato_latest_video() {
  $query_args = array(
    's' => 'youtube.com/watch?v=',
    'posts_per_page' => 1
  );

$posts = get_posts( $query_args );
foreach ($posts as $p) {
  $matches = array();
  preg_match('|http://www.youtube.com/watch\?v=([a-zA-Z0-9]+)|', $p->post_content, $matches);
?>

 <?php if (!empty($matches[1])) { ?>
    <object width="415" height="250">
      <param name="movie" value="http://www.youtube.com/v/<?php echo $matches[1] ?>&hl=en_US&fs=1&"></param>
      <param name="allowFullScreen" value="true"></param>
      <param name="allowscriptaccess" value="always"></param>
      <embed src="http://www.youtube.com/v/<?php echo $matches[1] ?>&hl=en_US&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="415" height="250"></embed>
    </object><?php
  }
}

?>
2
Johan

Eine andere Methode kann folgendermaßen aussehen: Suchen Sie beim Speichern des aktuellen Beitrags nach YouTube-Videos im Inhalt, und speichern Sie sie, falls vorhanden, im temporären 'videos' und in der post_id(für den Link zum Beitrag später)insted of regex im using parse_url () und parse_str ()

add_action( 'save_post', 'save_youtube_videos' );
function save_youtube_videos( $post_id ) 
{
    $saved   = get_transient( 'videos' ); // If we have videos before
    $videos  = !empty( $saved ) ? $saved : array();
    $content = isset( $_POST['post_content'] ) ? $_POST['post_content'] : null;

    if( $content )
    {
        parse_str( parse_url( $content, PHP_URL_QUERY ), $video );
        if( !in_array( $video['v'], $videos ) )
        {
            $videos[ $post_id ] = $video['v']; // Push post_id and the vide_id
            set_transient( 'videos', $videos );  // Save all videos as array
        }
    }
}

Speichere deine post_id und deine youtube_id, falls du eine hast. Suchen Sie also beim Aktualisieren oder Veröffentlichen mit parse_str und parse_url nach einem Video, und fügen Sie es dem temporären Cache hinzu, damit wir nicht alle Beiträge erneut suchen müssen.

function get_youtube_archive( $width = '415', $height = '250' )
{
    $videos = get_transient( 'videos' );

    if( !empty( $videos ) && count( $videos ) > 0 )
    {
        $output = '';

        foreach( $videos as $key => $value ) 
        {
            $output .= '<object width="'. $width .'" height="'. $height .'">';
                $output .= '<param name="movie" value="http://www.youtube.com/v/'. $value .'/&hl=en_US&fs=1&"></param>';
                $output .= '<param name="allowFullScreen" value="true"></param>';
                $output .= '<param name="allowscriptaccess" value="always"></param>';
                $output .= '<embed src="http://www.youtube.com/v/'. $value .'&hl=en_US&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="'. $width .'" height="'. $height .'"></embed>';
            $output .= '</object>';

            $output .= '<a href="'. get_permalink( $key ) .'" alt="Go to post">Go to post</a>';
        }

        return $output;
    }
}

Und eine Auflistungsfunktion, mit der Sie die Videos herunterladen können, indem Sie Folgendes hinzufügen:

echo get_youtube_archive();

Wo du sie haben willst. Sie müssen die Beiträge dort speichern, wo Sie Videos haben, damit dies funktioniert.

4

Ohne diesen Code zu starten, kann ich ein ziemlich schwerwiegendes Problem feststellen. Sie beschreiben das Ziel als "Alle meine Beiträge überprüfen, um festzustellen, ob ein eingebettetes YouTube-Video vorhanden ist". Die Abfrage ist jedoch auf nur einen Beitrag beschränkt.

Und dann versuchen Sie nur, den allerersten Beitrag in den Ergebnissen zu verwenden (wenn die Abfrage überhaupt funktioniert), sodass auf keinen Fall alle YouTube-Videos aus allen Beiträgen abgerufen werden können. Wenn Sie Glück haben, erhalten Sie die Videos nur aus einem Beitrag. Das erste, was Sie tun müssen, ist eine Schleife durch alle Beiträge. Ungetestet, aber so ähnlich:

$posts = get_posts( $query_args );
foreach ($posts as $p) {
  $matches = array();
  preg_match('|http://www.youtube.com/watch\?v=([a-zA-Z0-9]+)|', $p->post_content, $matches);
  if (!empty($matches[1])) { ?>
    <object width="415" height="250">
      <param name="movie" value="http://www.youtube.com/v/<?php echo $matches[1] ?>&hl=en_US&fs=1&"></param>
      <param name="allowFullScreen" value="true"></param>
      <param name="allowscriptaccess" value="always"></param>
      <embed src="http://www.youtube.com/v/<?php echo $matches[1] ?>&hl=en_US&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="415" height="250"></embed>
    </object><?php
  }
}

Ihre regex ist auch falsch. YouTube-Video-IDs sind unterstrichen.

Alles in allem:

function aihato_latest_video() {
  $query_args = array(
    's' => 'youtube.com/watch?v=',
  );

  $posts = get_posts( $query_args );
  foreach ($posts as $p) {
    $matches = array();
    preg_match('|http://www.youtube.com/watch\?v=([a-zA-Z0-9_]+)|', $p->post_content, $matches);
    if (!empty($matches[1])) { ?>
      <object width="415" height="250">
        <param name="movie" value="http://www.youtube.com/v/<?php echo $matches[1] ?>&hl=en_US&fs=1&"></param>
        <param name="allowFullScreen" value="true"></param>
        <param name="allowscriptaccess" value="always"></param>
        <embed src="http://www.youtube.com/v/<?php echo $matches[1] ?>&hl=en_US&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="415" height="250"></embed>
      </object><?php
    }
  }
}
3
s_ha_dum