Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 同一页面上自定义帖子类型的2个WP_查询循环_Php_Wordpress_Loops_Slider_Custom Post Type - Fatal编程技术网

Php 同一页面上自定义帖子类型的2个WP_查询循环

Php 同一页面上自定义帖子类型的2个WP_查询循环,php,wordpress,loops,slider,custom-post-type,Php,Wordpress,Loops,Slider,Custom Post Type,我很难解决这个问题,因为我想不出来。 我在同一个页面上为自定义帖子类型(slider和portfolio)使用了2个WP_查询循环。 我还为这两种自定义帖子类型创建了一个自定义元框 下面是index.php的代码,我将其用作显示滑块和公文包项目的主模板: <?php /* Template Name: Home */ ?> <?php get_header(); ?> <div id="header-container">

我很难解决这个问题,因为我想不出来。 我在同一个页面上为自定义帖子类型(slider和portfolio)使用了2个WP_查询循环。 我还为这两种自定义帖子类型创建了一个自定义元框

下面是index.php的代码,我将其用作显示滑块和公文包项目的主模板:

<?php
/*

    Template Name: Home

*/
?>
<?php get_header(); ?>

    <div id="header-container">
        <div id="header">

            <?php rm_slider(); ?> // This is where Im calling slider function to display the slider.

        </div>
    </div>

    <div id="content">
        <div class="container">

            <?php $loop = new WP_Query(

                array(
                    'post_type' => 'portfolio',
                    'posts_per_page' => -1
                ));
            ?>

            <?php if ($loop->have_posts()) { ?>

            <ul class="services">

                <?php while ($loop->have_posts()) : $loop->the_post(); ?>

                    <li>
                        <?php if (has_post_thumbnail()) : the_post_thumbnail(); ?>

                            <?php else: ?>

                                <p>No portfolio image</p>

                        <?php endif; ?>

                        <h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>

                        <p>Client: <?php echo get_post_meta($post->ID, '_project_client', true); ?></p>
                        <p>Client website: <?php echo get_post_meta($post->ID, '_project_client_url', true); ?></p>
                    </li>

                <?php endwhile; } ?>

                <?php wp_reset_query(); ?>

    <?php get_footer(); ?>

//这就是我调用slider函数来显示滑块的地方。
  • 没有投资组合形象

    客户:

    客户网站:

下面是slider.php的代码:

<?php

// create slider markup
function rm_slider() {

    $slider_loop = new WP_Query(

        array(
            'post_type' => 'slider',
            'posts_per_page' => -1
        ));

    if ($slider_loop->have_posts()) { ?>

        <div id="slider">
            <div class="slider-container">

                <?php while ($slider_loop->have_posts()) : $slider_loop->the_post(); ?>

                       <div>

                            <?php if (has_post_thumbnail()) : the_post_thumbnail(); ?>

                            <?php else: ?>

                                <p>No slider image</p>

                            <?php endif; ?>

                                <div class="slide-info">
                                    <h2><?php the_title(); ?></h2>
                                    <?php the_content(); ?>
                                </div>

                            <?php

                                $slide_url = get_post_meta($post->ID, '_slide_url', true);

                                if ($slide_url != '') { ?>

                                    <a href="<?php echo $slide_url; ?>" class="more-info"><?php echo $slide_url; ?></a>

                                <?php } else { echo 'empty?'; ?>

                            <?php

                                }

                            ?>

                        </div>

                <?php endwhile; ?>

            </div><!-- .slider-container -->
        </div><!-- #slider -->

    <?php }

    wp_reset_query();
}

?>

无滑块图像


我确信来自自定义元框的实际内容在那里,因为当我只使用1个循环时,它会完美地显示出来。但是当使用这两个循环时,它只显示公文包部分的自定义post meta。我整天都在为这个问题挣扎,请帮帮我!谢谢:)

奇怪,请尝试更改此选项:

$slide_url = get_post_meta($post->ID, '_slide_url', true);
echo get_post_meta($post->ID, '_project_client', true);
为此:

$slide_url = get_post_meta(get_the_ID(), '_slide_url', true);
echo get_post_meta(get_the_ID(), '_project_client', true);
你也可以尝试获取所有的post meta,看看它是否都在那里

$meta = get_post_meta( get_the_ID( ) );
print_r($meta); // prints the meta array to the screen, check your data is there.

据我所知,在每次
WP\u Query()
之后,您应该使用:

wp_reset_postdata();
wp_reset_query()。试试这个

$wp\u查询
和全局post数据恢复到原始主查询。如果必须使用此函数,则应在
查询\u帖子(
)之后调用此函数。如以下示例所述,强烈建议在进行查询之前使用
pre\u get\u posts
过滤器更改查询参数

用于在使用新的
WP\u query
的辅助查询循环之后,还原主查询循环的全局
$post
变量。它将$post变量恢复到主查询中的当前post


我还建议您尝试将可能的冗余变量名称(如
$loop
)更改为
$portfoliowLoop
等。

困难的一点是,我会在rm_slider()函数中添加调试语句,以找出如果确实调用该函数,该函数会在什么时候失败。我该怎么做?Im noob in PHP:)另外@Joe提供的解决方案也有效。我已经尝试过了,但没有成功。现在我把wp_reset_查询都改为wp_reset_postdata,但还是什么都没有。我相信如果你使用query_posts,你只需要执行wp_reset_查询。如果每次都使用新的WP_Query(),应该是安全的。进一步阅读:谢谢@Joe我忘了写我试过打印get_post_custom,是的,数据在那里。这就是我得到的:数组([\u edit\u last]=>Array([0]=>1)[\u edit\u lock]=>Array([0]=>138347235:1)[\u slide\u url]=>Array([0]=>something.com]),然后我尝试了你的建议,效果很好。我知道还有其他方法可以获得身份证,但我忘了,我尝试了一些类似$post_ID的东西,但不起作用。但这似乎效果很好。如果可能的话,你能向我解释一下,这是如何工作的,为什么$post->ID不工作,但是get_ID()可以工作?谢谢:)我不是100%确定。我想当你调用
$loop->the_post()
它使某些函数像
标题()
ID()
一样工作,我发现它也会停止$loop对象的工作,而不调用
帖子()。我认为
$post->ID
不起作用的原因是因为它应该是
$loop->ID
$slider\u loop->ID
我不太懂,因为我不擅长PHP,但我也会把ID改成$loop->ID。不知道你是不是这个意思。所以再次感谢您的帮助:)我得到了一件与此无关的事情,我希望滑块只在WP管理中可用。因为现在你可以访问mysite.com/slider/slide-1,它会显示内容。设置public->false将修复此问题,但滑块将从管理菜单中消失。我通过使用show_ui、show_in_menu等来显示它。但问题是,在创建新幻灯片时,显示URL的slug框会消失。之所以
$loop->ID
有效,是因为您调用了
$loop=new WP_Query()
这使$loop成为一个“PHP对象”,以访问您使用的对象的方法,例如
$loop->post_title
。您正在调用的
$post->ID
$post不是$loop所在的对象。欲了解更多信息,请访问“面向对象的php”。至于你的第二个问题,我建议你提出一个新问题。给我按摩一下,我会来接的。你问题的答案已经准备好了,我会给你一个线索谢谢你的解释,我现在明白多了。至于第二个问题,它以某种方式修复了自己,现在它工作了,即使将public设置为true,我得到404错误,我仍然可以在admin菜单中看到它。Wordpress有时很奇怪:)我还有其他问题,但如果你能帮忙的话,我会给你发一个下午。谢谢:)