如果没有,我们可以写一个:
function my_very_own_wp_dropdown_posts($args) {
$args = shortcode_atts(array(
\'posts_per_page\' => 5,
\'offset\' => 0,
\'category\' => \'\',
\'category_name\' => \'\',
\'orderby\' => \'date\',
\'order\' => \'DESC\',
\'include\' => \'\',
\'exclude\' => \'\',
\'meta_key\' => \'\',
\'meta_value\' => \'\',
\'post_type\' => \'post\',
\'post_mime_type\' => \'\',
\'post_parent\' => \'\',
\'author\' => \'\',
\'post_status\' => \'publish\',
\'suppress_filters\' => true,
\'echo\' => true
), $args, \'wp-dropdown-posts\');
$echo = $args[\'echo\'];
unset($args[\'echo\']);
$all_posts = get_posts( $args );
$output = false;
if ($all_posts) :
$output = \'
<select name="archive-dropdown">
<option value="">\'. esc_attr( __( \'Select Post\' ) ).\'</option>\';
foreach ($all_posts as $post) :
setup_postdata($post->ID);
$output .= "<option class=\'level-0\' value=\'$post->ID\'>".$post->post_title."</option>";
endforeach;
wp_reset_postdata();
$output .= \'</select>\';
endif;
$result = $output ?: esc_attr( __( "No posts found")).\'.\';
if ($echo) echo $result; else return $result;
}
add_shortcode(\'wp-dropdown-posts\', \'my_very_own_wp_dropdown_posts\');
要获得所有帖子的下拉列表,只需添加
[wp-dropdown-posts post_per_page="-1"]
在任何帖子或页面中(默认情况下,它只带5个)。如果您想在后端使用它,您必须将其包装在
do_shortcode()
:
do_shortcode("[wp-dropdown-posts post_per_page="-1"]");
Important: 如果你只想
HTML
的
select
已返回,未回显,因此您可以在更复杂的函数/类/插件中自己回显,替换
echo
具有
return
在此行中:
echo $output ?: __("No posts found").\'.\';
如果您有10多篇文章,您可能希望将其与用于选择的可视帮助器结合使用(例如
WP Chosen, 的WordPress插件包装器
Chosen). <虽然我推荐这个库,但我并没有支持WordPress插件,也没有对它进行过广泛的测试。这只是一个例子,你需要研究并找到一个更好的例子
如果您有50多篇帖子,您可能需要考虑测试this plugin 出于您的目的,它的优点是根据您键入的内容动态填充下拉列表中的搜索结果。通常,您希望避免选择超过30个选项。再说一次,我不支持这个插件,也没有测试过它。它是(另一个)WordPress插件包装器Select2.
如果你有1000多个帖子,你可以考虑利用Solr (或任何其他可行的替代方案)。快速搜索发现,有人已经为WordPress制作了Solr插件。Again, untested.
根据评论中的额外信息更新了代码。还添加了echo
参数,true
默认情况下。