Сучасна диджитал-освіта для дітей — безоплатне заняття в GoITeens ×
Mazda CX 30
×

Подскажите по Wordpress

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

Всем привет

Я решил перенести свой древний сайт с Joomla 2.5 на Wordpress. Joomla совсем что-то медленно развивается в отличие от Wordpress и менее удобная для написания статей в блоге (хотя некоторые вещи наоборот в Wordpress намного сложнее сделать).

До этого никогда не копался в CSS и коде СMS. Программирование начал изучать недавно (в php только на пути к БД и объектам).

В качестве основы для темы я взял бесплатный фреймворк colorlib.com/wp/themes/sparkling Пока занимаюсь внешним видом, а потом уже добавлю плагинов: pasha4ur.org.ua/docs/newsite.png

Проблема в том, что автор темы жестко прописал «Slider» и Call To Action" только для FrontPage и HomePage.

extras.php @ 266

if ( is_front_page() && of_get_option( 'sparkling_slider_checkbox' ) == 1 ) {

@246

if ( (is_home() || is_front_page())  && of_get_option( 'w2f_cfa_text' )!='') {

functions.php @ 224

 if( (is_home() || is_front_page() ) && of_get_option('sparkling_slider_checkbox') == 1 ) {

@ 238

if( (is_home() || is_front_page()) && of_get_option('sparkling_slider_checkbox') == 1 )

А мне нужно отобразить везде кроме некоторых категорий, страниц, постов и авторов.

Я нашел через время, как это обойти:

if ( (is_front_page() || is_category() || is_single() || is_author()) && of_get_option( 'sparkling_slider_checkbox' ) == 1 ) {

if ( (is_home() || is_front_page() || is_category() || is_single() || is_author()) && !is_single(75) && of_get_option( 'w2f_cfa_text' )!='') {

 if( (is_home() || is_front_page() || is_category() || is_single() || is_author()) && of_get_option('sparkling_slider_checkbox') == 1 ) {

if( (is_home() || is_front_page() || is_category() || is_single() || is_author()) && of_get_option('sparkling_slider_checkbox') == 1 )

Но это ужасно и неудобно. Написал функцию, но не знаю, где взять для нее первый параметр $wpOb (объект, которые сейчас отображается в WP). Подскажите, пожалуйста:

<?php
// где-то в самом верху в function.php объявляем
$exceptedObjects = [
    'sliderInHeader' =>[
        'catId' =>[],
        'postId' =>[],
        'pageId' =>[],
        'authorId' =>[]
    ],
    'callToAction' =>[
        'catId' =>[],
        'postId' =>[],
        'pageId' =>[],
        'authorId' =>[]
    ],
    'adSense1' =>[
        'catId' =>[],
        'postId' =>[],
        'pageId' =>[],
        'authorId' =>[]
    ],
];

function isModuleShown($wpOb, $module =''){
    $wpObType = '';
    $wpObID =''; // как получить ид переданного объекта WP?
    $result = true;
    $eo = $GLOBALS['exceptedObjects'];

    if($module && array_key_exists ($module , $eo)){
        if ($is_category($wpOb)) $wpObType = 'catId';
        elseif ($is_single($wpOb)) $wpObType = 'postId';
        elseif ($is_page($wpOb)) $wpObType = 'pageId';
        elseif ($is_author($wpOb)) $wpObType = 'authorId';
        elseif ($is_attachment($wpOb)) $result = false;

        if($wpObType && $wpObID){
            $result = !in_array ($wpObID, $eo[$module][$wpObType], true);
        }
    }
    return $result;
};
?>

Сильно не пинайте. Я до этого мало чего писал.

P.S. Стараюсь все делать через дочернюю тему, чтобы иметь возможность устанавливать обновления темы. Пишу в дочерний css, копирую php файлы (например, content) в папку дочерней темы и изменяю. Но пришлось лезть в php основной темы. Я не могу скопировать файл functions.php, потому что он не заменяет основной, а загружается до него + не могу заменить \themes\sparkling\inc\extras.php файлом из дочерней темы (подключается в functions.php)

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

В общем, мой первый сайт на Wordpress готов. Пока заговнокодил в условиях, как написано в топике, потом исправлю, когда буду знать как.

pasha4ur.org.ua

Осталось только прочитать статью про W3 Total Cache и настроить его на макс скорость. Из-за newrelic он сперва вообще на хостинге не завелся, но мне подсказали, что отключить. + поставить какой-то плагин, чтобы бекапил базу и слал ее на емейл.

Последний раз я собирал сайт на Joomla и было этого года 4 назад :)

В Joomla БД весила 30Мб. А тут при импорте 1,6. А при включении кеширования 7Мб. :)

не смог только побороть CSS jetpack comments

Он грузится самым последним (вроде) и там все через !important Не смог я насобирать столько баллов каскадности, чтобы превысить его.

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

Да. Он, вроде, загружается до родительского. Но в нем же нельзя переопределить родительские функции. :(

Чесно кажучи, це якась жесть.

А мне нужно отобразить везде кроме некоторых категорий, страниц, постов и авторов.
А конкретний перелік можна дізнатись?
Просто я не розумію, нащо тут дод. функція, якщо ВП вже має і дає користуватись всім чим треба.
Ось це:
if ( (is_home() || is_front_page() || is_category() || is_single() || is_author()) && !is_single(75) && of_get_option( ’w2f_cfa_text’ )!=’’) {
рівнозначно цьому:
if ( !is_tag() && !is_single(75) && of_get_option( 'w2f_cfa_text' )!='') {
і значно коротше (архівні тегів виключив, певно там слайдера не треба, так?)

Найголовніше, що наприклад функція is_single() приймає масив ід/слагів у якості аргумента, тому сюди можна вписати дуже багато постів. Що може бути простіше?)

Пишу в дочерний css, копирую php файлы (например, content) в папку дочерней темы и изменяю. Но пришлось лезть в php основной темы. Я не могу скопировать файл functions.php, потому что он не заменяет основной, а загружается до него + не могу заменить \themes\sparkling\inc\extras.php файлом из дочерней темы (подключается в functions.php)
Все вірно, краще дочірну тему робити. І все у вас працює як і задумувалось. А те що такий стан речей вам не підходить — це вже інше питання.
Якщо якісь функції з батьківських файлів вам не потрібні, то ви їх просто не використовуєте і все. Їх справді не можливо не завантажувати. Просто не використовуйте. Так це і робиться у ВП.
Чесно кажучи, це якась жесть.
Спасибо за ответ. Я знаю, что вопрос очень глупый, и поэтому добавил тег “рукалицо” и не надеялся, что кто-то ответит.
якщо ВП вже має і дає користуватись всім чим треба.
проблема в том, что я еще не знаю внутренности WordPress. Пока я еще изчаю php и даже до объектов не дошел. Поэтому использую его только как сборку из модулей + небольшая правка кода.

Пока нет знаний, оставлю так в functions.php (в самих функциях такие же условия):

if ( (is_home() || is_front_page()) && !is_single(75) && of_get_option( ’w2f_cfa_text’ )!=’’) {

Авто темы пишет вот так:

if( (is_home() || is_front_page()) && of_get_option('sparkling_slider_checkbox') == 1 ) { wp_enqueue_style( 'flexslider-css', get_template_directory_uri().'/inc/css/flexslider.css' ); }

if( (is_home() || is_front_page()) && of_get_option('sparkling_slider_checkbox') == 1 ) { wp_enqueue_script( 'flexslider-js', get_template_directory_uri() . '/inc/js/flexslider.min.js', array('jquery'), '20140222', true ); }

if( (is_home() || is_front_page()) && of_get_option('sparkling_slider_checkbox') == 1 ) { wp_enqueue_script( 'flexslider-customization', get_template_directory_uri() . '/inc/js/flexslider-custom.js', array('jquery', 'flexslider-js'), '20140716', true ); }

Поэтому по-любому придется в родительских файлах править php. Хотя можно в php дочерних тем продублировать это и изменить условия вызова функций.

Как вариант можно создать свой inc/extras.php. Сделать в нем свои переименнованые копии sparkling_call_for_action(), sparkling_featured_slider(), изменив в них условия. Тогда копируем header.php и вызываем свои функции.

Хотя мне все равно нужно подобие велосипеда, который я описал в первом сообщении. Например, я вставляю в в шапку (нет места под виджеты) AdSense или что-то подобное. Но не хочу, чтобы левая реклама отображалась в разделе “Портфолио” или “Об Авторе”. Тогда в условии if вывода кода, я пробегаюсь своей функцией по массиву исключений и не вывожу блок. Мне сказали, что эта функция будет нереально сложным велосипедом, если не знаешь еще API WP и объекты php.

P.S. После Joomla Wordpress очень непривычен. Например, в Joomla назначить на главную страницу определенную категорию (или компонент) — это дело 5 секунд. В Wordpress же вывести на главной странице категорию — геморрой. Плагины не обновляются годами wordpress.org/...ns/frontpage-to-category wordpress.org/...rontpage-category-filter , а самописные велосипеды из интернета ломают пагинацию и СЕО

)))))
Ну це діло звички. Як на мене, то все дуже навіть просто у ВП)

wp_enqueue_script
Ці скрипти по любому у якісь функції і викликаються через екшен ’init’. Особливість у тому, що знаючи назву функції і екшен, з яким вона викликається, можна відмінити виклик цієї функції. Тому дуже легко створити свою копію функції, повісити на той же екшен, а стару відмінити (remove_action). Тому файл батьківської теми можна не редагувати.
Хотя мне все равно нужно подобие велосипеда, который я описал в первом сообщении. Например, я вставляю в в шапку (нет места под виджеты) AdSense или что-то подобное. Но не хочу, чтобы левая реклама отображалась в разделе «Портфолио» или «Об Авторе». Тогда в условии if вывода кода, я пробегаюсь своей функцией по массиву исключений и не вывожу блок. Мне сказали, что эта функция будет нереально сложным велосипедом, если не знаешь еще API WP и объекты php.
Так, у вас складний (і не потрібний, за великим рахунком) велосипед з’являється. Хоча, якщо вам так дійсно легше — то можна й так.

тот код, что я привел выше, всего лишь включает в страницу файлы CSS и JS/ Комменты к нему от разработчика

// Add slider CSS only if is front page ans slider is enabled
// Add slider JS only if is front page ans slider is enabled
// Flexslider customization

Сами условия подключения и вызов подключения лежат вне функции (процедурный стиль).

Комментарии из Joomla jcomments в WordPress перетащил этим скриптом: daoyuan.li/...g-jcomments-to-wordpress

Только он не умел копировать вложенность, а вставлял все в 1 уровень в порядке следования как в БД. Переделал его немного, чтобы и вложенность копировал github.com/...la-jcomments-to-Wordpress

Работает, но комменты первого уровня не в хронологическом порядке. Подучусь и в будущем допилю его до нормального результата.

Підписатись на коментарі