[Инфо] Wordpress: плюшки файла functions.PHP ))

Тема в разделе "Wordpress", создана пользователем Красавчег, 10 окт 2012.

Модераторы: Sorcus
  1. fuxilazo

    fuxilazo Создатель

    Регистр.:
    3 ноя 2016
    Сообщения:
    21
    Симпатии:
    5
    увеличение длительности залогиненности в админке вордпресса, чтоб не выкидывало при неактивности и можно было дольше заходить на сайт)

    PHP:

    add_filter
    'auth_cookie_expiration''stay_logged_in_for_1_year' );
    function 
    stay_logged_in_for_1_year$expire ) {
          return 
    31556926// 1 год в секундах
    }

    замена текста приветствия в админке, можно написать что-нибудь типа "Как у вас дела?" или "Пользователь залогиненен под ..."

    PHP:
    function replace_howdy$wp_admin_bar ) { 
             
    $my_account=$wp_admin_bar->get_node('my-account');
             
    $newtitle str_replace'Howdy,''<новый текст>'$my_account->title );     
             
    $wp_admin_bar->add_node( array(
                                    
    'id' => 'my-account',
                                    
    'title' => $newtitle,     ) ); 
    }

    add_filter'admin_bar_menu''replace_howdy',25 );

     
  2. unnell

    unnell Создатель

    Регистр.:
    28 июл 2013
    Сообщения:
    15
    Симпатии:
    7
    Чтобы создать свои поля в настройке шаблона, в шаблоне темы появиться
    Options themes
    Код:
    class ControlPanel
    {
    
        var $default_settings = array(
            'phone' => '495 111-11-11',
            'email' => 'info@site.ru'
        );
        var $options;
    
        function ControlPanel()
        {
            add_action('admin_menu', array(&$this, 'add_menu'));
            if (!is_array(get_option('themadmin'))) {
                add_option('themadmin', $this->default_settings);
            }
            $this->options = get_option('themadmin');
        }
    
        function add_menu()
        {
            add_theme_page('WP Theme Options', 'Options themes', 8, "themadmin", array(&$this, 'optionsmenu'));
        }
    
    
        function optionsmenu()
        {
            if ($_POST['ss_action'] == 'save') {
                $this->options["phone"] = $_POST['cp_phone'];
                $this->options["email"] = $_POST['cp_email'];
                $this->options["site"] = $_POST['cp_site'];
                $this->options["time"] = $_POST['cp_time'];
                $this->options["address"] = $_POST['cp_address'];
                $this->options["copyright"] = $_POST['cp_copyright'];
                $this->options["week"] = $_POST['cp_week'];
                $this->options["times"] = $_POST['cp_times'];
                $this->options["post"] = $_POST['cp_post'];
                $this->options["office"] = $_POST['cp_office'];
                $this->options["facebook"] = $_POST['cp_facebook'];
                $this->options["vkontakte"] = $_POST['cp_vkontakte'];
                $this->options["twitter"] = $_POST['cp_twitter'];
                $this->options["metrika"] = $_POST['cp_metrika'];
                update_option('themadmin', $this->options);
                echo '<div class="updated fade" id="message" style="background-color: rgb(255, 251, 204); width: 400px; margin-left: 17px; margin-top: 17px;"><p>Your changes <strong>saved</strong>.</p></div>';
            }
    
            echo '<form action="" method="post" class="themeform">';
            echo '<input type="hidden" id="ss_action" name="ss_action" value="save">';
    
            print '<div class="cptab"><br />
             <b>Settings themes</b>
             <br />
             <h3>Contacts</h3>
             <p><input placeholder="Telephone" style="width:300px;" name="cp_phone" id="cp_phone" value="' . $this->options["phone"] . '"><label> - phone</label></p>
             <p><input placeholder="Email" style="width:300px;" name="cp_email" id="cp_email" value="' . $this->options["email"] . '"><label> - email</label></p>
             <p><input placeholder="Site" style="width:300px;" name="cp_site" id="cp_site" value="' . $this->options["site"] . '"><label> - site</label></p>
             <p><input placeholder="Time" style="width:300px;" name="cp_time" id="cp_time" value="' . $this->options["time"] . '"><label> - time</label></p>
             <p><input placeholder="Address" style="width:300px;" name="cp_address" id="cp_address" value="' . $this->options["address"] . '"><label> - address</label></p>
             <p><input placeholder="Copyright" style="width:300px;" name="cp_copyright" id="cp_copyright" value="' . $this->options["copyright"] . '"><label> - copyright</label></p>
             <h3>Schedule</h3>
             <p><input placeholder="Week" style="width:300px;" name="cp_week" id="cp_week" value="' . $this->options["week"] . '"><label> - week</label></p>
             <p><input placeholder="Times" style="width:300px;" name="cp_times" id="cp_times" value="' . $this->options["times"] . '"><label> - times</label></p>
             <p><input placeholder="Post" style="width:300px;" name="cp_post" id="cp_post" value="' . $this->options["post"] . '"><label> - post</label></p>
             <p><input placeholder="Office" style="width:300px;" name="cp_office" id="cp_office" value="' . $this->options["office"] . '"><label> - office</label></p>
             <h3>Social networks</h3>
             <p><input placeholder="Link on page facebook" style="width:300px;" name="cp_facebook" id="cp_facebook" value="' . $this->options["facebook"] . '"><label> - facebook</label></p>
             <p><input placeholder="Link on page vkontakte" style="width:300px;" name="cp_vkontakte" id="cp_vkontakte" value="' . $this->options["vkontakte"] . '"><label> - vkontakte</label></p>
             <p><input placeholder="Link on page twitter" style="width:300px;" name="cp_twitter" id="cp_twitter" value="' . $this->options["twitter"] . '"><label> - twitter</label></p>
    
             <h3>Code in footer.php</h3>
             <p><textarea placeholder="It is possible to register codes counters or additional scripts" style="width:300px;" name="cp_metrika" id="cp_metrika">' . stripslashes($this->options["metrika"]) . '</textarea><label> - It is possible to register codes counters or additional scripts</label></p>
    
             </div><br />';
            echo '<input type="submit" value="Save" name="cp_save" class="dochanges" />';
            echo '</form>';
        }
    }
    
    $cpanel = new ControlPanel();
    $mytheme = get_option('themadmin');
    Вызов поля get_option('twitter'); // пример
     
    Последнее редактирование: 6 ноя 2016
  3. WebWolfRus

    WebWolfRus Создатель

    Регистр.:
    4 июн 2016
    Сообщения:
    23
    Симпатии:
    14
    Очень долго искать код который скроет записи, изображения и комментарии от других аккаунтов пользователей.

    Код:
    //Скрываем изображения от других пользователей
    add_filter( 'posts_where', 'hide_attachments_wpquery_where' );
    function hide_attachments_wpquery_where( $where ){
        global $current_user;
        if( !current_user_can( 'manage_options' ) ) {
            if( is_user_logged_in() ){
                if( isset( $_POST['action'] ) ){
                    // library query
                    if( $_POST['action'] == 'query-attachments' ){
                        $where .= ' AND post_author='.$current_user->data->ID;
                    }
                }
            }
        }
        return $where;
    }
    
    
    //Скрываем посты от других пользователей.
    function hide_posts_media_by_other($query) {
        global $pagenow;
        if( ( 'edit.php' != $pagenow && 'upload.php' != $pagenow   ) || !$query->is_admin ){
            return $query;
        }
        if( !current_user_can( 'manage_options' ) ) {
            global $user_ID;
            $query->set('author', $user_ID );
        }
        return $query;
    }
    add_filter('pre_get_posts', 'hide_posts_media_by_other');
    
    //Скрываем комментарии от других пользователей.
    function true_get_comments_by_user_posts($clauses) {
        if (is_admin()) {
            global $wpdb, $user_ID;
            $clauses['join'] = ", {$wpdb->prefix}posts";
            $clauses['where'] .= " AND {$wpdb->prefix}posts.post_author = ".$user_ID." AND {$wpdb->prefix}comments.comment_post_ID = {$wpdb->prefix}posts.ID";
        }
        return $clauses;
    }
     // включаем фильтр, если у пользователя нет прав на редактирование чужих постов, то есть он либо автор, либо участник, либо подписчик
    if(!current_user_can('edit_others_posts')) {add_filter('comments_clauses', 'true_get_comments_by_user_posts');}
    
    
     
  4. covrak

    covrak Создатель

    Регистр.:
    7 июл 2016
    Сообщения:
    20
    Симпатии:
    2
    Можно ли как-то выводить разные логотипы в шапке на разных страницах? Тема Impreza
     
  5. ati_k

    ati_k Писатель

    Регистр.:
    25 мар 2014
    Сообщения:
    4
    Симпатии:
    0
    Условия прописать, если страница такая, то logo[1].jpg. если такая, то logo[2].jpg
     
  6. covrak

    covrak Создатель

    Регистр.:
    7 июл 2016
    Сообщения:
    20
    Симпатии:
    2
    А подробнее не подскажете?) В PHP я никакой
     
  7. ezh88

    ezh88 Создатель

    Регистр.:
    26 янв 2016
    Сообщения:
    29
    Симпатии:
    1
    А можно в плагин еще добавить удаление rel_canonical? И для удаления canonical Yoast SEO?

    remove_action('wp_head', 'rel_canonical');

    Код:
    // Remove Canonical Link Added By Yoast WordPress SEO Plugin
    function at_remove_dup_canonical_link() {
            return false;
    }
    add_filter( 'wpseo_canonical', 'at_remove_dup_canonical_link' );
    
        remove_action('wp_head', 'wp_generator'); // Убирает вывод используемого движка и его версии
        remove_action('wp_head', 'rel_canonical'); // Убирает канонические линки
        remove_action('wp_head', 'wp_shortlink_wp_head'); // Убирает короткую ссылку к текущей странице
        remove_action('wp_head', 'wlwmanifest_link'); // Используется блог-клиентами, а вернее лишь одним из них - Windows Live Writer. Не используете WLW - удаляйте.
        remove_action('wp_head', 'rsd_link'); // Используется различными блог-клиентами или веб-сервисами для публикации/изменения записей в блоге.
        remove_action('wp_head', 'pagenavi_css'); // Убирает вывод лишнего css изи плагина WP-PageNavi
        remove_action('wp_head', 'index_rel_link'); // Убирает ссылку на главную страницу
        remove_action('wp_head', 'parent_post_rel_link', 10, 0); // Убирает ссылку на предыдущую запись
        remove_action('wp_head', 'start_post_rel_link', 10, 0);  // Убирает ссылку на первую запись
        remove_action('wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0); // Убирает связь с родительской записью
        remove_action('wp_head', 'adjacent_posts_rel_link', 10, 0); // Убирает ссылку на следующую запись
        remove_action('wp_head', 'feed_links_extra', 3); // Запрещаем вывод RSS фида для записей, тегов, рубрик и т.д. Таким образом, мы запрещаем создавать такие фиды, но тем не менее, они будут доступны, если добавить /feed в конец урла.
        remove_action('wp_head', 'feed_links', 2); // Формально если запретить данное действие, то в блоге не должны выводиться ссылки на основную ленту RSS и на RSS ленту комментариев. А на практике это работать не будет, так как функция wp_head не выводит эти самые ссылки на RSS ленты записей и комментариев, их вывод должен осуществляться вручную в файле header.php
        //полное отключение Emoji
        remove_action('wp_head', 'print_emoji_detection_script', 7);
        remove_action('wp_print_styles', 'print_emoji_styles');
        remove_action('admin_print_scripts', 'print_emoji_detection_script');
        remove_action('admin_print_styles', 'print_emoji_styles');
        // Код ниже избавляет от wp-json и oembed
        add_filter('rest_enabled', '__return_false'); // Отключаем сам REST API
        // Отключаем фильтры REST API
        remove_action( 'xmlrpc_rsd_apis', 'rest_output_rsd' );
        remove_action( 'wp_head', 'rest_output_link_wp_head', 10, 0 );
        remove_action( 'template_redirect', 'rest_output_link_header', 11, 0 );
        remove_action( 'auth_cookie_malformed', 'rest_cookie_collect_status' );
        remove_action( 'auth_cookie_expired', 'rest_cookie_collect_status' );
        remove_action( 'auth_cookie_bad_username', 'rest_cookie_collect_status' );
        remove_action( 'auth_cookie_bad_hash', 'rest_cookie_collect_status' );
        remove_action( 'auth_cookie_valid', 'rest_cookie_collect_status' );
        remove_filter( 'rest_authentication_errors', 'rest_cookie_check_errors', 100 );
        // Отключаем события REST API
        remove_action( 'init', 'rest_api_init' );
        remove_action( 'rest_api_init', 'rest_api_default_filters', 10, 1 );
        remove_action( 'parse_request', 'rest_api_loaded' );
        // Отключаем Embeds связанные с REST API
        remove_action( 'rest_api_init', 'wp_oembed_register_route');
        remove_filter( 'rest_pre_serve_request', '_oembed_rest_pre_serve_request', 10, 4 );
        remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );
        remove_filter('oembed_dataparse', 'wp_filter_oembed_result', 10);
        remove_action('wp_head', 'wp_oembed_add_host_js');
        // убираем meta rel='dns-prefetch' href='//s.w.org'
        remove_action( 'wp_head', 'wp_resource_hints', 2 );
     
  8. ezh88

    ezh88 Создатель

    Регистр.:
    26 янв 2016
    Сообщения:
    29
    Симпатии:
    1
    ------------------------------------------------------------------------
    Выполнение PHP-кода в виджетах WordPress без плагина
    ------------------------------------------------------------------------
    Код:
    // Выполнение PHP-кода в виджетах WordPress без плагина
    function mayak_widget_php($widget_content) {
    if (strpos($widget_content, '<' . '?') !== false) {
    ob_start();
    eval('?' . '>' . $widget_content);
    $widget_content = ob_get_contents();
    ob_end_clean();
    }
    return $widget_content;
    }
    add_filter('widget_text', 'mayak_widget_php', 99);
     
  9. ezh88

    ezh88 Создатель

    Регистр.:
    26 янв 2016
    Сообщения:
    29
    Симпатии:
    1
    Не добавляет имя папки, а просто //
    /wp-content/uploads/2016/12//file.jpg
    Идея вообще офигенная.
    Вот как бы еще просканировать старые посты и пересоздать файлы в новых папках своих?
     
  10. Varrcan

    Varrcan Создатель

    Регистр.:
    7 апр 2012
    Сообщения:
    27
    Симпатии:
    22
    Готово. Добавил в плагин стандартное удаление rel_canonical и удаление хука в Yoast SEO

    Код:
    remove_action('wp_head', 'rel_canonical');
    add_filter('wpseo_canonical', '__return_false')
    Проверяйте )
     
    ezh88 нравится это.