web-dev-qa-db-ja.com

投稿のコンテンツに画像を追加または追加する

私は子テーマとfunctions.phpファイルを使って、特定のタグ(コード内のVideos)を持つ投稿にImageを追加しています。私は関数を作成しようとしていましたが、私はいくつかの問題を抱えています、それは私がそのタグでPostをロードするとき、それがクラッシュします。データベース(PhpMyAdmin)の投稿からの画像(私はただ1枚欲しい)を繰り返します

あなたが私が問題を解決して実用的なコードを持っているのを手伝ってもらえますか?

重要な更新:私はRSSフィードを使用しています、そしてImageもフィードに含めることを要求します(投稿テーブルデータベースを意味します)

これが私のfunctions.phpのコードです。

/**
 * Prepend image to post if it has a specific tag
 *
 * @param String $content - WP Post Content for display
 *
 * @return String $content - WP Post Content for display
*/ 
function theme_videos_append_image( $content ) {

    global $post;

    // It would be easier if you got this URL from Attachment ID
    $upload_dir_arr     = wp_upload_dir();  // Get upload directory array ( https://developer.wordpress.org/reference/functions/wp_upload_dir/#user-contributed-notes )
    $static_image_url   = $upload_dir_arr['baseurl'] . '/2017/11/upliftingscroll.jpg';

    // Ensure we are viewing a Post, and it has the Videos tag
    if( has_tag( 'Videos', $post->ID ) ) {

        $has_image = get_post_meta( $post->ID, '_video_image_added', true );    // Check if our postmeta exists

        // If is does not have our postmeta - add it
        if( empty( $has_image ) ) {

            $image      = sprintf( '<p><img src="%1$s" alt="" class="img-responsive" /></p>', $static_image_url );  // Create image
            $content    = $image . $content;    // prepend image

            // Update post so we don't need to add the image again
            $success = wp_update_post( array(
                'ID'            => $post->ID,
                'post_content'  => $image . $post->post_content,
            ) );

            // If the post updated, create postmeta letting us know later it has the image
            if( false !== $success && !is_wp_error( $success ) ) {
                update_post_meta( $post->ID, '_video_image_added', true );
            }

        }

    }

    return $content;

}
add_filter( 'the_content', 'theme_videos_append_image' );
1
ricardorios

あなたの関数をもっと単純化したものを紹介します。

<?php

    add_filter( 'the_content', 'theme_videos_append_image' );

    function theme_videos_append_image( $content ) {

        global $post;

        $upload_dir_arr     = wp_upload_dir();
        $static_image_url   = $upload_dir_arr['baseurl'] . '/2017/11/upliftingscroll.jpg';
        $tag = '<p><img src="' . $static_image_url . '" alt="" class="img-responsive" /></p>';

        return has_tag( 'Videos', $post->ID ) ? $tag . $content : $content;

    }

?>

それが画像のURLを取得するための最も洗練された解決策であるかどうかを確認してください。ちょっと変に思えます。

wp_update_postではthe_contentフィルタも適用されるかもしれないので、あなたが言及したループはおそらく存在します。あなたの解決策に固執したいのであれば、最初に投稿メタを追加してから投稿内容を更新してみてください...しかし私はこれが必要だとは思わない。

1
GDY

Johannes Grandyソリューションの拡張また、the_excerpt_rssフィルタにフックする必要があります。

add_filter('the_excerpt_rss', 'theme_videos_append_image');

add_filter( 'the_content', 'theme_videos_append_image' );

function theme_videos_append_image( $content ) {

        global $post;

        $upload_dir_arr     = wp_upload_dir();
        $static_image_url   = $upload_dir_arr['baseurl'] . '/2017/11/upliftingscroll.jpg';
        $tag = '<p><img src="' . $static_image_url . '" alt="" class="img-responsive" /></p>';

        return has_tag( 'Videos', $post->ID ) ? $tag . $content : $content;

}
0
Skatox