在模式窗口中获取帖子信息?

时间:2013-01-14 作者:Desi

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 IDa.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>
然而,所有这一切只是打开一个模式窗口,其中包含所有帖子的信息,而不仅仅是链接所在帖子的信息,如下所示:

modal window

我想不出如何只获取我点击的帖子的信息。有人能帮我摆脱困境或者把我推向正确的方向吗?

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>

1 个回复
最合适的回答,由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_postsAndrew 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

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post