[sql] wordpress自定义帖子类型被覆盖

时间:2013-04-08 00:20:49

标签: php wordpress custom-post-type

我的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)。

1 个答案:

答案 0 :(得分:0)

我通过使用新的WP_Query而不是get_posts()来解决这个问题。仍然不知道为什么它没有用get_posts()做我想要的。今天晚些时候,我会将洞穴放在github WPF上。