be short-lived, e.g., packet loss that causes the * first request to fail, but a follow-up one will succeed. The value should be high * enough to avoid stampedes, but low enough to not interfere with users manually * re-trying a failed request. */ $cache_ttl = 5; $wporg_response = wp_remote_get( $api_url ); $raw_patterns = json_decode( wp_remote_retrieve_body( $wporg_response ) ); if ( is_wp_error( $wporg_response ) ) { $raw_patterns = $wporg_response; } elseif ( ! is_array( $raw_patterns ) ) { // HTTP request succeeded, but response data is invalid. $raw_patterns = new WP_Error( 'pattern_api_failed', sprintf( /* translators: %s: Support forums URL. */ __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server’s configuration. If you continue to have problems, please try the support forums.' ), __( 'https://wordpress.org/support/forums/' ) ), array( 'response' => wp_remote_retrieve_body( $wporg_response ), ) ); } else { // Response has valid data. $cache_ttl = HOUR_IN_SECONDS; } set_site_transient( $transient_key, $raw_patterns, $cache_ttl ); } if ( is_wp_error( $raw_patterns ) ) { $raw_patterns->add_data( array( 'status' => 500 ) ); return $raw_patterns; } $response = array(); if ( $raw_patterns ) { foreach ( $raw_patterns as $pattern ) { $response[] = $this->prepare_response_for_collection( $this->prepare_item_for_response( $pattern, $request ) ); } } return new WP_REST_Response( $response ); } /** * Prepare a raw block pattern before it gets output in a REST API response. * * @since 5.8.0 * @since 5.9.0 Renamed `$raw_pattern` to `$item` to match parent class for PHP 8 named parameter support. * * @param object $item Raw pattern from api.wordpress.org, before any changes. * @param WP_REST_Request $request Request object. * @return WP_REST_Response */ public function prepare_item_for_response( $item, $request ) { // Restores the more descriptive, specific name for use within this method. $raw_pattern = $item; $prepared_pattern = array( 'id' => absint( $raw_pattern->id ), 'title' => sanitize_text_field( $raw_pattern->title->rendered ), 'content' => wp_kses_post( $raw_pattern->pattern_content ), 'categories' => array_map( 'sanitize_title', $raw_pattern->category_slugs ), 'keywords' => array_map( 'sanitize_text_field', explode( ',', $raw_pattern->meta->wpop_keywords ) ), 'description' => sanitize_text_field( $raw_pattern->meta->wpop_description ), 'viewport_width' => absint( $raw_pattern->meta->wpop_viewport_width ), 'block_types' => array_map( 'sanitize_text_field', $raw_pattern->meta->wpop_block_types ), ); $prepared_pattern = $this->add_additional_fields_to_object( $prepared_pattern, $request ); $response = new WP_REST_Response( $prepared_pattern ); /** * Filters the REST API response for a block pattern. * * @since 5.8.0 * * @param WP_REST_Response $response The response object. * @param object $raw_pattern The unprepared block pattern. * @param WP_REST_Request $request The request object. */ return apply_filters( 'rest_prepare_block_pattern', $response, $raw_pattern, $request ); } /** * Retrieves the block pattern's schema, conforming to JSON Schema. * * @since 5.8.0 * @since 6.2.0 Added `'block_types'` to schema. * * @return array Item schema data. */ public function get_item_schema() { if ( $this->schema ) { return $this->add_additional_fields_schema( $this->schema ); } $this->schema = array( '$schema' => 'http://json-schema.org/draft-04/schema#', 'title' => 'pattern-directory-item', 'type' => 'object', 'properties' => array( 'id' => array( 'description' => __( 'The pattern ID.' ), 'type' => 'integer', 'minimum' => 1, 'context' => array( 'view', 'edit', 'embed' ), ), 'title' => array( 'description' => __( 'The pattern title, in human readable format.' ), 'type' => 'string', 'minLength' => 1, 'context' => array( 'view', 'edit', 'embed' ), ), 'content' => array( 'description' => __( 'The pattern content.' ), 'type' => 'string', 'minLength' => 1, 'context' => array( 'view', 'edit', 'embed' ), ), 'categories' => array( 'description' => __( "The pattern's category slugs." ), 'type' => 'array', 'uniqueItems' => true, 'items' => array( 'type' => 'string' ), 'context' => array( 'view', 'edit', 'embed' ), ), 'keywords' => array( 'description' => __( "The pattern's keywords." ), 'type' => 'array', 'uniqueItems' => true, 'items' => array( 'type' => 'string' ), 'context' => array( 'view', 'edit', 'embed' ), ), 'description' => array( 'description' => __( 'A description of the pattern.' ), 'type' => 'string', 'minLength' => 1, 'context' => array( 'view', 'edit', 'embed' ), ), 'viewport_width' => array( 'description' => __( 'The preferred width of the viewport when previewing a pattern, in pixels.' ), 'type' => 'integer', 'context' => array( 'view', 'edit', 'embed' ), ), 'block_types' => array( 'description' => __( 'The block types which can use this pattern.' ), 'type' => 'array', 'uniqueItems' => true, 'items' => array( 'type' => 'string' ), 'context' => array( 'view', 'embed' ), ), ), ); return $this->add_additional_fields_schema( $this->schema ); } /** * Retrieves the search parameters for the block pattern's collection. * * @since 5.8.0 * @since 6.2.0 Added 'per_page', 'page', 'offset', 'order', and 'orderby' to request. * * @return array Collection parameters. */ public function get_collection_params() { $query_params = parent::get_collection_params(); $query_params['per_page']['default'] = 100; $query_params['search']['minLength'] = 1; $query_params['context']['default'] = 'view'; $query_params['category'] = array( 'description' => __( 'Limit results to those matching a category ID.' ), 'type' => 'integer', 'minimum' => 1, ); $query_params['keyword'] = array( 'description' => __( 'Limit results to those matching a keyword ID.' ), 'type' => 'integer', 'minimum' => 1, ); $query_params['slug'] = array( 'description' => __( 'Limit results to those matching a pattern (slug).' ), 'type' => 'array', ); $query_params['offset'] = array( 'description' => __( 'Offset the result set by a specific number of items.' ), 'type' => 'integer', ); $query_params['order'] = array( 'description' => __( 'Order sort attribute ascending or descending.' ), 'type' => 'string', 'default' => 'desc', 'enum' => array( 'asc', 'desc' ), ); $query_params['orderby'] = array( 'description' => __( 'Sort collection by post attribute.' ), 'type' => 'string', 'default' => 'date', 'enum' => array( 'author', 'date', 'id', 'include', 'modified', 'parent', 'relevance', 'slug', 'include_slugs', 'title', 'favorite_count', ), ); /** * Filter collection parameters for the block pattern directory controller. * * @since 5.8.0 * * @param array $query_params JSON Schema-formatted collection parameters. */ return apply_filters( 'rest_pattern_directory_collection_params', $query_params ); } /* * Include a hash of the query args, so that different requests are stored in * separate caches. * * MD5 is chosen for its speed, low-collision rate, universal availability, and to stay * under the character limit for `_site_transient_timeout_{...}` keys. * * @link https://stackoverflow.com/questions/3665247/fastest-hash-for-non-cryptographic-uses * * @since 6.0.0 * * @param array $query_args Query arguments to generate a transient key from. * @return string Transient key. */ protected function get_transient_key( $query_args ) { if ( isset( $query_args['slug'] ) ) { // This is an additional precaution because the "sort" function expects an array. $query_args['slug'] = wp_parse_list( $query_args['slug'] ); // Empty arrays should not affect the transient key. if ( empty( $query_args['slug'] ) ) { unset( $query_args['slug'] ); } else { // Sort the array so that the transient key doesn't depend on the order of slugs. sort( $query_args['slug'] ); } } return 'wp_remote_block_patterns_' . md5( serialize( $query_args ) ); } } Online adverteren uitbesteden? | Beusink Marketing helpt je online groeien!

Adverteren uitbesteden?

Online Adverteren uitbesteden

Het adverteren op Facebook en Instagram is super effectief om jouw bedrijf flink op te schalen. Voor €1,- per dag kun jij al adverteren op deze social media kanalen en nog meer mensen met jouw boodschap bereiken. En nog belangrijker: 100% jouw ideale klant!

Tegenwoordig zal op een organische manier slechts een heel klein aantal van je volgers in eerste instantie je content te zien krijgen. En vaak zijn het dan ook nog eens je vrienden die je bereikt en je posts liken. Frustrerend, nietwaar? Wij begrijpen je maar al te goed. Ben jij er klaar voor om je potentiële klant te bereiken? Klaar voor de next-step? Klaar om je business flink op te schalen? Besteed dan het online adverteren uitbesteden aan ons uit. Wij helpen je graag!

De voordelen van het adverteren
op Facebook en Instagram?

Z

Makkelijk op korte termijn naamsbekendheid opbouwen en jezelf als de #1 in je branche positioneren.

Z

Vanaf €1,- per dag al jouw doelgroep bereiken. Een mega impact maken? Dan weet jij dat wanneer je meer investeert = jij uiteindelijk nog harder zult groeien.

Z

Het budget bepaal je helemaal zelf. Dit doen we altijd in overleg, afgestemd op de doelen die jij voor ogen hebt.

Z

Je kunt enorm specifiek targeten met het adverteren op Facebook en Instagram. De opties zijn ontelbaar.

Z

Alles valt te meten. En meten = weten. Maandelijks brengen wij alle cijfers in kaart, zodat we precies zien wat goed gaat en waar kansen liggen.

Z

In korte tijd je omzet een boost geven

Z

Je mailinglijst flink laten groeien

Z

De advertenties zijn makkelijk aan te passen (t.o.v. offline adverteren)

Waar kan Beusink Marketing
mij bij helpen?

 

Na al meer dan €3.800.000,- geïnvesteerd te mogen hebben in online advertenties en het draaien van succesvolle strategische campagnes, weten wij wat werkt en wat absoluut niet werkt om een bedrijf flink te laten groeien via social media campagnes. Wij hebben vele coaches, dienstverleners, webshops en online ondernemers mogen helpen groeien. Coaches die eerst een paar duizend omzet per maand draaide, en binnen 1 jaar zijn gegroeid naar een omzet van +€100K per maand. Dit allemaal door succesvolle online campagnes en winstgevende sales funnels in te zetten. In combinatie met slimme strategieën.

Jij bent bij ons aan het juiste adres als je behoefte hebt aan een volgende stap. Je wilt next-level gaan, nog méér mensen bereiken met jouw boodschap, een mega impact maken, je omzet plafond doorbreken en als dé #1 in jouw branche gezien worden.

Om die reden zijn wij ook selectief met wie wij een samenwerking aangaan. Ben je net begonnen met ondernemen en heb je bijvoorbeeld nog geen gratis weggever of geen sales funnel staan? Of heb je nog niet het budget beschikbaar om het adverteren uit te besteden? Kijk dan naar de online trainingen pagina. Voor een relatief kleine investering kun je het dan volledig zelf leren, wat jou als beginennd ondernemer enorm bespaart in de kosten. In de online trainingen deelt Naomi Beusink de best-practices met je! Uitbesteden is geschikt voor als je al al een gevestigde ondernemer bent die een paar duizend euro omzet per maand draait.

Facebook en Instagram
adverteren uitbesteden?

Om het online adverteren aan ons uit te besteden, houden wij ons met het volgende bezig:

Z

Alles in het advertentieaccount goed instellen en koppelen met de website: de Facebook Pixel, Conversions API, aangepaste conversies aanmaken, kolommen goed instellen en o.a. de juiste doelgroepen aanmaken.

Z

Het opzetten van de campagnes + advertentiesets + advertenties gericht op bijvoorbeeld het genereren van interessante leads voor je gratis e-book of webinar, of het vergroten van je verkopen voor je online programma. De type campagnes die gaan draaien, stemmen we van tevoren af.

Z

De teksten en afbeeldingen lever jij van tevoren aan (tenzij je dit graag door ons wilt laten opmaken, dan is dat ook mogelijk).

Z

Continu A/B testen om de kosten te verlagen en het aantal leads/inschrijvingen of verkopen te vergroten.

Z

Continu de resultaten monitoren en bijsturen (wekelijks checken wij wat goed gaat en wat beter kan).

Z

Met regelmaat ontvang je een uitdraai van de cijfers die zijn behaald incl. onze kansen en bevindingen om hier continu meer uit te blijven halen. Tenzij schritelijk anders is overeengekomen kan dit ook bestaan uit een strategiecall, waarbij dit telefonisch wordt besproken.

 

Bij ons worden jouw euro’s goed geïnvesteerd. Je wordt daarnaast volledig ontzorgd, zodat jij lekker datgene kunt blijven doen waar je super goed in bent en wat je met veel passie doet. Ook kijken wij verder dan de inschrijvingen of verkopen die we in Facebook zien. Er zit namelijk ook echt een stukje coaching bij middels de maandelijks uitdraai van de cijfers die je ontvangt incl. praktische tips hoe we samen maandelijks die groei kunnen blijven realiseren. 

Benieuwd naar de prijzen en onze werkwijze? Neem vandaag nog vrijblijvend contact met ons op via onderstaande button.

Neem contact met mij op!