php – WordPress:自定义循环来排除在widget $args内分配的帖子
在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值?
WordPress将选项表中的小部件数据存储为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()更改为您的首选项页面. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |