0

wordpress テーマWPFのカスタム投稿タイプ (引用) に問題があります。github のバージョンには functions.php にカスタム投稿タイプがありますが、それをプラグイン (wpf 引用) に移動しました。カスタムウィジェットも追加しました。

問題: 私のメイン クエリには、カスタム投稿タイプ「引用」が含まれていません (希望は問題ありませんが、これは意図されたものです)。[ドメイン]/quote/ に移動すると、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

get_posts() の代わりに新しい WP_Query を使用してこれを修正しました。get_posts()で私が望むことをしていない理由はまだわかりません。後で、穴のことをgithub WPFに配置します。

于 2013-04-08T14:01:06.470 に答える