What I\'m Trying To Do
我已经为“电影”设置了自定义帖子类型,下面是我如何设置模板的。基本上,我想
a.thickbox
(在下面的代码中)打开一个模式窗口,其中包含有关电影的更多信息。注意添加了
&pid=<?php echo $post->ID; ?>
在
href
.
<?php get_header();?>
<section id="content">
<h2>Our Movies</h2>
<ul id="all-movies">
<?php
$c=0;
$i=1;
$temp = $wp_query;
$wp_query = null;
$wp_query = new WP_Query();
$wp_query->query(\'post_type=movies\' . \'&paged=\' . $paged . \'&posts_per_page=6\');
while ( $wp_query->have_posts() ) : $wp_query->the_post(); $c++;
$custom = get_post_custom($post->ID);
$movie_info = $custom["movie_info"][0];
?>
<li id="movie-<?php the_ID(); ?>">
<?php if (!empty($movie_info)) { echo $movie_info ?>
<a class="thickbox" href="<?php bloginfo(\'url\'); ?>/movies-modal?KeepThis=true&TB_iframe=true&height=820&width=610&pid=<?php echo $post->ID; ?>">View more info</a>
</li>
<?php
endwhile;
my_paginate_links();
$wp_query = null;
$wp_query = $temp;
wp_reset_query();
?>
</ul>
</section>
<?php get_sidebar(); ?>
<?php get_footer(); ?>
My (Failed) Attempt
我试图做的是创建一个单独的模板(如下所示),在仪表板中创建一个名为“Movies Modal”的页面,并将模板属性化到该页面。然后,我试图抓住
POST ID
从
a.thickbox
来自上面模板的链接(
&pid=<?php echo $post->ID; ?>
) 因此,只有该帖子的信息才会显示在下面的模式模板中,并带有以下行:
$wp_query->query( \'post_type=movies&p=\' . $_GET[\'pid\']);
<?php
/*
Template Name: Movies (Modal)
*/
?>
<?php get_header(\'thickbox\'); ?>
<?php
$c=0;
$i=1;
$temp = $wp_query;
$wp_query = null;
$wp_query = new WP_Query();
$wp_query->query( \'post_type=movies&p=\' . $_GET[\'pid\']);
while ( $wp_query->have_posts() ) : $wp_query->the_post(); $c++;
$custom = get_post_custom($post->ID);
$movie_info = $custom["movie_info"][0];
$actor_bio = $custom["actor_bio"][0];
$actor_info = $custom["actor_info"][0];
?>
<div id="container">
<?php if (!empty($movie_info)) { echo $movie_info ?>
<?php if (!empty($actor_bio)) { echo $actor_bio ?>
<?php if (!empty($actor_info)) { echo $actor_info ?>
</div>
<?php
endwhile;
$wp_query = null;
$wp_query = $temp;
wp_reset_query();
?>
</body>
</html>
然而,所有这一切只是打开一个模式窗口,其中包含所有帖子的信息,而不仅仅是链接所在帖子的信息,如下所示:
我想不出如何只获取我点击的帖子的信息。有人能帮我摆脱困境或者把我推向正确的方向吗?
Updates
pid is not set\\ngettype: NULLpid intval: 0Array
(
[post] => post
[page] => page
[attachment] => attachment
[revision] => revision
[nav_menu_item] => nav_menu_item
[product] => product
[product_variation] => product_variation
[shop_order] => shop_order
[shop_coupon] => shop_coupon
[wpcf7_contact_form] => wpcf7_contact_form
[movies] => movies
[psdtv] => psdtv
)
Wordpress version: 3.5
已更改此块:
<li id="movie-<?php the_ID(); ?>">
<?php if (!empty($movie_info)) { echo \'<span>Summary: \'. $movie_info .\'</span>\'; } ?>
<a class="thickbox" href="<?php bloginfo(\'url\'); ?>/movies-modal/?KeepThis=true&TB_iframe=true&height=820&width=610&pid=<?php the_ID(); ?>">View more info</a>
</li>
最合适的回答,由SO网友:Tom J Nowell 整理而成
看来你使用Thickbox才是罪魁祸首。通过定位打开thickbox时,thickbox参数必须始终为最后一个,否则其他参数将被删除,例如您的电影帖子ID
http://devll.wordpress.com/2009/10/01/jquery-iframe-thickbox-removes-parameter/
首先,你使用的查询是不正确的,而且你从来没有告诉你的查询要查找哪个帖子。
相反,您应该进行适当的查询,例如:
$movie_query = new WP_Query( array(
\'post_type\' => \'movies\',
\'p\' => $_GET[\'pid\']
));
if($movie_query->have_posts()){
while ( $movie_query->have_posts() ) {
$movie_query->the_post();
$custom = get_post_custom($post->ID);
$movie_info = $custom["movie_info"][0];
$actor_bio = $custom["actor_bio"][0];
$actor_info = $custom["actor_info"][0];
?>
<div id="container">
<?php if (!empty($movie_info)) { echo $movie_info ?>
<?php if (!empty($actor_bio)) { echo $actor_bio ?>
<?php if (!empty($actor_info)) { echo $actor_info ?>
</div>
<?php
}
}
wp_reset_postdata();
在继续之前,您需要掌握如何干净地执行基本查询,以及为什么和何时使用它。为此,我向您提供以下信息:
切勿直接修改主查询。(只有在将其传递到pre_get_posts
过滤器)避免query_posts
阅读此快速演示文稿Andrew Nacin, You don\'t know Query, 它会告诉你使用什么,如何使用,以及为什么。许多人都认为necessary 阅读编辑:
请将以下代码片段粘贴到我修改后的查询版本上:
echo \'<pre>\';
if(isset($_GET[\'pid\'])){
echo \'pid is set\\n\';
} else {
echo \'pid is not set\\n\';
}
echo \'gettype: \'. gettype($_GET[\'pid\']);
echo \'pid intval: \'.intval($_GET[\'pid\']);
$post_types=get_post_types();
print_r($post_types);
echo \'Wordpress version: \'.get_bloginfo(\'version\');
echo \'</pre>\';
编辑:
主列表中的此代码已损坏:
<li id="movie-<?php the_ID(); ?>">
<?php if (!empty($movie_info)) { echo $movie_info ?>
<a class="thickbox" href="<?php bloginfo(\'url\'); ?>/movies-modal?KeepThis=true&TB_iframe=true&height=820&width=610&pid=<?php echo $post->ID; ?>">View more info</a>
</li>
您从未为if语句或分号添加右括号。我建议您也更换
echo $post->ID;
具有
the_ID();
并验证它是否确实打印了正确的ID。我还建议在?
KeepThis
以及
movies-model