如何在 wordpress 中按存在的缩略图显示帖子顺序?
How to display posts order by thumbnail existence in wordpress?
我想按缩略图顺序显示 posts,即有缩略图的 post 会先显示,然后显示没有缩略图的 posts。
我在 Whosebug 上发现了同样的情况 here ,但这对我不起作用。目前我正在使用我想在其中实现它的目录+主题。
我尝试制作两个循环,一个循环将显示 post 和缩略图,第二个将显示 post 不带缩略图。但这在分页的情况下不起作用,因为没有缩略图的 post 应该在最后一页
这是代码
{var $itemQuery = array(
'post_type' => 'ait-item',
'posts_per_page' => $filterCountsSelected,
//'meta_key'=> '_thumbnail_id',
'tax_query' => array(
array(
'taxonomy' => 'ait-items',
'field' => 'term_id',
'terms' => $currentCategory->term_id
)
),
'paged' => $pagination,
)}
{customQuery as $query, $itemQuery}
{* Loop for categories with featured Image*}
{customLoop from $query as $post}
{if $post->image}
//Display post with thumbnail
{/if} //end of if
{/customLoop} //end of loop
{* Loop for categories without featured Image*}
{customLoop from $query as $post}
{if !$post->image}
//Display post without thumbnail
{/if} //end of if
{/customLoop} //end of loop
{includePart parts/pagination, location => pagination-below, max => $query->max_num_pages} //includes pagination
已编辑查询 1:
{var $itemQuery = array(
'post_type' => 'ait-item',
'posts_per_page' => $filterCountsSelected,
'tax_query' => array(
array(
'taxonomy' => 'ait-items',
'field' => 'term_id',
'terms' => $currentCategory->term_id
)
),
'paged' => $pagination,
)}
{var $itemQuery['orderby'] = 'meta_value_num'}
{var $itemQuery['meta_query'] = array(
array(
'relation' => 'OR',
array(
'key' => '_thumbnail_id',
'compare' => 'NOT EXISTS'
),
array(
'key' => '_thumbnail_id',
'compare' => '!NOT EXISTS'
),
)
)}
如果post有缩略图然后使用array_multisort
,我会通过foreach分配数字变量对其进行排序
试试这个,
function cmk_load_post_by_custom_order() {
// Query Argument
$args = array(
'post_type' => 'post',
'posts_per_page' => 6,
);
//Initization Wordpress Query
$query = new WP_Query( $args );
$posts = $query->get_posts();
$output = array();
$order = array();
//Ourput result as Custom Array
foreach( $posts as $post ) {
$has_thumb = has_post_thumbnail( $post->ID ) ? 1 : 0 ;
$output[] = array(
'title' => $post->post_title,
'slug' => $post->post_name,
'thumb' => $has_thumb,//get_the_post_thumbnail( $post->ID,'full'),
);
$order[] = $has_thumb;
}
array_multisort($order, SORT_DESC, $output);
echo '<pre>',print_r($output,1),'</pre>';
}
add_action('wp_head','cmk_load_post_by_custom_order');
编辑 1
如果你打算使用 wordpress 分页,我上面的回答将不起作用,因为分页依赖于查询对象,
我做了一些测试,我想出了在 orderby
上使用 meta_value_num
然后将 _thumbnail_id
设置为 meta_key 并添加关系的想法或者如果 _thumbnail_id
是否为空,因为没有缩略图的 post 将有空的 _thumbnail_id
键。
试试下面这个查询参数
$args = array(
'post_type' => 'post',
'posts_per_page' => 99,
'order' => 'DESC', // Display all post with thumbnail ID first
'orderby' => 'meta_value_num', // order by meta key value
'meta_query' => array( //query post based on meta key
array(
'relation' => 'OR', // add condition if meta key is exists or not
array(
'key' => '_thumbnail_id',
'compare' => 'NOT EXISTS' // include post without _thumbnail_id key
),
array(
'key' => '_thumbnail_id',
'compare' => '!NOT EXISTS' // include post with _thumbnail_id key
)
)
)
);
我在本地测试它并得到以下结果,它查询 posts 有和没有缩略图,我在结果中包含了缩略图 ID,你可以看到 post 是有序的基于缩略图值
Array
(
[0] => Array
(
[title] => The Magnificent
[slug] => the-magnificent
[thumb] => http://dynamized.dev/dyna/wp-content/uploads/2015/09/happy-hour.png
[tuhmb_id] => 17
)
[1] => Array
(
[title] => The Awesome Company
[slug] => the-awesome-company
[thumb] => http://dynamized.dev/dyna/wp-content/uploads/2015/09/comedy.png
[tuhmb_id] => 16
)
[2] => Array
(
[title] => Selfieties
[slug] => selfieties
[thumb] => http://dynamized.dev/dyna/wp-content/uploads/2015/09/beverage-store.png
[tuhmb_id] => 13
)
[3] => Array
(
[title] => Drunkard
[slug] => drunkard
[thumb] => http://dynamized.dev/dyna/wp-content/uploads/2015/09/restaurant31.png
[tuhmb_id] => 9
)
[4] => Array
(
[title] => My First Company
[slug] => my-first-company
[thumb] => http://dynamized.dev/dyna/wp-content/uploads/2015/09/party.png
[tuhmb_id] => 7
)
[5] => Array
(
[title] => No Thumb Compnay
[slug] => no-thumb-compnay
[thumb] =>
[tuhmb_id] =>
)
)
编辑 2
您也可以尝试在 orderby
上使用数组值并使用 meta_value_num
回退到 date
显示所有 post 缩略图 ID 然后按日期排序所有 post 没有缩略图 ID
将argument参数改成这个,
'orderby' => 'date, meta_value_num', // order by meta key value
我想按缩略图顺序显示 posts,即有缩略图的 post 会先显示,然后显示没有缩略图的 posts。
我在 Whosebug 上发现了同样的情况 here ,但这对我不起作用。目前我正在使用我想在其中实现它的目录+主题。
我尝试制作两个循环,一个循环将显示 post 和缩略图,第二个将显示 post 不带缩略图。但这在分页的情况下不起作用,因为没有缩略图的 post 应该在最后一页
这是代码
{var $itemQuery = array(
'post_type' => 'ait-item',
'posts_per_page' => $filterCountsSelected,
//'meta_key'=> '_thumbnail_id',
'tax_query' => array(
array(
'taxonomy' => 'ait-items',
'field' => 'term_id',
'terms' => $currentCategory->term_id
)
),
'paged' => $pagination,
)}
{customQuery as $query, $itemQuery}
{* Loop for categories with featured Image*}
{customLoop from $query as $post}
{if $post->image}
//Display post with thumbnail
{/if} //end of if
{/customLoop} //end of loop
{* Loop for categories without featured Image*}
{customLoop from $query as $post}
{if !$post->image}
//Display post without thumbnail
{/if} //end of if
{/customLoop} //end of loop
{includePart parts/pagination, location => pagination-below, max => $query->max_num_pages} //includes pagination
已编辑查询 1:
{var $itemQuery = array(
'post_type' => 'ait-item',
'posts_per_page' => $filterCountsSelected,
'tax_query' => array(
array(
'taxonomy' => 'ait-items',
'field' => 'term_id',
'terms' => $currentCategory->term_id
)
),
'paged' => $pagination,
)}
{var $itemQuery['orderby'] = 'meta_value_num'}
{var $itemQuery['meta_query'] = array(
array(
'relation' => 'OR',
array(
'key' => '_thumbnail_id',
'compare' => 'NOT EXISTS'
),
array(
'key' => '_thumbnail_id',
'compare' => '!NOT EXISTS'
),
)
)}
如果post有缩略图然后使用array_multisort
,我会通过foreach分配数字变量对其进行排序试试这个,
function cmk_load_post_by_custom_order() {
// Query Argument
$args = array(
'post_type' => 'post',
'posts_per_page' => 6,
);
//Initization Wordpress Query
$query = new WP_Query( $args );
$posts = $query->get_posts();
$output = array();
$order = array();
//Ourput result as Custom Array
foreach( $posts as $post ) {
$has_thumb = has_post_thumbnail( $post->ID ) ? 1 : 0 ;
$output[] = array(
'title' => $post->post_title,
'slug' => $post->post_name,
'thumb' => $has_thumb,//get_the_post_thumbnail( $post->ID,'full'),
);
$order[] = $has_thumb;
}
array_multisort($order, SORT_DESC, $output);
echo '<pre>',print_r($output,1),'</pre>';
}
add_action('wp_head','cmk_load_post_by_custom_order');
编辑 1
如果你打算使用 wordpress 分页,我上面的回答将不起作用,因为分页依赖于查询对象,
我做了一些测试,我想出了在 orderby
上使用 meta_value_num
然后将 _thumbnail_id
设置为 meta_key 并添加关系的想法或者如果 _thumbnail_id
是否为空,因为没有缩略图的 post 将有空的 _thumbnail_id
键。
试试下面这个查询参数
$args = array(
'post_type' => 'post',
'posts_per_page' => 99,
'order' => 'DESC', // Display all post with thumbnail ID first
'orderby' => 'meta_value_num', // order by meta key value
'meta_query' => array( //query post based on meta key
array(
'relation' => 'OR', // add condition if meta key is exists or not
array(
'key' => '_thumbnail_id',
'compare' => 'NOT EXISTS' // include post without _thumbnail_id key
),
array(
'key' => '_thumbnail_id',
'compare' => '!NOT EXISTS' // include post with _thumbnail_id key
)
)
)
);
我在本地测试它并得到以下结果,它查询 posts 有和没有缩略图,我在结果中包含了缩略图 ID,你可以看到 post 是有序的基于缩略图值
Array
(
[0] => Array
(
[title] => The Magnificent
[slug] => the-magnificent
[thumb] => http://dynamized.dev/dyna/wp-content/uploads/2015/09/happy-hour.png
[tuhmb_id] => 17
)
[1] => Array
(
[title] => The Awesome Company
[slug] => the-awesome-company
[thumb] => http://dynamized.dev/dyna/wp-content/uploads/2015/09/comedy.png
[tuhmb_id] => 16
)
[2] => Array
(
[title] => Selfieties
[slug] => selfieties
[thumb] => http://dynamized.dev/dyna/wp-content/uploads/2015/09/beverage-store.png
[tuhmb_id] => 13
)
[3] => Array
(
[title] => Drunkard
[slug] => drunkard
[thumb] => http://dynamized.dev/dyna/wp-content/uploads/2015/09/restaurant31.png
[tuhmb_id] => 9
)
[4] => Array
(
[title] => My First Company
[slug] => my-first-company
[thumb] => http://dynamized.dev/dyna/wp-content/uploads/2015/09/party.png
[tuhmb_id] => 7
)
[5] => Array
(
[title] => No Thumb Compnay
[slug] => no-thumb-compnay
[thumb] =>
[tuhmb_id] =>
)
)
编辑 2
您也可以尝试在 orderby
上使用数组值并使用 meta_value_num
回退到 date
显示所有 post 缩略图 ID 然后按日期排序所有 post 没有缩略图 ID
将argument参数改成这个,
'orderby' => 'date, meta_value_num', // order by meta key value