我的插件使用此函数返回自定义帖子类型('100q_quote')的所有帖子的数组:
function get_posts_by_category($category_filter) {
if($category_filter != 'default') {
$tax_query = array(
array(
'taxonomy' => '100q_taxonomy_category',
'field' => 'name',
'terms' => $category_filter
)
);
$args = array('post_type' => '100q_quote', 'tax_query' => $tax_query);
}
else {
$args = array('post_type' => '100q_quote');
}
$postArray = get_posts($args);
return $postArray;
}
然后此函数从数组中随机选择一个帖子并返回正文内容:
function get_random_quote($category_filter) {
$postArray = get_posts_by_category($category_filter);
if(count($postArray) > 0) {
$randPostNum = mt_rand(0, count($postArray) - 1);
$randQuote = $postArray[$randPostNum]->post_content;
return $randQuote;
}
return "";
}
从该动作挂钩调用该函数,该挂钩将所选文本放入一个选项中,可以在任何地方调用它:
function update_quote_option($quote){
update_option('100quotes_random_quote', $quote);
}
function set_random_quote_option() {
$category_filter = get_option('100quotes_category_filter', 'default');
$randQuote = get_random_quote($category_filter);
update_quote_option($randQuote);
}
add_action('init', 'set_random_quote_option');
最后在这里输出(在这种情况下,当选择“随机”显示选项时):
function add_quote_to_posts($text) {
return add_styling(get_current_quote_text()).$text;
}
add_filter('the_content', 'add_quote_to_posts');
function get_current_quote_text() {
$selection = get_option('100quotes_display_option', 'none');
$category_filter = get_option('100quotes_category_filter', 'default');
if($selection == 'none')
return '';
else if($selection == 'first')
$quote_text = get_most_recent_post($category_filter);
else if($selection == 'random')
//$quote_text = get_random_quote($category_filter); //This works, but doesn't allow uniform selection.
$quote_text = get_option('100quotes_random_quote', 'Error: Random quote option not set.');
else
$quote_text = get_post($selection)->{'post_content'};
return $quote_text;
}
但是get_posts_by_category函数返回的数组始终为空。我知道该逻辑有效,因为尽管该函数未连接到动作且不会更新选项,但该函数已成功用于“ get_most_recent_post”显示选项的文本获取。
此外,我可以直接从get_current_quote_text中的“ random”分支中调用get_random_quote函数(请参见注释行)并成功查询,但不能给我想要的结果。
关于如何解决此问题的任何建议?
答案 0 :(得分:0)
弄清楚了。问题是将该函数挂接到“ init”钩上。
初始化分类法查询之前会启动Init,因此解决方案是选择在此初始化之后发生的操作。我之所以选择“ send_headers”,是因为我希望WordPress在用户提交带有显示选项的表单后更新该选项。
add_action('send_headers', 'set_random_quote_option');