在widget.PHP中注册widget以显示定义的post_id元:
class featured_widget extends WP_Widget { /** * Display front-end contents. */ function widget($args,$instance) { $post = get_post($instance['post_id']); ... }
}
我想从我的循环中排除分配的post post $post:
if (have_posts()) : while (have_posts()) : the_post();
1.如何获取post_id值?
原文链接:https://www.f2er.com/php/131777.htmlwordpress将选项表中的小部件数据存储为option_name是widget _ {$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得到的值.
>你正在做一个自定义循环,使用@ 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().
>你正在使用默认循环,在你的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()更改为您的首选项页面.