根据他们使用的模板获取页面ID?

时间:2012-10-30 作者:Calle

我的情况是,我需要根据页面是否使用特定模板,在小部件中提供页面下拉列表。换句话说,对于使用模板“Foo”的所有页面,获取帖子ID。

我已经对小部件的其余部分进行了编码,但我使用了一个输入字段来输入页面ID(这可能会让非技术用户感到混乱,必须找出要使用的页面ID)-我更愿意使用特定模板提供一个带有页面标题的选择框。

我已尝试使用以下内容获取WP\\U查询对象:

$the_query = new WP_Query(array(
    \'meta_key\' => \'_wp_page_template\',
    \'meta_value\' => \'templates/_partner.php\'
));
元值是正确的(对应于数据库中的2个条目),但我在小部件页面上没有得到任何结果。选择框为空。

您不能从小部件调用WP\\u查询,或者我需要在其他地方寻找此解决方案吗?

UPDATE我检查了运行此命令的SQL的$the\\u query->请求,它没有返回任何行。结果是我在查询中缺少了“post\\u type”=>“page”。

3 个回复
最合适的回答,由SO网友:Michal Mau 整理而成

默认情况下,WP\\u查询仅通过帖子。

尝试添加page 作为您的帖子类型:

$the_query = new WP_Query(array(
    \'post_type\'  => \'page\',  /* overrides default \'post\' */
    \'meta_key\'   => \'_wp_page_template\',
    \'meta_value\' => \'templates/_partner.php\'
));
请参见:WP_Query - Type Parameters

SO网友:Ahmad M

您可以使用wp_dropdown_pages() 要直接创建要显示的页面的下拉列表,请执行以下操作:

$args = array(
    \'name\' => \'_partner_page\', // "name" attr of the <select> element
    \'id\' => \'partner-page\', // id attr of the <select> element
    \'hierarchical\' => 1, // set to 0 for flat display
    \'echo\' => 1, // set to 0 to return
    \'selected\' => $post->ID, // ID of the option with "selected" attr, set to 0 to disable
    \'meta_key\' => \'_wp_page_template\',
    \'meta_value\' => \'templates/_partner.php\'
);
wp_dropdown_pages($args);
你可以去很多地方wp_dropdown_pages(). 除了上面的那些codex page 也可以传递上列出的任何参数get_pages() 功能,如wp_dropdown_pages() 使用get_pages() 检索将显示为下拉列表的页面列表。

SO网友:Lasantha

$query= new WP_Query(array(
    \'post_type\'  => \'page\',  /* overrides default \'post\' */
    \'meta_key\'   => \'_wp_page_template\',
    \'meta_value\' => \'page-templates/{template name}.php\'
));
这对我很有用,因为我的自定义主题使用了页面模板文件夹。

结束

相关推荐

If has $title in widgets

我正在写一个小部件来显示125 x 125像素的广告。广告有6个空间,目前所有作品都有。然而,我想添加一些条件逻辑,这样,如果在一个广告的小部件管理中的值中没有输入任何内容,那么就不会显示add。我想这可以通过使用PHP if或其他什么东西来实现,我不记得它到底是什么。我需要它和<?php & ?> 标签打开。需要检查一下$adone 存在,如果不存在,则显示空白。我知道这里的代码是错误的,但类似这样的代码:<?php if_has($adone_img) ?>