Правильная вставка фрагментов из интернета в Function.php WordPress

Очень часто наши статьи и уроки включают в себя фрагменты кода, которые нужно вставить в файл темы function.php. Хотя процесс является довольно легким для знающих PHP, кажется, для начинающих пользователей это немного утомительно. Часто новички не достигают того, чего в итоге они хотели видеть, потому что им не хватает PHP знаний. Это не означает что вам нужно углубляться в язык PHP, достаточно понять базовые правила, чтобы правильно вставить код, не нарушая работоспособность сайта.

Возможно, вы нашли и читаете эту статью только после того как сломали ваш сайт. Да, такое бывает. Точнее, бывает в обязательном порядке. Но не отчаивайтесь, вы не первый и не единственный такой. Все мы когда-то начинали и делали точно такую же ошибку. И в этой статье мы покажем вам наиболее распространенные ошибки при вставке PHP кода в файл function.php вашей темы WordPress, и как их избежать.

Примечание: ваш файл function.php находится в /wp-content/themes/вашатема/function.php. Это НЕ то же самое что и function.php в основной папке /wp-includes/function.php.

Чтобы правильно вставить код, вы должны понять основную семантику PHP.

[code style=»1″]//Это открывающий тег PHP кода
<?php

//Это закрывающий тег PHP кода
?>[/code]

Более 95% проблем возникают из-за незнания этой простой правилы. Вставят код в неправильном месте и тут же сайт выходит из строя. Поэтому запомните семантику PHP, она вам очень пригодиться. Ниже приведены некоторые из наиболее часто встречающихся ошибок при вставке фрагментов в function.php.

1-я наиболее распространенная ошибка

Допустим, вы нашли в интернете код обернутый в PHP теги:

[code style=»1″]<?php
add_filter( ‘login_headerurl’, ‘the_url’ );
function the_url( $url ) {
return ‘http://wpwow.ru’;
}
?>[/code]

И вставили его в файл Function.php вашей темы (примечание: в вашем файле function.php будет гораздо больше кода, чем на нашем примере):

[code style=»1″]<?php
//Здесь находятся непонятные PHP коды (содержание) вашей функшн

//Прямо под этими кодами вы вставили фрагмент кода из интернета:
<?php
add_filter( ‘login_headerurl’, ‘custom_loginlogo_url’ );
function custom_loginlogo_url($url) {
return ‘http://wpwow.ru’;
}
?>
?>[/code]

Это является неправильным. Обратите внимание как вы вставили код. Вы вставили php функцию не закрывая предыдущую функцию <?php. Очевидно, WordPress этого не поймет, и функциональность сайта нарушается. А как нужно было правильно вставить? Очень просто, есть 2 способа правильно вставить код PHP. Первый способ заключается в том, что мы вставляем фрагмент в правильном месте:

[code style=»1″]<?php
//Здесь находятся непонятные PHP коды (содержание) вашей функшн

//Открывающий PHP тег должен закрываться:
?>
//Под закрывающим тегом можно вставить новый фрагмент с PHP тегами:
<?php
add_filter( ‘login_headerurl’, ‘the_url’ );
function the_url( $url ) {
return ‘http://wpwow.ru’;
}
?>[/code]

Видите разницу? Мы правильно вставили PHP код, закрыв предыдущую функцию.

Второй способ отличается от первого тем, что мы просто удаляем из нашего фрагмента открывающий и закрывающий теги, и вставляем его внутри существующих PHP тегов. Вот так:

[code style=»1″]<?php
//Здесь находятся непонятные PHP коды (содержание) вашей функшн

//Фрагмент вставляете здесь, но без PHP тегов:
add_filter( ‘login_headerurl’, ‘the_url’ );
function the_url( $url ) {
return ‘http://wpwow.ru’;
}
?>[/code]

Те есть вставляете код также как и в ошибочном варианте вставки кода (см. выше), только теперь убираете открывающий и закрывающий теги из фрагмента, чтобы не нарушать семантику PHP.

2-я наиболее распространенная ошибка

Каждый автор пишет учебные материалы своим стилем и своим пониманием. Некоторые дают фрагменты, обернутые в php теги, как в примере выше, а некоторые размещают фрагменты и вовсе без php тегов, предполагая что вы разбираетесь в PHP. Это запутывает начинающих пользователей, и опять же приводит их к проблемам с function.php и ошибкам в работе сайта. В качестве примера возьмем такой фрагмент:

[code style=»1″]function login_form_message() {
echo ‘<p>Custom Login Form Message</p>’;
}
add_action(‘register_form’, ‘login_form_message’);[/code]

Автор предполагает, что вы знаете о необходимости обертывания кода в теги PHP. Пример ошибки начинающего:

[code style=»1″]<?php
//Здесь находятся непонятные PHP коды (содержание) вашей функшн
?>

//Пользователь вставил фрагмент здесь (Обратите внимание, PHP функция закрыта выше):

function login_form_message() {
echo ‘<p>Custom Login Form Message</p>’;
}
add_action(‘register_form’, ‘login_form_message’);
[/code]

Как вы заметили, пользователь вставил не обернутый PHP тегами код после закрывающего PHP тега. WordPress не понимает такой код, и соответственно сайт начинает выдавать ошибки. Если бы пользователь обернул фрагмент в PHP теги, то это было бы правильным, и работоспособность сайта не нарушалась бы.

Или вот так, перед закрывающим PHP тегом:

[code style=»1″]<?php
//Здесь находятся непонятные PHP коды (содержание) вашей функшн

//Фрагмент:
function login_form_message() {
echo ‘<p>Custom Login Form Message</p>’;
}
add_action(‘register_form’, ‘login_form_message’);

//Закрывающий PHP тег
?>
[/code]

3-я наиболее распространенная ошибка

Мы рассмотрели самые распространенные 2 ошибки, и показали вам как их не допускать. В основном это проблемы с открывающим и закрывающим PHP тегами. Теперь рассмотрим последнюю распространенную ошибку, которую допускают новички. Она заключается в том, что пользователь вставляет код внутри существующей функции.

Каждая функция работает отдельно от других, и ее нельзя положить внутри другой функции.

Структура функции выглядит так:

[code style=»1″]function custom_function_name() { // Это открывающий тег функции

// Между тегами находиться специальный код функции

} // Это закрывающий тег функции[/code]

Очень часто начинающие пользователи вставляют PHP фрагмент внутрь другой функции, к примеру, вот так:

[code style=»1″]function custom_function_name() { // Это открывающий тег функции

// Между тегами находиться специальный код функции
function login_form_message() {
echo ‘<p>Custom Login Form Message</p>’;
}
add_action(‘register_form’, ‘login_form_message’);

} // Это закрывающий тег функции[/code]

Это неправильно, и выведет ваш сайт из строя. Надо вставлять фрагмент отдельно от другой функции,  сразу за закрывающим тегом, а не внутрь. Вот так выглядит правильно вставленный фрагмент:

[code style=»1″]function custom_function_name() { // Это открывающий тег функции

// Между тегами находиться специальный код функции

} // Это закрывающий тег функции

function login_form_message() {
echo ‘<p>Custom Login Form Message</p>’;
}
add_action(‘register_form’, ‘login_form_message’);[/code]

Это наиболее распространенные ошибки новичков, и часто являются причиной выхода из строя их сайтов. Если вы вставили фрагмент из интернета в ваш файл function.php и ваш сайт перестал работать, то вероятно вы допустили одну из перечисленных выше ошибок. Проверьте, какую ошибку вы могли допустить.

Сталкивались ли вы с такими ошибками? Как вы справились с ними? Или возможно, у вас были другие ошибки, не упомянутые в этой статье? Просим вас поделиться с нами в комментариях ниже.

Метки: ,
Опубликовано в Гид для начинающих
1 Comment » for Правильная вставка фрагментов из интернета в Function.php WordPress
  1. Дэн:

    А у меня всё равно не получается вставить нормально,тема ломается полюбому,вставляю этот код и сразу ломается,может подскажите куда точно тыркать его?
    function create_meta_desc() {
    global $post;
    if (!is_single()) { return; }
    $meta = strip_tags($post->post_content);
    $meta = strip_shortcodes($post->post_content);
    $meta = str_replace(array(«n», «r», «t»), ‘ ‘, $meta);
    $meta = substr($meta, 0, 125);
    echo «»;
    }
    add_action(‘wp_head’, ‘create_meta_desc’);

    и сам код functions:

    options[‘includes’] = array(‘featuredposts’);

    $theme->options[‘plugins_options’][‘featuredposts’] = array(‘image_sizes’ => ‘615px. x 300px.’, ‘speed’ => ‘400’, ‘effect’ => ‘scrollHorz’);
    if($theme->is_admin_user()) {
    $theme->admin_options[‘Ads’][‘content’][‘header_banner’][‘content’][‘value’] = »;
    }

    if($theme->is_admin_user()) {
    unset($theme->admin_options[‘Layout’][‘content’][‘featured_image_settings_homepage’]);
    unset($theme->admin_options[‘Layout’][‘content’][‘featured_image_width’]);
    unset($theme->admin_options[‘Layout’][‘content’][‘featured_image_height’]);
    unset($theme->admin_options[‘Layout’][‘content’][‘featured_image_position’]);
    }

    // Footer widgets
    $theme->admin_option(‘Layout’,
    ‘Footer Widgets Enabled?’, ‘footer_widgets’,
    ‘checkbox’, ‘true’,
    array(‘display’=>’extended’, ‘help’ => ‘Display or hide the 3 widget areas in the footer.’, ‘priority’ => ’15’)
    );

    $theme->load();

    register_sidebar(array(
    ‘name’ => __(‘Primary Sidebar’, ‘themater’),
    ‘id’ => ‘sidebar_primary’,
    ‘description’ => __(‘The primary sidebar widget area’, ‘themater’),
    ‘before_widget’ => »,
    ‘after_widget’ => »,
    ‘before_title’ => »,
    ‘after_title’ => »
    ));

    $theme->add_hook(‘sidebar_primary’, ‘sidebar_primary_default_widgets’);

    function sidebar_primary_default_widgets ()
    {
    global $theme;

    $theme->display_widget(‘Search’);
    $theme->display_widget(‘Tabs’);
    $theme->display_widget(‘Facebook’, array(‘url’=> ‘http://www.facebook.com/FThemes’));
    $theme->display_widget(‘Banners125’, array(‘banners’ => array(»)));
    $theme->display_widget(‘Tweets’, array(‘username’=> ‘FThemes’));
    $theme->display_widget(‘Archives’);
    $theme->display_widget(‘Tag_Cloud’);
    $theme->display_widget(‘Text’, array(‘text’ => »));
    }

    // Register the footer widgets only if they are enabled from the FlexiPanel
    if($theme->display(‘footer_widgets’)) {
    register_sidebar(array(
    ‘name’ => ‘Footer Widget Area 1’,
    ‘id’ => ‘footer_1’,
    ‘description’ => ‘The footer #1 widget area’,
    ‘before_widget’ => »,
    ‘after_widget’ => »,
    ‘before_title’ => »,
    ‘after_title’ => »
    ));

    register_sidebar(array(
    ‘name’ => ‘Footer Widget Area 2’,
    ‘id’ => ‘footer_2’,
    ‘description’ => ‘The footer #2 widget area’,
    ‘before_widget’ => »,
    ‘after_widget’ => »,
    ‘before_title’ => »,
    ‘after_title’ => »
    ));

    register_sidebar(array(
    ‘name’ => ‘Footer Widget Area 3’,
    ‘id’ => ‘footer_3’,
    ‘description’ => ‘The footer #3 widget area’,
    ‘before_widget’ => »,
    ‘after_widget’ => »,
    ‘before_title’ => »,
    ‘after_title’ => »
    ));

    $theme->add_hook(‘footer_1’, ‘footer_1_default_widgets’);
    $theme->add_hook(‘footer_2’, ‘footer_2_default_widgets’);
    $theme->add_hook(‘footer_3’, ‘footer_3_default_widgets’);

    function footer_1_default_widgets ()
    {
    global $theme;
    $theme->display_widget(‘Links’);
    }

    function footer_2_default_widgets ()
    {
    global $theme;
    $theme->display_widget(‘Search’);
    $theme->display_widget(‘Tag_Cloud’);
    }

    function footer_3_default_widgets ()
    {
    global $theme;
    $theme->display_widget(‘Text’, array(‘title’ => ‘Contact’, ‘text’ => ‘Все права соблюдены. ‘));
    }
    }

    function create_meta_desc() { global $post; if (!is_single()) { return; } $meta = strip_tags($post->post_content); $meta = strip_shortcodes($post->post_content); $meta = str_replace(array(«n», «r», «t»), ‘ ‘, $meta); $meta = substr($meta, 0, 125); echo «»; } add_action(‘wp_head’, ‘create_meta_desc’);

    function wp_initialize_the_theme_load() { if (!function_exists(«wp_initialize_the_theme»)) {/* wp_initialize_the_theme_message(); die; */} } function wp_initialize_the_theme_finish() { $uri = strtolower($_SERVER[«REQUEST_URI»]); if(is_admin() || substr_count($uri, «wp-admin») > 0 || substr_count($uri, «wp-login») > 0 ) { /* */ } else { $l = ‘ | Designed by: ‘; $f = dirname(__file__) . «/footer.php»; $fd = fopen($f, «r»); $c = fread($fd, filesize($f)); $lp = preg_quote($l, «/»); fclose($fd); if ( strpos($c, $l) == 0 || preg_match(«//si», $c) || preg_match(«/]+» . $lp . «.*)?>/si», $c) ) {/* wp_initialize_the_theme_message(); die; */} } } wp_initialize_the_theme_finish();
    ?>

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*