Do_shortcode函数在WordPress之外不起作用?

时间:2015-09-25 19:52:10

标签: php wordpress shortcode

当我尝试使用此代码运行短代码时:

define( 'WP_USE_THEMES', false );        
require_once('account/wp-blog-header.php');
require_once('account/wp-includes/shortcodes.php');

global $current_user;
get_currentuserinfo();
print_r($current_user);

get_header();
$page_object = get_page( 28 );
var_dump($page_object);
echo do_shortcode($page_object->post_content);

我的页面只有标题,所以do_shortcode不起作用。 page_object的转储返回给我:

object(WP_Post)[276]
  public 'ID' => int 28
  public 'post_author' => string '1' (length=1)
  public 'post_date' => string '2015-09-22 12:14:16' (length=19)
  public 'post_date_gmt' => string '2015-09-22 12:14:16' (length=19)
  public 'post_content' => string '[pmpro_levels]' (length=14)
  public 'post_title' => string 'Membership Levels' (length=17)
  public 'post_excerpt' => string '' (length=0)
  public 'post_status' => string 'publish' (length=7)
  public 'comment_status' => string 'closed' (length=6)
  public 'ping_status' => string 'closed' (length=6)
  public 'post_password' => string '' (length=0)
  public 'post_name' => string 'levels' (length=6)
  public 'to_ping' => string '' (length=0)
  public 'pinged' => string '' (length=0)
  public 'post_modified' => string '2015-09-22 12:14:16' (length=19)
  public 'post_modified_gmt' => string '2015-09-22 12:14:16' (length=19)
  public 'post_content_filtered' => string '' (length=0)
  public 'post_parent' => int 22
  public 'guid' => string 'http://phpstack-10604-23437-55300.cloudwaysapps.com/account/membership-account-2/membership-levels/' (length=99)
  public 'menu_order' => int 0
  public 'post_type' => string 'page' (length=4)
  public 'post_mime_type' => string '' (length=0)
  public 'comment_count' => string '0' (length=1)
  public 'filter' => string 'raw' (length=3)

$page_object->post_content;返回我[pmpro_levels],但是 do_shortcode()不解析短代码。 一切都在WordPress目录中运行,因为你可以看到我称之为wp-blog-header.php,但它没有用。 为什么呢?

1 个答案:

答案 0 :(得分:0)

你应该尝试apply_filter

$ content = apply_filters(' the_content',$ content);

apply_filters(' the_content',$ content);用于将内容过滤器应用于原始未过滤的帖子内容,这通常来自使用$ post-> post_content。这些过滤器包括着名的过滤器wp_autop,它将p标签添加到the_content()

apply_filters(' the_content',$ content);通常与get_posts结合使用,其中一个直接使用WP_Post对象而不使用setup_postdata($ post),这使得模板标签如the_content()可供使用

更新 - 这就是你的代码应该是

的方式
get_header();
$page_object = get_page( 28 );
echo apply_filters('the_content', $page_object->post_content);