Wordpress 5.1.1 конфликтует с несколькими блоками контента - PullRequest
0 голосов
/ 19 марта 2019

При обновлении до WordPress 5.1.1 мой сайт генерировал 500 ошибок сервера.В журнале мне сказали:

[19-Mar-2019 10:08:34 UTC] PHP Fatal error:  Cannot redeclare has_block() (previously declared in /home/rideands/public_html/wp-includes/blocks.php:81) in /home/rideands/public_html/wp-content/plugins/multiple-content-blocks/assets/inc/template-tags.php on line 67

Похоже, что это может быть конфликт с кодом, который находится в больше не поддерживаемом плагине, множественные блоки контента.

Код, о котором идет речьв новой версии WordPress:

/**
 * Determine whether a $post or a string contains a specific block type.
 *
 * This test optimizes for performance rather than strict accuracy, detecting
 * the block type exists but not validating its structure. For strict accuracy,
 * you should use the block parser on post content.
 *
 * @since 5.0.0
 * @see parse_blocks()
 *
 * @param string                  $block_type Full Block type to look for.
 * @param int|string|WP_Post|null $post Optional. Post content, post ID, or post object. Defaults to global $post.
 * @return bool Whether the post content contains the specified block.
 */
function has_block( $block_type, $post = null ) {
if ( ! has_blocks( $post ) ) {
    return false;
}

if ( ! is_string( $post ) ) {
    $wp_post = get_post( $post );
    if ( $wp_post instanceof WP_Post ) {
        $post = $wp_post->post_content;
    }
}

return false !== strpos( $post, '<!-- wp:' . $block_type . ' ' );
}

И код, с которым это противоречит в плагине множественных блоков контента:

/**
 * Check if the block has content
 *
 * @param string $name
 * @param array $args Optional. Additional arguments, see get_the_block for more information
 */
function has_block( $name, $args = array() ) {
if( 0 < strlen( get_the_block( $name, $args ) ) ) 
    return true;

return false;
}

Любые идеи, как я могу получитькод в нескольких контент-блоках, отформатированный правильно, чтобы остановить эту ошибку сервера?

Любая помощь будет высоко ценится, спасибо!

Ответы [ 2 ]

1 голос
/ 14 июня 2019

Так как Multiple Content Block больше не поддерживается, лучше всего было бы установить Advanced Custom Fields, который выполняет ту же работу, но лучше.Если это не вариант, можно перезаписать код старого плагина, так как он, вероятно, никогда не будет обновлен.FTP в wp-content / plugins / множественные блоки содержимого / assets / inc / template-tags.php, найдите строку 62:

function has_block( $name, $args = array() ) {

и замените ее на:

function has_the_block( $name, $args = array() ) {

Имя функции не имеет значения, если оно не имеет has_block.Перезагрузите ваш сайт и все должно быть исправлено.А если серьезно, измени этот плагин.Он не обновлялся 3 года.

1 голос
/ 15 мая 2019

Функция has_block является частью ядра WordPress.Плагин не может переопределить эту функцию, потому что она уже существует.Плагин должен использовать другое имя для своей функции.

https://developer.wordpress.org/reference/functions/has_block/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...