检查存储/缓存的WP_QUERY在POST更改时的瞬变

时间:2020-03-27 作者:unforgiven

现在,我使用set\\U瞬态功能将WP\\U查询存储24小时(1天)。一切正常。但是,例如,如果我将存储数组中的post更改为private或修改其meta\\u值,则仍会在前端看到该post。

有没有办法检查post值是否已修改?或者我应该使用其他函数?

代码:

if (false === ($loop = get_transient(\'randomizeProfiles\'))) {
    $loop = new WP_Query(array(
        \'post_type\' => \'portfolio\',
        \'posts_per_page\' => 18,
        \'orderby\' => \'rand\',
        \'order\' => \'ASC\',
        \'post_status\' => \'publish\',
        \'meta_query\' => array(
            \'relation\' => \'OR\',
            array(\'key\' => \'move_to_archive\',\'compare\' => \'NOT EXISTS\'),
            array(\'key\' => \'move_to_archive\', \'value\' => \'0\', \'compare\' => \'=\')
        )
    ));
    $hour = carbon_get_theme_option(\'posts_hours\');
    $time = 60 * 60 * $hour;
    set_transient(\'randomizeProfiles\', $loop, $time);
}

1 个回复
SO网友:matija

使用save\\u post挂钩检查正在保存的帖子是否是公文包页面,并重置瞬态。

add_action( \'save_post\', \'reset_portfolio_transient\', 10,3 );

function reset_portfolio_transient( $post_id, $post, $update ) {
    // Only set for portfolio post_type
    if ( \'portfolio\' !== get_post_type($post) ) {
        return;
    }

    // delete old tranisent
    delete_transient( \'randomizeProfiles\' );

    // reset your transient
    set_portfolio_query_tranisent();
}
set_portfolio_query_tranisent() 是您已经提供的代码。

如果你经常编辑公文包页面,这不是一个很好的解决方案。您可能需要阅读wordpress codex中关于瞬态的内容,以寻找替代方法。

相关推荐

Loop through array of pages

我正在尝试递归地获取页面的所有子级(无限深度),我正在使用下面的函数,from this solution:function get_all_subpages($page, $args = \'\', $output = OBJECT) { if (! is_numeric($page)) $page = 0; $default_args = array( \'post_type\' => \'page\',&