如何从wp_get_ages()为所有选项元素注入类?

时间:2015-12-05 作者:JVC

我在下拉列表中生成所有帖子的列表,如下所示:

wp_get_archives(\'type=postbypost&format=option&show_post_count=0\');
这是可行的,但不允许我修改/添加每个选项元素的内容。结果需要如下所示:

<select>
    <option value="">Select Post</option>
    <option class="level-0" value="285">20 Most Popular Health Care Products</option>
    <option class="level-0" value="305">About</option>
</select>
“value”是post ID。

基本上我在找一个wp_dropdown_posts() 但没有这样的功能。如何复制wp_dropdown_pages() 但是对于帖子呢?

1 个回复
最合适的回答,由SO网友:tao 整理而成

如果没有,我们可以写一个:

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: 如果你只想HTMLselect 已返回,未回显,因此您可以在更复杂的函数/类/插件中自己回显,替换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 默认情况下。

相关推荐

是否可以取消对特定帖子类型的POSTS_PER_PAGE限制?

我想知道我是否可以取消特定帖子类型的posts\\u per\\u页面限制。在存档中。php页面我显示不同的帖子类型,对于特定的“出版物”帖子类型,我想显示所有帖子。我如何在不影响传统“post”类型的情况下实现这一点?