我找到了一些关于在JS中使用PHP的文章,但到目前为止没有任何帮助,所以这里是我的问题。我需要调用wordpress帖子内容(标题,摘录和缩略图)到一个JS"预览"功能(本质上调用ThumbnailGridExpandingPreview的帖子)。我已经能够从帖子缩略图和标题中打开"扩展预览",但是我在将帖子内容添加到预览中遇到了麻烦。
我试图将php调用添加到"grid.js"文件中的预览函数,但我不确定如何"最小化"php代码。下面是我的代码。
原始代码:
this.$title = $( '<h3></h3>' );
这里是我如何尝试调用帖子标题:
this.$title = $( '<h3><?php echo get_the_title(); ?></h3>' );
任何帮助将非常感激!
说明:PHP是一种服务器端语言;这意味着它只能在服务器端进行解析和执行。也就是说,你在这里有两个选择,一个更优雅,另一个有点蹩脚(我只会在非常罕见和有限的情况下使用它):
-
优雅的解决方案:Wordpress Ajax。在functions.php文件中设置一个ajax可调用的函数,该函数返回填充数据的html:
。在functions.php文件中添加一个ajax可调用的操作:
add_action("wp_ajax_[function_name]", "function_name"); //If the action wants users to be logged in, you can specify a different function to be called in case a user is not: //add_action("wp_ajax_nopriv_[function_name]", "[function_name_for_non_logged_users]");
b。指定要调用的函数(如果需要,请为未登录的用户指定第二个函数)
function function_name() { //It is good practice to use nonce verification if (!wp_verify_nonce( $_REQUEST['nonce'], "function_name_nonce")) { exit("[Your scary message against bad people]"); } // Make your query here. $post_id = $_REQUEST["post_id"]; $post = get_post($id, ARRAY_A); // Return your data. Here I go with a simple JSON. $result = json_encode($result); echo $result; }
c。在模板的某个地方编写前端代码(显然要让它对grid.js调用可用)。您需要用您的帖子数据填充$post。我倾向于使用全局包装器:
<script type="text/javascript"> <?php $nonce = wp_create_nonce('function_name_nonce'); $endpoint = admin_url('admin-ajax.php'); ?> var Globals = { nonce: "<?php echo $nonce; ?>", postId: "<?php echo $post->ID; ?>", endpoint: "<?php echo $endpoint; ?>" } </script>
d。从现在开始,它是由你来做ajax调用(我没有任何引用到你的代码),但它是非常简单的:
$.ajax({ type: "post", dataType: "json", url: Globals.endpoint, data: { action: "function_name", post_id: Globals.postId, nonce: Globals.nonce }, success: function(response) { //Aaaaand here's your post data console.log(response); } });
参见http://codex.wordpress.org/Plugin_API/Action_Reference/wp_ajax_(action)。
这是一个很好的教程(发现它在谷歌的第一页):http://wp.smashingmagazine.com/2011/10/18/how-to-use-ajax-in-wordpress/
-
蹩脚的解决方案:生成数据填充的JS代码(我会坚持JS对象)。在这种情况下,您将需要在页面(模板或其他任何可以访问PHP的内容)中添加一个额外的脚本标记,以便在其中输出JS有效代码:
var title = "<?php the_title(); ?>";