php – WordPress:自定义循环来排除在widget $args内分配的帖子ID

前端之家收集整理的这篇文章主要介绍了php – WordPress:自定义循环来排除在widget $args内分配的帖子ID前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在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()更改为您的首选项页面.

原文链接:https://www.f2er.com/php/131777.html

猜你在找的PHP相关文章