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 にフォークします)。