从页面查询中获取元值

时间:2013-04-29 作者:Jamie

我需要检查每个页面,看看它是否有一个默认模板或另一个模板分配。如果它是默认值,我想执行X,如果不是,那么我将执行Y。我发现的问题是查询没有显示该特定字段。我想找到

 [meta_key] => \'_wp_page_template\',
 [meta_value] => \'default\'
这就是我测试的目的,但它似乎不起作用。我在这里搜索了一下,找到了这个代码

 function get_meta_values( $key = \'\', $type = \'page\', $status = \'publish\' ) {
global $wpdb;
if( empty( $key ) )
    return;
$r = $wpdb->get_col( $wpdb->prepare( "
    SELECT DISTINCT pm.meta_value FROM {$wpdb->postmeta} pm
    LEFT JOIN {$wpdb->posts} p ON p.ID = pm.post_id
    WHERE pm.meta_key = \'%s\' 
    AND p.post_status = \'%s\' 
    AND p.post_type = \'%s\'
", $key, $status, $type ) );
return $r;
}
因此,在使用WP\\u query的自定义查询中,我这样检查

 $args = array(
            \'post_type\' => \'page\',
            \'posts_per_page\' => -1,
        );

        $page_query = new WP_Query( $args );

        if ( $page_query->have_posts() ) : while ( $page_query->have_posts() ) : $page_query->the_post(); ?>
        <?php $template = get_meta_values(\'_wp_page_template\');
        if( $template != \'default\'){ ?>
 //run X here
  }
 else {
 //run Y here
  }
 the rest of the loop follows below.
有些页面应该运行X,有些应该运行Y,但它们似乎都在运行X。

你能告诉我我做错了什么吗?当我对$page\\u查询执行var\\u转储时,我在数组中看不到[meta\\u key]字段。这就是为什么我认为get\\u meta\\u values函数可以解决这个问题。

2 个回复
最合适的回答,由SO网友:fuxia 整理而成

当你在while 循环,父查询已完成。因此,使用get_post_meta():

$template = get_post_meta( get_the_ID(), \'_wp_page_template\', TRUE );

SO网友:birgire

如果我没弄错你的问题,你可以试试get_page_template() (#).

下面是一个打印所有页面和相应页面模板的示例:

<?php
$args = array(
    \'post_type\' => \'page\',
    \'posts_per_page\' => -1,
);
$page_query = new WP_Query( $args );
if ( $page_query->have_posts() ){
    while ( $page_query->have_posts() ) : $page_query->the_post(); 
        printf("<strong>%s</strong> has template <strong>%s</strong> <br/>", get_the_title(), basename(get_page_template()));
    endwhile;
}
?>
这将为您提供如下列表:

About has template page.php 
Staff has template page.php 
Products has template tpl_products.php 
...

结束

相关推荐

列出分类法:如果分类法没有POST,就不要列出分类法--取决于定制的POST-META?

这可能很难解释,我不知道是否有解决办法!?我有一个名为“wr\\u event”的自定义帖子类型和一个名为“event\\u type”的分层自定义分类法。自定义帖子类型有一个元框,用于event_date 并且与此帖子类型关联的所有帖子都按以下方式排序event_date. 我在循环中有一个特殊的条件来查询event_date 已经发生了-在这种情况下,它没有显示,但只列在我的档案中。就像你可以使用wp_list_categories() 我编写了一个自定义函数,它以完全相同的方式列出所有分类术语。现在