Themes y Diseño

Foro WordPress » WordPress » Themes y Diseño

Funciones utiles (codigo Php) un recopilacion propia (4 mensajes)

Acerca de este hilo

Tags

  1. hugorg2010

    5.0
    Antiguedad: Abr 2010
    Mensajes: 115

    offline

    Publicado hace 1 año
    #

    tal vez a alguien le pueda ser de utilidad algun trozo de codigo que cumple algun funcion poco comun o no tan conocido a veces...casi todo el codigo esta provado que funciona pero siempre puede haber algun problema ..asi que cualquier cosa me avisan y tratare de ayudar en lo que pueda. un saludo para todos.

    Contador de visitas Simple. sin necesidad de usar un plugin como wp-post-views
    cumple la misma funcion. colocarlo en single.php ANTES del Loop

    < ?php get_header();update_visitas($post- >ID); ? >

    y colocar este codigo en functions.php

    function update_visitas($post_ID=0){
    global $wpdb;
            if(is_numeric($post_ID)){
            $wpdb- >query("UPDATE $wpdb- >postmeta SET meta_value=meta_value+1
            WHERE meta_key='visitas' AND post_id=('"
    .$post_ID."') LIMIT 1");
        }
    }

    URL personalizadas usando la funcion wp-rewrite
    obviamente agregar este codigo en functions.php

    global $wp_rewrite;
    $wp_rewrite- >author_base = 'vendedor';
    $wp_rewrite- >category_base = 'categoria';
    $wp_rewrite- >tag_base = 'etiquetas';
    $wp_rewrite- >search_base = 'buscar';
    $wp_rewrite- >flush_rules();

    Eliminar Palabras Prohibidas (Filtro)
    es la misma funcion que vi en ayuda wordpress con alguna pequeña modificacion y la posibilidad de ir agregando
    palabras a la lista desde el panel de control del theme.
    Donde dice "My_theme_bad_words" lo deben reemplazar con el nombre de la funcion que use su theme..eso aquellos que conocen como funcionan los control_panel de los themes los van a entender facil.

    function palabra_prohibida($content) {

        $content = strtolower(trim($content));//Pone todo el texto en minisculas.
        $content = ucfirst($content);//Pone la primer letra en mayusculas.
        $str = explode(";",get_option("My_theme_bad_words","palabra_ejemplo"));//la palabra a reemplazar.
        $newstr = "***";//la nueva palabra .
        $html = str_ireplace($str, $newstr, $content);
        //$html = preg_replace("[^A-Za-z0-9]"," ", $content);
        return $html;
    }

    add_filter('the_title', 'palabra_prohibida',1); //Reemplaza la palabra en el título
    add_filter('the_content', 'palabra_prohibida',1); //Reemplaza la palabra en el contenido
    add_filter('the_excerpt', 'palabra_prohibida',1); //Reemplaza la palabra en los extractos
    add_filter('comment_text', 'palabra_prohibida',1); //Reemplaza la palabra en los comentarios

    Filtro de Busqueda para Custom Fields
    agregar este codigo en functions.php y reemplazar las palabras a buscar por el nombre de sus custom field o campos
    personalizados

    // Removes pages from search
    function com_search_filter($query) {
        if ($query- >is_search) { $query- >set('post_type', 'post'); }
        return $query;
    }

    function custom_search_join($join) {
        if ( is_search() &amp;&amp; isset($_GET['s'])) {
            global $wpdb;
           $join = " LEFT JOIN $wpdb- >postmeta ON $wpdb- >posts.ID = $wpdb- >postmeta.post_id ";
        }
        return($join);
    }

    function custom_search_groupby($groupby) {
        if ( is_search() &amp;&amp; isset($_GET['s'])) {
            global $wpdb;
            $groupby = " $wpdb- >posts.ID ";
        }
        return($groupby);
    }

    function custom_search_where($where) {
        $old_where = $where;
        if (is_search() &amp;&amp; isset($_GET['s'])) {
            global $wpdb;
            $customs = Array('contact_name', 'price', 'phone', 'place','type','email','images');//ACA REEMPLAZAR LAS PALABRAS
            $query = '';
            $var_q = stripslashes($_GET['s']);
            if ($_GET['sentence']) {
                $search_terms = array($var_q);
            }
            else {
                preg_match_all('/".*?("|$)|((?< =[\\s",+])|^)[^\\s",+]+/', $var_q, $matches);
                $search_terms = array_map(create_function('$a', 'return trim($a, "\\"\'\\n\\r ");'), $matches[0]);
            }
            $n = ($_GET['exact']) ? '' : '%';
            $searchand = '';
            foreach((array)$search_terms as $term) {
                $term = addslashes_gpc($term);
                $query .= "{$searchand}(";
                            $query .= "($wpdb- >posts.post_title LIKE '{$n}{$term}{$n}')";
                $query .= " OR ($wpdb- >posts.post_content LIKE '{$n}{$term}{$n}')";
                foreach($customs as $custom) {
                    $query .= " OR (";
                    $query .= "($wpdb- >postmeta.meta_key = '$custom')";
                    $query .= " AND ($wpdb- >postmeta.meta_value  LIKE '{$n}{$term}{$n}')";
                    $query .= ")";
                }
                $query .= ")";
                $searchand = ' AND ';
            }
            $term = $wpdb- >escape($var_q);
            if (!$_GET['sentense'] &amp;&amp; Count($search_terms) > 1 &amp;&amp; $search_terms[0] != $var_q) {
                $search .= " OR ($wpdb- >posts.post_title LIKE '{$n}{$term}{$n}')";
                $search .= " OR ($wpdb- >posts.post_content LIKE '{$n}{$term}{$n}')";
            }

            if (!empty($query)) {
                $where = " AND ({$query}) AND ($wpdb- >posts.post_status = 'publish') ";
            }
        }
        return($where);
    }
    add_filter('posts_join', 'custom_search_join');
    add_filter('posts_where', 'custom_search_where');
    add_filter('posts_groupby', 'custom_search_groupby');
    add_filter('pre_get_posts','com_search_filter');

    Bloquear Acceso al Dasboard para usuarios de nivel inferior a ADMIN
    Una funcion interesante para mejorar un poco mas la seguridad de aquellos que no quieren que los usuarios no accedan al backend de wordpress excepto el admin.
    Obiamente va en functions.php

    // Bloquea el acceso al dasboard a los usuarios except el admin
    $access_min_type = 'edit_others_posts';
    $admin_redirect_to = get_option('siteurl');//direccion a la cual redirecciona ej: .'/my-account/'
    if (defined('ACCESS_MIN_TYPE'))
        $access_min_type = ACCESS_MIN_TYPE;
    if (defined('ADMIN_REDIRECT_TO'))
        $admin_redirect_to = ADMIN_REDIRECT_TO;
    if (!function_exists('wpba_init')) {
        function wpba_init() {
            global $access_min_type, $admin_redirect_to;
            if (strpos(strtolower($_SERVER['REQUEST_URI']),'/wp-admin/') !== false) {
                if (!current_user_can($access_min_type)) {
                    if ($admin_redirect_to == '') {
                        $admin_redirect_to = get_option('siteurl');
                    }
                    // Send a temporary redirect
                    wp_redirect($admin_redirect_to,302);
                }
            }
        }
    }
    add_action('init','wpba_init',0);

    Filtrar la busqueda por categorias
    Codigo php con javascript.

    < form action="< ?php bloginfo('url'); ? >/" method="get" >
        < ?php
       $select = wp_dropdown_categories('show_option_none=Seleccionar categoria&amp;show_count=1&amp;orderby=name&amp;echo=0&amp;selected=6');
       $select = preg_replace("#< select([^ >]*) >#", "< select$1 onchange='return this.form.submit()' >", $select);
       echo $select;
     ? >
        < noscript >< input type="submit" value="View" / >< /noscript >
    < /form >

    Mostrar que usuarios estan conectados

    function who_is_online($args=NULL)
    {
        global $wpdb;
        $who_is_online_table = $wpdb- >prefix . 'who_is_online';
        $guests_sql = 'SELECT COUNT(*) AS user_count FROM ' . $who_is_online_table . ' WHERE user_id IS NULL;';
        $members_sql = 'SELECT COUNT(user_id) AS user_count FROM ' . $who_is_online_table . ';';
        $result = $wpdb- >get_row($members_sql);
        $members = $result- >user_count;
        $result2 = $wpdb- >get_row($guests_sql);
        $guests = $result2- >user_count;
        return $members + $guests;
    }//FIN DE LA FUNCION


    Para mostrar la funcion usar
    echo who_is_online(1)

    Mostrar Custom Fiel Mismo Nombre y Multiples Valores a modo de lista

    Ejemplo:

    < ?php $ingredients = get_post_meta($post- >ID, 'Ingredient', false);? >

    < ?php foreach($ingredients as $ingredients)
      { echo '
    <li>'
    . $ingredients . '</li>
    '
    ; } ? >

    Mostrar las Categorias Hijo Solamente

    < div class="box" >
        < h2 >Categorias Hijo< /h2 >
    <ul>
           < ?php $cat_name = get_cat_ID('NOMBRE CATEGORIA PADRE') ? >
           < ?php wp_list_categories('title_li=&amp;orderby=name&amp;child_of=' . $cat_name); ? >
          </ul>

    < /div >

    Aplicar un estilo diferente segun el valor de un custom field
    Obviamente deben tener previamente creado un estilo css en su hoja de estilos (style.css) con el
    mismo nombre del custom field que vallan a usar

    < div class="< ?php echo get_post_meta($post- >ID,'post', true) ? >" id="post-< ?php the_ID(); ? >" >

    Mostrar la cantidad de resultados obtenidos en una busqueda
    Este codigo va en la pagina que esten utilizando para mostrar los resultados de busqueda segun su theme, puede ser
    en index.php o alguna pagina personalizada-

    < ?php if (is_search()) : ? >
            < ?php // Muestra el numeros de resultados que se obtiene de una busqueda
                    $results = new WP_Query("s=$s&amp;showposts=-1");
                    $term = wp_specialchars($s, 1);
                    $number = $results- >post_count;
                    wp_reset_query();? >
            < h1 >< ?php echo $number; ? > < ?php _e('Resultados para ',"wpct"); ? > " < ?php echo $term; ? > "< /h1 >
    < ?php endif; ? >

    Insertar Nota o el contenido que quieras automaticamente al final de cada post (single.php)
    Podes usarlo para agregar publicidad o enlaces que quieras conservar siempre al final de cada post de una manera automatica. esto se vizualiza unicamente en single.php. podes aplicarle un estilo personalizado usando css y este codigo
    va en functions.php

    function insert_note($content) {
            if(!is_feed() &amp;&amp; !is_home()) {
                    $content.= "< div class='content' >";
                    $content.= "ACA VA EL CONTENIDO QUE QUIERAS MOSTRAR";
                    $content.= "< /div >";
            }
            return $content;
    }
    add_filter ('the_content', 'insert_note');

    Bueno eso es todo por ahora tengo algunos mas pero tengo que probarlos primero, espero que a alguien les sea de utilidad.

  2. emaus23

    3.0
    Antiguedad: Feb 2011
    Mensajes: 19

    offline

    Publicado hace 1 año
    #

    hugorg2010, muy bueno el post; tengo una consulta: como puedo hacer que la función com_search_filter "solo" se ejecute si estoy en la pagina X y no en el resto.
    Desde ya muchas gracias.

  3. Covi

    1.0
    Antiguedad: Mar 2011
    Mensajes: 1

    offline

    Publicado hace 1 año
    #

    Bufff, hay un montón de porciones que has copiado de plugins ¿no?, algunas muy viejas y otras poco recomendadas como las consultas SQL directas.

    Por ejemplo, digo yo que para Mostrar que usuarios están conectados necesitarás la tabla who_is_online, ¿no?

    En el caso del estilo CSS:

    < div class="< ?php echo get_post_meta($post- >ID, 'Estilo CSS', true); ? >" id="post-< ?php the_ID(); ? >" >

    Hace tiempo que disponemos de la función post_meta() que incluye gran número de clases específicas: id del post o página, tipo (con los nuevos tipos), categorías, tags, si es adjunto, imagen... es prácticamente un WP_Query incrustado en el (X)HTML. Es decir, eso abarca bastantes opciones, ...aunque siempre puede uno querer un estilo muy muy específico, o muy genérico. Por cierto, un post_meta llamado post no es demasiado adecuado

    Por cierto... ¿para los resultados de la búsqueda por qué haces otra nueva búsqueda??

    $results = new WP_Query("s=$s&amp;showposts=-1");

    -mmm..., la traducción wpct, ¿de qué theme o plugin es? -

    Los resultados los tienes en la global $wp_query. Ejemplo -y este sí que es mío-:

    // # Paginación:
    $numResults = $wp_query- >found_posts; // Resultados
    $maxPages   = $wp_query- >max_num_pages; // Páginas por resultados
    $pagedPosts = $wp_query- >post_count;  // Post por página
    $pagenum    = $wp_query- >get('paged') > 0 ? $wp_query- >get('paged') : 1; // Página actual si es paginado


    Con ese se tiene todo lo necesario para la paginación, también se puede acceder a las variables de la consulta con get_query_var(), como bien indica la función ^^

    Otras cosas... bueno, viene en la documentación igual. El Codex es imprescindible.

  4. hugorg2010

    5.0
    Antiguedad: Abr 2010
    Mensajes: 115

    offline

    Publicado hace 1 año
    #

    hola Covi, como dice el titulo es una Recopilacion nunca dije que el codigo fuera de mi autoria y si es cierto que ahy trozos de codigo de plugin y tambien algunas funciones sacadas de algunos themes premiun, y tambien es cierto que puede no ser la mejor manera o la unica pero como dije cuando publique estos codigos tal vez a alguien le pueda ser de utilidad.. un saludo.

Responder

Debes Identificarte para publicar.

Foro WordPress » WordPress » Themes y Diseño