web-dev-qa-db-fra.com

Déconner avec une API transitoire - se vider dès l'actualisation

Suivant le thème _s, je voulais créer ma propre version de la liste des catégories de publications avec Transient et voici ce que j'ai créé:

function my_blog_categories() {
    global $post;
    if ( ( $get_post_categories = get_transient( 'this_blog_categories' ) === FALSE ) ) {
        $get_post_categories = get_the_category_list( ' | ', '', $post->ID );

        set_transient( 'this_blog_categories', $get_post_categories );
    }
    return $get_post_categories;
}

function my_blog_transient_flusher() {
    delete_transient( 'this_blog_categories' );
}
add_action( 'edit_category', 'my_blog_transient_flusher' );
add_action( 'save_post',     'my_blog_transient_flusher' );

Avec WP Optimiser si je nettoie les éléments transitoires, lors de la première actualisation, je peux voir les catégories situées en dessous de la publication. Mais lors de la deuxième actualisation de la page d'accueil, elles disparaissent tout simplement.

S'il vous plaît, pas que, sans le return $get_post_categories;, cela ne fonctionne tout simplement pas. Mais ce que je sais, c'est que get_the_category_list() lui-même renvoie des données.

Donc, je suis dans un mode maladroit - je ne peux pas comprendre ce que je fais mal! Toute assistance sera grandement appréciée.

1
Mayeenul Islam

Le premier problème est que vos parenthèses sont incorrectes dans votre instruction IF.

if ( ( $get_post_categories = get_transient( 'this_blog_categories' ) === FALSE ) )

Devrait être:

if ( ( $get_post_categories = get_transient( 'this_blog_categories' ) ) === false )

Vous souhaitez attribuer la valeur, puis la comparer à false. En raison de vos parenthèses incorrectes, vous devez comparer le transitoire à faux, puis affecter le résultat de cette comparaison à $ get_post_categories. Les comparaisons ont une priorité plus élevée que les assignations en PHP.

Cela résoudra probablement votre problème. Cependant, vous avez un autre problème ici:

set_transient( 'this_blog_categories', $get_post_categories );

Les transitoires doivent avoir des délais d'expiration. Sinon, votre transitoire n'expirera jamais et vous n'actualiserez jamais les données.

3
Otto