web-dev-qa-db-ja.com

Wordpress:関数get_post_field()を使用して投稿コンテンツを取得するときにショートコードが機能しない

ループの外でIDで投稿コンテンツを取得したいので、次のコードを使用しています:

_    echo get_post_field('post_content', $postid);
_

正常に機能しますが、投稿にショートコードが含まれていると、ショートコードが正しく機能しません。ショートコードをプレーンテキストとしてエコーするだけです。

例:エディターで次のコードを使用して、画像と画像内のキャプションテキストを表示しています。

_    [caption id="attachment_23" align="alignnone" width="300"]<img class="size-medium wp-image-23 " alt="" src="http://localhost/wordpress/wp-content/uploads/2014/03/Desert-300x225.jpg" width="300" height="225" /> this is caption[/caption]
_

しかし、関数get_post_field()を使用してこの投稿コンテンツを取得すると、キャプションテキストを表示する代わりに、次のように表示されます。

_    [caption id="attachment_23" align="alignnone" width="300"]this is caption[/caption] 
_

解決策はありますか?

N.B:コンテンツを取得するためにajaxを使用しています

10
user3396122

これは機能します:

echo do_shortcode(get_post_field('post_content', $postid));

編集

Ajax内でショートコードを強制的に出力したい場合は、 AJAXリクエスト 内でショートコードを実行する)を参照してください。

20
Rahil Wazir

コンテンツを表示する前にフィルタリングする必要があるため、次のコードを試してください。

_echo apply_filters( 'the_content', get_post_field('post_content', $postid) );
_

更新: _wp_ajax_にフックされたajax呼び出しを使用してショートコードを出力することはできません。 _WP Ajax_は、_admin.php_を介してパブリックコールとクローズドコールの両方を実行します。これは、_/wp-includes/shortcodes.php_内にあるdo_shortcode()などのwp環境全体にアクセスできないことを意味します。

12
andreivictor

これは私にとってはうまくいきます。

echo apply_filters( 'the_content'、get_post_field( 'post_content'、$ postid));

私はループの外でそれをしているので。

3
Rashmi Narware