WordPress帖子中iframe src中的WordPress内容.php文件

时间:2013-08-29 作者:user36316

我想在帖子中插入一个带有WordPress内容的iframe。我解释我自己。我有两件事:一个帖子和一个演讲。在the_content() WordPress过滤器,我将iframe添加到$内容。此iframe有一个指向自定义的src。php文件,并在其中。php我想访问我的循环,但我无法做到这一点。

所以我作弊并通过URL传递帖子的ID,所以我的iframe代码是:

<iframe src=\\"".WP_PLUGIN_URL."/presentation/embedded_presentation_iframe.php?postid=". get_the_ID() ."\\" id=\\"embedded-frame-presentation\\"
在我的内心。php我使用这个:

$postid = $_GET["postid"];
...
echo do_shortcode( get_post_meta($postid, \'awp_slides\', true) ); 
现在的问题是,我有一些插件添加了一些可能的短代码,而我的短代码被转换成插件语法,但因为我的。php文件在wordpress循环之外,转换后的短代码不应用于我的iframe。。。

所以我想我有两种方法来解决这个问题,但我不知道如何做到这两个:

我试着把我的。php文件(即iframe的src)放入wordpress的循环中,我不知道我的$内容是如何处理的,插件是如何应用到我的iframe的,或者wordpress中可能存在一个函数,它将是我的$内容,但已经处理过了,而不是使用do_shortcode( get_post_meta($postid, \'awp_slides\', true) ); 我可以用这样的东西apply_plugins(do_shortcode( get_post_meta($postid, \'awp_slides\', true) ));

2 个回复
SO网友:Dave Ross

WordPress安装的根目录中有一个名为wp-load.php. 如果您将该文件包含在的顶部。php文件,它将引导足够的WordPress,您将能够访问其API并执行您的短代码。

However, there\'s a better way to do it.

请看,使用您使用的方法,您正在硬编码代码中文件的路径。即使您使用的是WP\\u PLUGIN\\u URL,如果有人(可能将来也包括您)想要重命名插件或移动插件,会发生什么情况。php文件到其他位置?

WordPress为handling AJAX requests in plugins. 开始使用它真的很容易,而且它将为您节省很多麻烦,尤其是如果您公开发布此插件代码。

首先,插件需要注册AJAX处理程序。

// You can replace \'myactionname\' with your own custom name
// like "user36316_renderiframe"
add_action( \'wp_ajax_nopriv_myactionname\', \'myaction_handler\' );
function myaction_handler() {

    // Render your iframe content here

    // Be sure to die() when you\'re done
    // or WordPress will append a \'0\' to the output
    // as a status code
    die();

}
请注意操作名称中的“nopriv”。WordPress的AJAX支持最初是为他们的管理界面构建的,因此它默认检查管理访问。如果您只想让登录的管理员运行您的AJAX代码,那么您应该去掉“nopriv”并注册操作wp_ajax_myactionname. 但是您希望每个人都能够渲染这个iframe,所以请在其中保留“nopriv”。

现在您正在使用WordPress的AJAX API,您可以让WordPress来确定AJAX端点的位置。由于AJAX最初只用于管理员,因此wp-admin/admin-ajax.php 已使用,并且admin_url() 函数将告诉您在哪里可以找到它:

<iframe src=<?php echo add_query_arg( \'action\', \'myactionname\', admin_url( \'admin-ajax.php\' ) ); ?>
Theadd_query_arg() 调用会将您的操作名称附加到AJAX请求中。使用此函数更安全,而不只是附加值以防万一admin_url() 在某个点开始返回自己的查询字符串。

您还想传递postid,并且add_query_arg 如果传入查询参数数组,也可以在这方面提供帮助:

<iframe src=<?php echo add_query_arg( array( \'action\' => \'myactionname\', \'postid\' => get_the_ID() ), admin_url( \'admin-ajax.php\' ) ); ?>

SO网友:codebird

这将更好地作为一个评论添加到上面,但我缺乏足够的“声誉点”。。。因此,首先,非常感谢戴夫·罗斯(DaveRoss)提供了非常有用的答案。现在我已经在插件中使用了它,我只有一个简短的附录。您写道:

如果您只想让登录的管理员运行您的AJAX代码,那么就不要使用“nopriv”,而是注册操作wp\\u AJAX\\u myactionname。但是您希望每个人都能够渲染这个iframe,所以请在其中保留“nopriv”。

不过,如果您想在登录时使用该功能,则必须同时包含这两个功能

add_action( \'wp_ajax_myactionname\', \'myaction_handler\' );
以及

add_action( \'wp_ajax_nopriv_myactionname\', \'myaction_handler\' );
最初,我只有后者,并且一直将“0”作为iframe的唯一内容。如果我注销了WP admin,则内容加载正常。如果我同时包含两个add\\u操作变体,则无论我是否登录,它都会起作用。也许这会对其他有类似问题的人有所帮助。

结束