私は子テーマと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' );
あなたの関数をもっと単純化したものを紹介します。
<?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
フィルタも適用されるかもしれないので、あなたが言及したループはおそらく存在します。あなたの解決策に固執したいのであれば、最初に投稿メタを追加してから投稿内容を更新してみてください...しかし私はこれが必要だとは思わない。
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;
}