Php WordPress按ID获取页面返回奇怪的结果

Php WordPress按ID获取页面返回奇怪的结果,php,wordpress,function,meta-boxes,Php,Wordpress,Function,Meta Boxes,我有一个CMS设置的客户端与三个元框的相关内容。客户所要做的就是输入一个页面段塞(每个页面一个),网站将返回三个相关产品 一切都很顺利,直到我的客户不小心拼错了一个鼻涕虫。WordPress没有为这个点返回任何内容,而是返回大约6个随机项目 在FUNCTIONS.PHP中: function get_ID_by_page_name($page_name) { global $wpdb; $page_name_id = $wpdb->get_var("SELECT ID FROM $wpdb

我有一个CMS设置的客户端与三个元框的相关内容。客户所要做的就是输入一个页面段塞(每个页面一个),网站将返回三个相关产品

一切都很顺利,直到我的客户不小心拼错了一个鼻涕虫。WordPress没有为这个点返回任何内容,而是返回大约6个随机项目

在FUNCTIONS.PHP中:

function get_ID_by_page_name($page_name) {
global $wpdb;
$page_name_id = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_name = '".$page_name."' AND post_type = 'page'");
return $page_name_id;
}

在模板文件中:

$goesWith = get_post_meta($post->ID, 'goes_with', true);

if (($goesWith) or ($goesWith2) or ($goesWith3)) {

            echo "<div class='goes-with'>";

            echo  "<h2>Goes Great With:</h2>";                      

            // OPTION ONE

                $pageID = get_ID_by_page_name($goesWith);

                    if ($goesWith) { 

                        $args = array(
                            'post_type'      => 'page',
                            'page_id'     => $pageID,
                            'post_status' => 'publish'
                        );
                        query_posts( $args );

                        while(have_posts()) {

                            the_post(); // vital                                                        

                            echo "<div class='post-product'>";
                            echo "<a href=";
                            the_permalink();
                            echo ">";
                            thumbPath(140, 140);
                            echo "</a><a href=";
                            the_permalink();
                            echo "><p>";
                            the_title();
                            echo "</p></a></div><!--end post-product-->";

                       }



                    }

                    else {

                        echo "";

                    } 


            wp_reset_query();  
$goesWith=get\u post\u meta($post->ID,'goes\u with',true);
如果($goesWith)或($goesWith2)或($goesWith3)){
回声“;
echo“非常适合:”;
//选择一
$pageID=通过页面名称获取页面ID($goesWith);
如果($goesWith){
$args=数组(
“post_type”=>“page”,
“page_id”=>$pageID,
“发布状态”=>“发布”
);
查询职位($args);
while(have_posts()){
_post();//至关重要
回声“;
回声“;
}
}
否则{
回声“;
} 
wp_reset_query();

首先,您不需要任何自定义代码来执行您正在执行的操作:

$goes_with = get_post_meta(get_the_ID(), 'goes_with'); //Returns array when 3rd parameter is left empty or false
foreach($goes_with as $slug){
    $args = array(
        'post_type'   => 'page',
        'post_status' => 'publish',
        'pagename'    => $slug
    );
    query_posts( $args ); //Bad way
    while(have_posts()){ the_post(); //Bad way

    //$query = new WP_Query($args); //Good way
    //while($query->have_posts()){ $query->the_post(); //Good way                                                         

        echo "<div class='post-product'>";
        echo "<a href='".get_permalink()."'>";
        thumbPath(140, 140);
        echo "</a><a href='".get_permalink()."'><p>".get_the_title()."</p></a></div><!--end post-product-->";
    } 
    wp_reset_query(); //Bad way
    //wp_reset_postdata(); //Good way
}
$goes_with=get_post_meta(get_the_ID(),'goes_with');//当第三个参数为空或为false时返回数组
foreach($与$slug一起使用){
$args=数组(
“post_type”=>“page”,
“发布状态”=>“发布”,
“pagename”=>$slug
);
query_posts($args);//坏方法
while(have_posts()){the_post();//坏方法
//$query=new WP_query($args);//好方法
//while($query->have_posts()){$query->the_post();//好方法
回声“;
回声“;
} 
wp_reset_query();//坏方法
//wp_reset_postdata();//好方法
}

第二,你应该绝对避免使用QuyRelpScript()。这可能太晚了,因为你的主题已经被发送到你的客户端,但是你应该考虑从QueYrPoST切换到如果把额外的时间放在你的主题中不是问题。 使用WP_查询可以显著提高性能,而且它不会改变任何Wordpress全局变量

如果您想了解它是如何实现的,可以随意注释掉所有标记为“Bad-way”的行,并取消注释所有标记为“Good-way”的行

此外,使用上述代码,您可以在自定义元字段中重复使用相同的“goes_with”键,以链接到给定页面查询所需的任意多个其他页面。由于您是按页面名而不是ID运行查询,因此必须在循环中执行此特定方法

然而,与原始版本相比,这种方法的好处在于,您依赖Wordpress的内置功能来为您进行查询,而不是额外调用数据库以返回您已有的结果

此代码未经测试,可能需要进行一些重构,以使其与您的设置一起工作,但它应该可以帮助您开始

希望这对您有所帮助,祝您好运。

有关