我的wordpress主题WPF的自定义帖子类型(引用)出现问题。 github上的版本在functions.php中有自定义的帖子类型,但是我把它移到了插件(wpf quote)。我还添加了一个自定义小部件。
问题: 我的主要查询不包括自定义帖子类型“引用”(希望很好,这是预期的)。可以通过以下方式访问报价帖类型:[domain] / quote /。这工作正常,在此页面上小部件也可以正常工作。但是在非引用页面上出错(就像在主页上一样)。小部件显示“内容”和2个元值。 2个元值未显示在非引用页面上。
我查看了查询,因此我将echo '<pre>'; print_r($GLOBALS['wp_query']->request); echo '</pre>';
添加到了我的插件中。
在报价页面上:
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts WHERE 1=1 AND wp_posts.post_type = 'quote' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private') ORDER BY wp_posts.post_date DESC LIMIT 0, 5
在非引用页面上:
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts WHERE 1=1 AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private') ORDER BY wp_posts.post_date DESC LIMIT 0, 5
唯一的区别是wp_posts.post_type = 'quote'
与wp_posts.post_type = 'post'
。
所以第一个(引用)是正确的。我不明白为什么它会改回到无报价页面上的帖子。这是我的WP_Widget-child中的widget()函数:
<?php
public function widget($args, $instance) {
extract($args, EXTR_SKIP);
$title = empty($instance['title']) ? '' : apply_filters('widget_title', $instance['title']);
$read_more = $instance['read_more'];
echo $before_widget;
if (!empty($title)) echo $before_title . $title . $after_title;;
$quotes = get_posts(array('numberposts' => 1, 'orderby' => 'rand', 'post_type' => 'quote'));
if (count($quotes) > 0) {
foreach($quotes as $post) {
echo '<pre>'; print_r($quotes); echo '</pre>';
setup_postdata($post);
// print the quote
wpf_quote_print();
}
if (!empty($read_more)) {
printf('<p><a href="%s">%s</a></p>', esc_url(home_url()) . '/quote/', __('Read more quotes', 'wpf_quote'));
}
} else {
echo '<p>' . __('There are no quotes yet', 'wpf_quote') . '</p>';
}
echo $after_widget;
}
?>
在foreach中调用的函数是:
<?php
function wpf_quote_print() {
// get the meta value's
$quote_meta = get_post_custom();
// first check if 'source_is_url' and 'quote_source' are not empty and prints the source as url. Else print source within parentheses.
if (!empty($quote_meta['source_is_url'][0]) and !empty($quote_meta['quote_source'][0])) {
$cite = '<cite><a href="' . $quote_meta['quote_source'][0] . '">' . $quote_meta['person'][0] . '</a></cite>';
} else {
$cite = '<cite>' . $quote_meta['person'][0];
if (!empty($quote_meta['quote_source'][0])) $cite .= ' (' . $quote_meta['quote_source'][0] . ')';
$cite .= '</cite>';
}
// print the html
echo '<blockquote>' . get_the_content() . $cite . '</blockquote>';
}
?>
那么为什么wp会在我明确告诉它检索带引号类型的帖子时更改我的查询?我想如果我解决这个问题,那么它将解决我现在遇到的问题而没有得到任何元值。
如果它更容易,我可以在github上分叉我当前的工作(当它被修复时,我仍然可以将它转换为WPF)。
答案 0 :(得分:0)
我通过使用新的WP_Query而不是get_posts()来解决这个问题。仍然不知道为什么它没有用get_posts()做我想要的。今天晚些时候,我会将洞穴放在github WPF上。