Commit realizado el 12:13:52 08-04-2024
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
<?php
|
||||
/**
|
||||
* Class Embed_Shortcode.
|
||||
*
|
||||
* @link https://github.com/googleforcreators/web-stories-wp
|
||||
*
|
||||
* @copyright 2020 Google LLC
|
||||
* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* Copyright 2020 Google LLC
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
declare(strict_types = 1);
|
||||
|
||||
namespace Google\Web_Stories\Shortcode;
|
||||
|
||||
use Google\Web_Stories\Embed_Base;
|
||||
|
||||
/**
|
||||
* Embed shortcode class.
|
||||
*/
|
||||
class Embed_Shortcode extends Embed_Base {
|
||||
/**
|
||||
* Shortcode name.
|
||||
*/
|
||||
public const SHORTCODE_NAME = 'web_stories_embed';
|
||||
|
||||
/**
|
||||
* Initializes the Web Stories embed shortcode.
|
||||
*
|
||||
* @since 1.1.0
|
||||
*/
|
||||
public function register(): void {
|
||||
add_shortcode( self::SHORTCODE_NAME, [ $this, 'render_shortcode' ] );
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders the shortcode for given attributes.
|
||||
*
|
||||
* @since 1.1.0
|
||||
*
|
||||
* @param array<string, string|int>|string $attributes Shortcode attributes.
|
||||
* @param string $content Shortcode content.
|
||||
* @return string Rendered Shortcode
|
||||
*/
|
||||
public function render_shortcode( $attributes, string $content ): string { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
|
||||
// Initialize '$attrs' when not an array OR is an empty string.
|
||||
if ( empty( $attributes ) || ! \is_array( $attributes ) ) {
|
||||
$attributes = [];
|
||||
}
|
||||
|
||||
$attributes = shortcode_atts( $this->default_attrs(), $attributes, self::SHORTCODE_NAME );
|
||||
|
||||
$attributes['class'] = 'wp-shortcode-web-stories-embed';
|
||||
|
||||
return $this->render( $attributes );
|
||||
}
|
||||
}
|
@@ -0,0 +1,178 @@
|
||||
<?php
|
||||
/**
|
||||
* Class Stories_Shortcode.
|
||||
*
|
||||
* @link https://github.com/googleforcreators/web-stories-wp
|
||||
*
|
||||
* @copyright 2020 Google LLC
|
||||
* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* Copyright 2020 Google LLC
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
declare(strict_types = 1);
|
||||
|
||||
namespace Google\Web_Stories\Shortcode;
|
||||
|
||||
use Google\Web_Stories\Service_Base;
|
||||
use Google\Web_Stories\Story_Post_Type;
|
||||
use Google\Web_Stories\Story_Query as Stories;
|
||||
|
||||
/**
|
||||
* Class Stories_Shortcode
|
||||
*
|
||||
* @phpstan-import-type StoryAttributes from \Google\Web_Stories\Story_Query
|
||||
*/
|
||||
class Stories_Shortcode extends Service_Base {
|
||||
|
||||
/**
|
||||
* Shortcode name.
|
||||
*/
|
||||
public const SHORTCODE_NAME = 'web_stories';
|
||||
|
||||
/**
|
||||
* Initializes the Stories shortcode.
|
||||
*
|
||||
* @since 1.5.0
|
||||
*/
|
||||
public function register(): void {
|
||||
add_shortcode( self::SHORTCODE_NAME, [ $this, 'render_stories' ] );
|
||||
}
|
||||
|
||||
/**
|
||||
* Callback for the shortcode.
|
||||
*
|
||||
* This will render the stories according to given
|
||||
* shortcode attributes.
|
||||
*
|
||||
* @since 1.5.0
|
||||
*
|
||||
* @param array<string,string|int>|string $attrs Shortcode attributes.
|
||||
* @return string Story markup.
|
||||
*/
|
||||
public function render_stories( $attrs ): string {
|
||||
$default_pairs = [
|
||||
'view' => 'circles',
|
||||
'number_of_columns' => 1,
|
||||
'title' => 'false',
|
||||
'excerpt' => 'false',
|
||||
'author' => 'false',
|
||||
'date' => 'false',
|
||||
'archive_link' => 'false',
|
||||
'archive_link_label' => __( 'View all stories', 'web-stories' ),
|
||||
'image_alignment' => 'left',
|
||||
'class' => '',
|
||||
'circle_size' => 150,
|
||||
'number_of_stories' => 10,
|
||||
'order' => 'DESC',
|
||||
'orderby' => 'post_date',
|
||||
'sharp_corners' => 'false',
|
||||
];
|
||||
|
||||
$taxonomies = get_object_taxonomies( Story_Post_Type::POST_TYPE_SLUG );
|
||||
|
||||
foreach ( $taxonomies as $taxonomy ) {
|
||||
$default_pairs[ $taxonomy ] = '';
|
||||
}
|
||||
|
||||
// Initialize '$attrs' when not an array OR is an empty string.
|
||||
if ( empty( $attrs ) || ! \is_array( $attrs ) ) {
|
||||
$attrs = [];
|
||||
}
|
||||
|
||||
$attributes = shortcode_atts(
|
||||
$default_pairs,
|
||||
$attrs,
|
||||
self::SHORTCODE_NAME
|
||||
);
|
||||
|
||||
$stories = new Stories( $this->prepare_story_attrs( $attributes ), $this->prepare_story_args( $attributes ) );
|
||||
|
||||
return $stories->render();
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepare story attributes.
|
||||
*
|
||||
* @since 1.5.0
|
||||
*
|
||||
* @param array<string,string|int> $attributes Shortcode attributes.
|
||||
* @return array<string,string|int> Attributes to pass to Story_Query class.
|
||||
*
|
||||
* @phpstan-return StoryAttributes
|
||||
*/
|
||||
private function prepare_story_attrs( array $attributes ): array {
|
||||
return [
|
||||
'view_type' => (string) $attributes['view'],
|
||||
'number_of_columns' => (int) $attributes['number_of_columns'],
|
||||
'show_title' => ( 'true' === $attributes['title'] ),
|
||||
'show_author' => ( 'true' === $attributes['author'] ),
|
||||
'show_date' => ( 'true' === $attributes['date'] ),
|
||||
'show_excerpt' => ( 'true' === $attributes['excerpt'] ),
|
||||
'show_archive_link' => ( 'true' === $attributes['archive_link'] ),
|
||||
'archive_link_label' => (string) $attributes['archive_link_label'],
|
||||
'image_alignment' => (string) $attributes['image_alignment'],
|
||||
'class' => (string) $attributes['class'],
|
||||
'circle_size' => (int) $attributes['circle_size'],
|
||||
'sharp_corners' => ( 'true' === $attributes['sharp_corners'] ),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepare story arguments.
|
||||
*
|
||||
* @since 1.5.0
|
||||
*
|
||||
* @param array<string,int|string> $attributes Array of arguments for Story Query.
|
||||
* @return array<string,mixed> Array of story arguments to pass to Story_Query.
|
||||
*/
|
||||
private function prepare_story_args( array $attributes ): array {
|
||||
$args = [
|
||||
// Show 100 stories at most to avoid 500 errors.
|
||||
'posts_per_page' => min( (int) $attributes['number_of_stories'], 100 ), // phpcs:ignore WordPress.WP.PostsPerPage.posts_per_page_posts_per_page
|
||||
'order' => 'ASC' === $attributes['order'] ? 'ASC' : 'DESC',
|
||||
'orderby' => $attributes['orderby'],
|
||||
];
|
||||
|
||||
$taxonomies = get_object_taxonomies( Story_Post_Type::POST_TYPE_SLUG );
|
||||
$should_add_tax_query = false;
|
||||
|
||||
foreach ( $taxonomies as $taxonomy ) {
|
||||
if ( '' !== $attributes[ $taxonomy ] ) {
|
||||
$should_add_tax_query = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ( $should_add_tax_query ) {
|
||||
$tax_query = [
|
||||
'relation' => 'OR',
|
||||
];
|
||||
|
||||
foreach ( $taxonomies as $taxonomy ) {
|
||||
$tax_query[] = [
|
||||
'taxonomy' => $taxonomy,
|
||||
'field' => 'name',
|
||||
'terms' => $attributes[ $taxonomy ] ? array_map( 'trim', explode( ',', (string) $attributes[ $taxonomy ] ) ) : [],
|
||||
];
|
||||
}
|
||||
// phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_tax_query
|
||||
$args['tax_query'] = $tax_query;
|
||||
}
|
||||
return $args;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user