循环返回x个帖子,但前提是这些帖子包含内容或摘录

时间:2018-02-22 作者:Jake

我尝试在查询周围添加自定义筛选器,使用:

$where .= \' AND \' . $wpdb->posts . \'.post_excerpt IS NOT NULL AND \' . $wpdb->posts . \'.post_content IS NOT NULL\';

但这似乎不起作用。SQL看起来是正确的(我是业余爱好者),但它没有显示正确的内容,并破坏了原始查询(它是按自定义帖子类型过滤的,但上面的过滤器也会使查询显示页面)。

我唯一能想到的方法是查询比我需要的更多的帖子,检查每一篇文章的摘录/内容,计数,然后打破循环,但这感觉不正确。

(注意,我还想在显示时去掉内容中的短代码)。

谢谢

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

下面是一个示例—测试和工作。

SQL查询是:

AND ({$wpdb->posts}.post_content != \'\' OR {$wpdb->posts}.post_excerpt != \'\')
例如:

<?php
// This would be in functions.php or somewhere else where appropriate.
function posts_where_require_content_or_excerpt( $where, $wp_query ) {
    global $wpdb;

    $where .= " AND (" .
        " {$wpdb->posts}.post_content != \'\'" .
        " OR {$wpdb->posts}.post_excerpt != \'\'" .
    ")";

    return $where;
}


// -- SAMPLE IMPLEMENTATION --

add_filter( \'posts_where\', \'posts_where_require_content_or_excerpt\', 10, 2 );
query_posts( array(
    \'post_type\'           => \'post\',
    \'posts_per_page\'      => 5,
    \'ignore_sticky_posts\' => true,
) );
remove_filter( \'posts_where\', \'posts_where_require_content_or_excerpt\', 10, 2 );

if ( have_posts() ) {
    echo \'<ul>\';

        while ( have_posts() ) {
            the_post();

            echo \'<li>\';

                echo \'<h2>\'; the_title(); echo \'</h2>\';
                echo \'<p>\'; the_excerpt(); echo \'</p>\';

                printf( \'<p><a href="%s">Read More &rarr;</a></p>\',
                    esc_url( get_permalink() ) );

            echo \'</li>\';
        }

    echo \'</ul>\';

    //the_posts_pagination(); // Needs extra work.
}

wp_reset_query();

结束

相关推荐

如何在MySQL中写入更多USER_NICENAME字符

我在网站上安装了该插件,以进行俄语注册(允许西里尔文用户名),现在我需要在sql数据库中的wp\\u users表中的user\\u nicename permission列中更改,以写入更多字符,默认值为50到255。如何做到这一点?已尝试,但无效:ALTER TABLE wp\\U users ALTER COLUMN user\\U nicename varchar(200)not NULL-错误更改表格wp_users 改变user_nicename user_nicename VARCHAR(2