如何正确使用`POSTS_DISTIFICT`?

时间:2019-05-30 作者:breadwild

我浏览了互联网,但找不到一个好的工作示例或关于过滤器的讨论posts_distinct 我正在使用高级自定义字段,但我认为这可能不是问题所在。不管怎样,我尝试的都不管用。

我的函数调用是否正确?还是在WP\\u查询之前

//functions.php
function search_distinct() { 
    return "DISTINCT"; 
}
add_filter(\'posts_distinct\', \'search_distinct\');

//archive.php
<?php
    $args = array(
       \'post_type\' => \'homily\',
       \'posts_per_page\' => -1,
       \'meta_key\' => \'homilist\',
       \'orderby\' => \'meta_value\', 
       \'order\' => \'ASC\'
    );
    $the_query = new WP_Query( $args );

    search_distinct(); //Correct?

    if ( $the_query->have_posts() ) {
       echo \'<ul>\';
           while ( $the_query->have_posts() ) {
              $the_query->the_post();
                    echo \'<li>\' .the_field(\'homilist\') . \'</li>\';
                }
        echo \'</ul>\';
     }
     wp_reset_postdata(); ?>
Update:最终得到的WordPress式解决方案比我所希望的要少,尽管有善意的建议:

<?php
    global $wpdb;
    $querystr = "SELECT DISTINCT meta_value 
                FROM $wpdb->postmeta 
                WHERE meta_key = \'homilist\' 
                ORDER BY meta_value ASC";
    $homilists = $wpdb->get_results( $querystr, OBJECT);

    echo \'<select id="homilist">\';
    for ($i = 1; $i < count($homilists); $i++) {
        echo \'<option value="\'.$homilists[$i]->meta_value.\'">\'.$homilists[$i]->meta_value.\'</option>\';
    }
    echo \'</select>\'; 
?>

1 个回复
SO网友:Radley Sustaire

您可以在此处看到一个实际示例:https://wordpress.stackexchange.com/a/142902/19105

但在这种情况下,为什么需要使用DISTINCT?您提供的WP\\u查询不应该提供重复的结果,除非有插件导致问题。

但我还是会尽力回答的。我建议将函数保留在函数中。php。但将过滤器移动到存档。php围绕WP\\u查询调用,如下所示:

add_filter(\'posts_distinct\', \'search_distinct\');
$the_query = new WP_Query( $args );
remove_filter(\'posts_distinct\', \'search_distinct\');
如果这样做,我还建议您通过search\\u distinct函数留下评论。只需解释一下归档中使用了该函数。php——如果您忘记了函数的来源,它将在将来对您有所帮助。

此外,请删除该行:search_distinct(); //Correct?

这是不正确的,通常不直接调用操作/筛选函数。这就是“add\\u filter()”的作用。

完整代码:

// functions.php
// Used as a filter for archive.php to eliminate duplicate posts
function search_distinct() { 
    return "DISTINCT"; 
}

//archive.php
<?php
    $args = array(
       \'post_type\' => \'homily\',
       \'posts_per_page\' => -1,
       \'meta_key\' => \'homilist\',
       \'orderby\' => \'meta_value\', 
       \'order\' => \'ASC\'
    );

    // Get posts, make them distinct. search_distinct is defined in functions.php
    add_filter(\'posts_distinct\', \'search_distinct\');
    $the_query = new WP_Query( $args );
    remove_filter(\'posts_distinct\', \'search_distinct\');

    if ( $the_query->have_posts() ) {
       echo \'<ul>\';
           while ( $the_query->have_posts() ) {
              $the_query->the_post();
                    echo \'<li>\' .the_field(\'homilist\') . \'</li>\';
                }
        echo \'</ul>\';
     }
     wp_reset_postdata(); ?>

相关推荐

Skip latest 3 posts from loop

我下载了一个初学者主题(下划线)。我想从索引页的循环中排除前3篇文章。这是循环;<?php if ( have_posts() ) : if ( is_home() && ! is_front_page() ) : ?> <header> <h1 class=\"page-title screen-reader-text\"><?php sing