le || $indexable->object_type !== 'post' ) { return; } $this->update_relations( $this->post->get_post( $post_id ) ); $this->update_has_public_posts( $indexable ); $this->hierarchy_repository->clear_ancestors( $indexable->id ); $this->link_builder->delete( $indexable ); $indexable->delete(); \do_action( 'wpseo_indexable_deleted', $indexable ); } /** * Updates the relations when the post indexable is built. * * @param Indexable $indexable The indexable. * @param WP_Post $post The post. * * @return void */ public function updated_indexable( $indexable, $post ) { // Only interested in post indexables. if ( $indexable->object_type !== 'post' ) { return; } if ( \is_a( $post, Indexable::class ) ) { \_deprecated_argument( __FUNCTION__, '17.7', 'The $old_indexable argument has been deprecated.' ); $post = $this->post->get_post( $indexable->object_id ); } $this->update_relations( $post ); } /** * Saves post meta. * * @param int $post_id Post ID. * * @return void */ public function build_indexable( $post_id ) { // Bail if this is a multisite installation and the site has been switched. if ( $this->is_multisite_and_switched() ) { return; } try { $indexable = $this->repository->find_by_id_and_type( $post_id, 'post', false ); $indexable = $this->builder->build_for_id_and_type( $post_id, 'post', $indexable ); $post = $this->post->get_post( $post_id ); /* * Update whether an author has public posts. * For example this post could be set to Draft or Private, * which can influence if its author has any public posts at all. */ if ( $indexable ) { $this->update_has_public_posts( $indexable ); } // Build links for this post. if ( $post && $indexable && \in_array( $post->post_status, $this->post->get_public_post_statuses(), true ) ) { $this->link_builder->build( $indexable, $post->post_content ); // Save indexable to persist the updated link count. $this->indexable_helper->save_indexable( $indexable ); $this->updated_indexable( $indexable, $post ); } } catch ( Exception $exception ) { $this->logger->log( LogLevel::ERROR, $exception->getMessage() ); } } /** * Updates the has_public_posts when the post indexable is built. * * @param Indexable $indexable The indexable to check. * * @return void */ protected function update_has_public_posts( $indexable ) { // Update the author indexable's has public posts value. try { $author_indexable = $this->repository->find_by_id_and_type( $indexable->author_id, 'user' ); if ( $author_indexable ) { $author_indexable->has_public_posts = $this->author_archive->author_has_public_posts( $author_indexable->object_id ); $this->indexable_helper->save_indexable( $author_indexable ); if ( $this->indexable_helper->should_index_indexable( $author_indexable ) ) { $this->reschedule_cleanup_if_author_has_no_posts( $author_indexable ); } } } catch ( Exception $exception ) { $this->logger->log( LogLevel::ERROR, $exception->getMessage() ); } // Update possible attachment's has public posts value. $this->post->update_has_public_posts_on_attachments( $indexable->object_id, $indexable->is_public ); } /** * Reschedule indexable cleanup if the author does not have any public posts. * This should remove the author from the indexable table, since we do not * want to store authors without public facing posts in the table. * * @param Indexable $author_indexable The author indexable. * * @return void */ protected function reschedule_cleanup_if_author_has_no_posts( $author_indexable ) { if ( $author_indexable->has_public_posts === false ) { $cleanup_not_yet_scheduled = ! \wp_next_scheduled( Cleanup_Integration::START_HOOK ); if ( $cleanup_not_yet_scheduled ) { \wp_schedule_single_event( ( \time() + ( \MINUTE_IN_SECONDS * 5 ) ), Cleanup_Integration::START_HOOK ); } } } /** * Updates the relations on post save or post status change. * * @param WP_Post $post The post that has been updated. * * @return void */ protected function update_relations( $post ) { $related_indexables = $this->get_related_indexables( $post ); foreach ( $related_indexables as $indexable ) { // Ignore everything that is not an actual indexable. if ( \is_a( $indexable, Indexable::class ) ) { $indexable->object_last_modified = \max( $indexable->object_last_modified, $post->post_modified_gmt ); $this->indexable_helper->save_indexable( $indexable ); } } } /** * Retrieves the related indexables for given post. * * @param WP_Post $post The post to get the indexables for. * * @return Indexable[] The indexables. */ protected function get_related_indexables( $post ) { /** * The related indexables. * * @var Indexable[] $related_indexables */ $related_indexables = []; $related_indexables[] = $this->repository->find_by_id_and_type( $post->post_author, 'user', false ); $related_indexables[] = $this->repository->find_for_post_type_archive( $post->post_type, false ); $related_indexables[] = $this->repository->find_for_home_page( false ); $taxonomies = \get_post_taxonomies( $post->ID ); $taxonomies = \array_filter( $taxonomies, 'is_taxonomy_viewable' ); $term_ids = []; foreach ( $taxonomies as $taxonomy ) { $terms = \get_the_terms( $post->ID, $taxonomy ); if ( empty( $terms ) || \is_wp_error( $terms ) ) { continue; } $term_ids = \array_merge( $term_ids, \wp_list_pluck( $terms, 'term_id' ) ); } $related_indexables = \array_merge( $related_indexables, $this->repository->find_by_multiple_ids_and_type( $term_ids, 'term', false ) ); return \array_filter( $related_indexables ); } /** * Tests if the site is multisite and switched. * * @return bool True when the site is multisite and switched */ protected function is_multisite_and_switched() { return \is_multisite() && \ms_is_switched(); } } le || $indexable->object_type !== 'post' ) { return; } $this->update_relations( $this->post->get_post( $post_id ) ); $this->update_has_public_posts( $indexable ); $this->hierarchy_repository->clear_ancestors( $indexable->id ); $this->link_builder->delete( $indexable ); $indexable->delete(); \do_action( 'wpseo_indexable_deleted', $indexable ); } /** * Updates the relations when the post indexable is built. * * @param Indexable $indexable The indexable. * @param WP_Post $post The post. * * @return void */ public function updated_indexable( $indexable, $post ) { // Only interested in post indexables. if ( $indexable->object_type !== 'post' ) { return; } if ( \is_a( $post, Indexable::class ) ) { \_deprecated_argument( __FUNCTION__, '17.7', 'The $old_indexable argument has been deprecated.' ); $post = $this->post->get_post( $indexable->object_id ); } $this->update_relations( $post ); } /** * Saves post meta. * * @param int $post_id Post ID. * * @return void */ public function build_indexable( $post_id ) { // Bail if this is a multisite installation and the site has been switched. if ( $this->is_multisite_and_switched() ) { return; } try { $indexable = $this->repository->find_by_id_and_type( $post_id, 'post', false ); $indexable = $this->builder->build_for_id_and_type( $post_id, 'post', $indexable ); $post = $this->post->get_post( $post_id ); /* * Update whether an author has public posts. * For example this post could be set to Draft or Private, * which can influence if its author has any public posts at all. */ if ( $indexable ) { $this->update_has_public_posts( $indexable ); } // Build links for this post. if ( $post && $indexable && \in_array( $post->post_status, $this->post->get_public_post_statuses(), true ) ) { $this->link_builder->build( $indexable, $post->post_content ); // Save indexable to persist the updated link count. $this->indexable_helper->save_indexable( $indexable ); $this->updated_indexable( $indexable, $post ); } } catch ( Exception $exception ) { $this->logger->log( LogLevel::ERROR, $exception->getMessage() ); } } /** * Updates the has_public_posts when the post indexable is built. * * @param Indexable $indexable The indexable to check. * * @return void */ protected function update_has_public_posts( $indexable ) { // Update the author indexable's has public posts value. try { $author_indexable = $this->repository->find_by_id_and_type( $indexable->author_id, 'user' ); if ( $author_indexable ) { $author_indexable->has_public_posts = $this->author_archive->author_has_public_posts( $author_indexable->object_id ); $this->indexable_helper->save_indexable( $author_indexable ); if ( $this->indexable_helper->should_index_indexable( $author_indexable ) ) { $this->reschedule_cleanup_if_author_has_no_posts( $author_indexable ); } } } catch ( Exception $exception ) { $this->logger->log( LogLevel::ERROR, $exception->getMessage() ); } // Update possible attachment's has public posts value. $this->post->update_has_public_posts_on_attachments( $indexable->object_id, $indexable->is_public ); } /** * Reschedule indexable cleanup if the author does not have any public posts. * This should remove the author from the indexable table, since we do not * want to store authors without public facing posts in the table. * * @param Indexable $author_indexable The author indexable. * * @return void */ protected function reschedule_cleanup_if_author_has_no_posts( $author_indexable ) { if ( $author_indexable->has_public_posts === false ) { $cleanup_not_yet_scheduled = ! \wp_next_scheduled( Cleanup_Integration::START_HOOK ); if ( $cleanup_not_yet_scheduled ) { \wp_schedule_single_event( ( \time() + ( \MINUTE_IN_SECONDS * 5 ) ), Cleanup_Integration::START_HOOK ); } } } /** * Updates the relations on post save or post status change. * * @param WP_Post $post The post that has been updated. * * @return void */ protected function update_relations( $post ) { $related_indexables = $this->get_related_indexables( $post ); foreach ( $related_indexables as $indexable ) { // Ignore everything that is not an actual indexable. if ( \is_a( $indexable, Indexable::class ) ) { $indexable->object_last_modified = \max( $indexable->object_last_modified, $post->post_modified_gmt ); $this->indexable_helper->save_indexable( $indexable ); } } } /** * Retrieves the related indexables for given post. * * @param WP_Post $post The post to get the indexables for. * * @return Indexable[] The indexables. */ protected function get_related_indexables( $post ) { /** * The related indexables. * * @var Indexable[] $related_indexables */ $related_indexables = []; $related_indexables[] = $this->repository->find_by_id_and_type( $post->post_author, 'user', false ); $related_indexables[] = $this->repository->find_for_post_type_archive( $post->post_type, false ); $related_indexables[] = $this->repository->find_for_home_page( false ); $taxonomies = \get_post_taxonomies( $post->ID ); $taxonomies = \array_filter( $taxonomies, 'is_taxonomy_viewable' ); $term_ids = []; foreach ( $taxonomies as $taxonomy ) { $terms = \get_the_terms( $post->ID, $taxonomy ); if ( empty( $terms ) || \is_wp_error( $terms ) ) { continue; } $term_ids = \array_merge( $term_ids, \wp_list_pluck( $terms, 'term_id' ) ); } $related_indexables = \array_merge( $related_indexables, $this->repository->find_by_multiple_ids_and_type( $term_ids, 'term', false ) ); return \array_filter( $related_indexables ); } /** * Tests if the site is multisite and switched. * * @return bool True when the site is multisite and switched */ protected function is_multisite_and_switched() { return \is_multisite() && \ms_is_switched(); } } Nos Rayons | Superette Antonia

No products in the cart.

Nos Rayons

Show

BABYBEL 200G

CFA 3.200

BARON RAMÉRO ROSÉ

CFA 3.600

BARON RAMON ROSÉ

CFA 1.800

BEURRE BOCAGE DOUX 200G

CFA 1.000

BEURRE BOCAGE DOUX 250G EN BARGUETTE

CFA 1.800

CARTE NOIRE ROSE 75CL

CFA 2.100

CHEMIN DES SABLES

CFA 6.100

Dattes Deglet Nour 250g

CFA 500

Dattes Deglet Nour 500g

CFA 1.000

Dattes Sultana 1kg

CFA 3.400

DON GARCIA ROSE 1L

CFA 2.100

ENTREMONT EMMENTAL BLOC DE 220G

CFA 3.000
Showing 12 of 34 items
Load More