0

我的 wordpress 主题WPF的自定义帖子类型(引用)有问题。github 上的版本在functions.php 中有自定义帖子类型,但我已将其移至插件(wpf 引用)。我还添加了一个自定义小部件。

问题:我的主要查询不包括自定义帖子类型“报价”(希望很好,这是有意的)。可以通过以下方式访问引用帖子类型:[域]/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)。

4

1 回答 1

0

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

于 2013-04-08T14:01:06.470 回答