gpt4 book ai didi

php - Wordpress:自定义循环以排除在小部件 $args 中分配的帖子 ID

转载 作者:可可西里 更新时间:2023-10-31 22:45:29 24 4
gpt4 key购买 nike

function.php 中注册小部件以显示定义的 post_id 元数据:

class featured_widget extends WP_Widget
{
/**
* Display front-end contents.
*/
function widget($args, $instance)
{
$post = get_post($instance['post_id']);
...
}

我想从我的循环中排除 $post 的分配 post_id:

if (have_posts()) : while (have_posts()) : the_post();

最佳答案

1。如何获取post_id值?

WordPress 将小部件数据存储在选项表中,option_namewidget_{$id_base}。例如,当您构建这样的小部件时:

function __construct() {
parent::__construct('so37244516-widget',
__('A label', 'text-domain'), [
'classname' => 'so37244516-widget-class',
'description' => __('Some descriptions', 'text-domain')
]);
}

option_name 应该是 widget_so37244516-widget。然后要检索小部件数据,我们只需要使用:

$data = get_option('widget_so37244516-widget');

但是,因为一个小部件可以有多个实例,$data 是一个具有不可预测键的关联数组。 (每次我们将一个小部件拖到侧边栏并保存时,都会返回一个新的小部件实例)。

因此,如果整个站点中只有一个小部件实例,$data[2]['post_id'] 就是我们需要的值。如果有多个实例,我们需要遍历 $data,比较一些键和值以找出正确的那个。一如既往,var_dump($data) 非常有用。

2。从循环中排除 post_id 的帖子。

假设 $exclude_id 是我们从第 1 步得到的值。

  1. 你正在做一个自定义循环,使用@hemnath_mouli 的方法:
$query = new WP_Query([
'post__not_in' => [$exclude_id]
]);

if ( $query->have_posts() ) :
while ( $query->have_posts() ) : $query->the_post();
// Do loop.
endwhile;
wp_reset_query(); // Must have.
else :
// Do something.
endif;

记得执行wp_reset_query()

  1. 您正在使用默认循环,在您的 functions.php 中尝试@Deepti_chipdey 的方法:
add_action('pre_get_posts', function($query)
{
if ( $query->is_home() && $query->is_main_query() ) {
$query->set('post__not_in', [$exclude_id]);
}
});

确保将 is_home() 更改为您的首选项页面。

关于php - Wordpress:自定义循环以排除在小部件 $args 中分配的帖子 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37244516/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com