Programación

Foro WordPress » WordPress » Programación

Shortcodes dentro de custom fields y otras dudas. (18 mensajes)

Acerca de este hilo

Tags

  1. fliberty

    5.0
    Antiguedad: Oct 2009
    Mensajes: 1.511

    offline

    Publicado hace 5 meses
    #

    Hola a todos, como saben he publicado una nueva página: http://www.cyberdocentes.com, la cual integra un formulario de publicación desde el front-end, donde el text-area para el contenido del artículo es un custom field "description", lo cual no se carga/muestra dentro del the_content o the_excerpt si no, haciendo la llamada respectiva del custom field.
    Este campo personalizado actúa como si fuese el campo de contenido, acepta formato o código html; sin embargo como el contenido del blog es educativa, dentro de su temática se encuentran los recursos educativos para diseño web, y quiero publicar algunas funciones, por lo que es necesario instalar un plugin como el google syntax o parecido y la verdad no he realizado el intento por colocar el shortcode dentro del campo personalizado, pero en teoría debería funcionar, no lo creen.

    Uno de los problemas de utilizar el custom field como campo de contenido para las entradas, no existe contenido RSS que mostrar, si hago un reconteo de caracteres para mostrar algo como the_excerpt, pero con formato, hay un punto donde las etiquetas html se corten y se combinen con las etiquetas del diseño en general, lo que ocasiona que el diseño se distorsione; hay alguna función, o posibilidad de crear una función que además de contar las palabras elimine las etiquetas o html de esta porción de contenido y lo muestre sin html.

    Para el feed ya lo tengo solucionado, ya que cuento con una función para mostrar custom fields en el RSS.

    Visítenme:
    http://www.contigoperu.com.pe (hosting/dominios) | http://www.pachakamaq.com (temática variada) | http://www.mipycs.com (image hosting gratuito) | http://www.contigoperusemanario.org(noticias) | http://www.contigoperuclasificados.com (clasificados gratis) | http://www.cyberdocentes.com (recursos educativos)
  2. almendron

    5.0
    Antiguedad: Feb 2010
    Mensajes: 1.101

    offline

    Publicado hace 5 meses
    #

    Prueba con "strip_tags" que elimina las etiquetas HTML. Si te funciona, le das las gracias a LGrusin que fue quien lo explico en una consulta anterior.

  3. fliberty

    5.0
    Antiguedad: Oct 2009
    Mensajes: 1.511

    offline

    Publicado hace 5 meses
    #

    Almendron muchas gracias por la respuesta, pero tendrás el enlace de esa consulta, ya que no encuentro en la búsqueda algo que me sirva.

    Visítenme:
    http://www.contigoperu.com.pe (hosting/dominios) | http://www.pachakamaq.com (temática variada) | http://www.mipycs.com (image hosting gratuito) | http://www.contigoperusemanario.org(noticias) | http://www.contigoperuclasificados.com (clasificados gratis) | http://www.cyberdocentes.com (recursos educativos)
  4. almendron

    5.0
    Antiguedad: Feb 2010
    Mensajes: 1.101

    offline

    Publicado hace 5 meses
    #

    La consulta no tenía nada que ver con la tuya, pero Grusin puso ese código para que la función no devolviera las etiquetas HTML:

    <?php if (is_category()) { ?>
    <meta name="description" content="<?php echo strip_tags(category_description()); ?>" />
    <?php } ?>

    Y para evita el salto de línea final:

    <?php echo trim(strip_tags(category_description())); ?>

    Manual de PHP

    http://php.net/manual/es/function.strip-tags.php

  5. fliberty

    5.0
    Antiguedad: Oct 2009
    Mensajes: 1.511

    offline

    Publicado hace 5 meses
    #

    La función que utilizo es esta:

    < ?php

                                $trim_length = 400//desired length of text to display

                                $custom_field = 'description';

                                $value = get_post_meta($post- >ID, $custom_field, true);');

                                if ($value) {
                                  echo '
    < p >' . rtrim(substr($value,0,$trim_length)) . '...<a href="'. get_permalink().'" rel="bookmark">M&aacute;s...</a>< /p >';

                                }

                                ? >

    Sin embargo, colocando el strip_tags en la posición que fuere, me devuelve contenido duplicado. Ahora estoy haciendo pruebas, luego también continúo con lo de la inclusión de shortcodes dentro del custom fields.

    Visítenme:
    http://www.contigoperu.com.pe (hosting/dominios) | http://www.pachakamaq.com (temática variada) | http://www.mipycs.com (image hosting gratuito) | http://www.contigoperusemanario.org(noticias) | http://www.contigoperuclasificados.com (clasificados gratis) | http://www.cyberdocentes.com (recursos educativos)
  6. almendron

    5.0
    Antiguedad: Feb 2010
    Mensajes: 1.101

    offline

    Publicado hace 5 meses
    #

    Pero ¿qué función es la que te devuelve etiquetas HTML?

  7. fliberty

    5.0
    Antiguedad: Oct 2009
    Mensajes: 1.511

    offline

    Publicado hace 5 meses
    #

    Esa misma, digamos que el uso normal del custom field es esto:

    < ?php global $description; $description = get_post_meta($post- >ID, "description", true); if (empty($description)) { ? >
    < ?php } else { ? >
       < ?php echo $description; ? >
    < ?php } ? >

    Si colo el custom field de esta forma, se mostrará todo el contenido del custom field, y digamos que este custom field se utiliza en lugar del the_content, y en portada no quiero mostrar todo el contenido, si no un extracto, para ello, muestro el custom field de esta forma:

    < ?php global $description; $description = get_post_meta($post- >ID, "description", true); if (empty($description)) { ? >
    < ?php } else { ? >
    < ?php
    $trim_length = 400//Aquí se indica la cantidad de caracteres a mostrar
    $custom_field = 'description'; //Se indica el value para la variable $custom_field
    $value = get_post_meta($post- >ID, $custom_field, true);');
    if ($value) {
    echo '
    < p >' . rtrim(substr($value,0,$trim_length)) . '...<a href="'. get_permalink().'" rel="bookmark">M&aacute;s...</a>< /p >'; //Esto imprime el valor del custom field pero ya con los 400 caracteres indicados incluido el enlace more
    } ? >
    < ?php } ? >

    Se tendría que modificar esto: rtrim(substr($value,0,$trim_length)) para que además de imprimir quite el html del valor del custom field.

    Visítenme:
    http://www.contigoperu.com.pe (hosting/dominios) | http://www.pachakamaq.com (temática variada) | http://www.mipycs.com (image hosting gratuito) | http://www.contigoperusemanario.org(noticias) | http://www.contigoperuclasificados.com (clasificados gratis) | http://www.cyberdocentes.com (recursos educativos)
  8. almendron

    5.0
    Antiguedad: Feb 2010
    Mensajes: 1.101

    offline

    Publicado hace 5 meses
    #

    ¿get_post_meta te devuelve etiquetas HTML?

    Si es así, prueba a

    $value = strip_tags(get_post_meta($post- >ID, $custom_field, true);'));

    Luego pon "echo $value" para ver que es lo que devuelve.

  9. fliberty

    5.0
    Antiguedad: Oct 2009
    Mensajes: 1.511

    offline

    Publicado hace 5 meses
    #

    Si, eso he realizado, pero no me funcionaba por que lo estaba colocando de esta manera: $value = strip_tags(get_post_meta($post- >ID, $custom_field, true);'),'
    <p>');

    Lo dejé sin las etiquetas permitidas, y sin embargo, algunas entradas más abajo, estas aún muestran texto en negrita a excepción de las primeras, que muestran el formato una vez se accede a la entrada.

    Visítenme:
    http://www.contigoperu.com.pe (hosting/dominios) | http://www.pachakamaq.com (temática variada) | http://www.mipycs.com (image hosting gratuito) | http://www.contigoperusemanario.org(noticias) | http://www.contigoperuclasificados.com (clasificados gratis) | http://www.cyberdocentes.com (recursos educativos)
  10. LGrusin

    Moderador
    Antiguedad: Feb 2011
    Mensajes: 1.801

    offline

    Publicado hace 5 meses
    #

    La verdad es que no he entendido bien el sentido que le quieres dar. ¿Necesitas HTML o no?

    Pregunto, ¿No podías haber aprovechado el excerpt manual? Te ahorras custom field, eliminas HTML y sale en el Feed.

    Sólo tendrías que modificar la plantilla para mostrar el content y el excerpt en caso de que exista.

    Supongo que querías algo más elaborado.

    Un saludo

  11. fliberty

    5.0
    Antiguedad: Oct 2009
    Mensajes: 1.511

    offline

    Publicado hace 5 meses
    #

    Que tal LGrusin, el problema es que estoy utilizando un formulario para que los usuarios publiquen sus artículos desde el front-end, estaba integrando un text-area cuyo contenido se publique como the_content, sin embargo al parecer hacia conflicto con alguna función que no logré arreglar y tuve que utilizar un custom field para publicar el contenido.

    Ahora en el home utilizo dos funciones, el the_excerpt para publicaciones que pueda hacer desde la administración y la función antes mencionada para mostrar el extracto de las publicaciones hechas desde el front-end con el custom field.

    Normalmente si cargo la página directamente, no se ve el cambio en la función que hace que no se muestre el html, sin embargo si dentro de la página, presiono el enlace al Muro, se muestra el cambio.

    Se puede decir que esta parte ya está solucionada, ahora estoy haciendo los extractos para mostrar el feed. Tengo lo siguiente:

    //Imagenes en FEED

    function relative_feed_thumbnail($content) {

       global $post;

       $images = get_post_meta($post- >ID, "images", $single = true);
       $description = get_post_meta($post- >ID, "description", $single = true);

    if($images !==''){

           $contenido = '< div style="float: left;" ><img src="' . $images . '" alt="" />< /div >< div style="text-align: justify;" >' . $description.'< /div >';

       }else { }

       return $contenido;

    }

    add_filter('the_excerpt_rss', 'relative_feed_thumbnail');

    add_filter('the_content_feed', 'relative_feed_thumbnail');

    Sin embargo como el formulario de agregar soporta la subida de multiples imagenes con un separador "," tengo problemas al modificar la función.
    Vengo trabajando la siguiente función para mostrar la imagen:

    < img src="'. bloginfo('url').'/wp-content/uploads/images/'.
        if (strstr($images, ',')){
        $matches = explode(',', $images);
        $img_single = $matches[0];
        $img_single = explode(trailingslashit(get_option('siteurl')) . "
    wp-content/uploads/images/", $img_single);
        echo $img_single[1];
        } else {
        $img_single2 = $images;
        echo $img_single2;
        }.'"
    width="100" height="100" alt="'. the_title_attribute(); .'" / >

    sin embargo me arroja el error: error, unexpected T_IF in.... en la segunda línea:
    if (strstr($images, ',')){
    del cual no encuentro solución.

    Visítenme:
    http://www.contigoperu.com.pe (hosting/dominios) | http://www.pachakamaq.com (temática variada) | http://www.mipycs.com (image hosting gratuito) | http://www.contigoperusemanario.org(noticias) | http://www.contigoperuclasificados.com (clasificados gratis) | http://www.cyberdocentes.com (recursos educativos)
  12. LGrusin

    Moderador
    Antiguedad: Feb 2011
    Mensajes: 1.801

    offline

    Publicado hace 5 meses
    #

    fliberty no se ven bien los códigos así. Debes usar comillas invertidas `

    Saludos

  13. fliberty

    5.0
    Antiguedad: Oct 2009
    Mensajes: 1.511

    offline

    Publicado hace 5 meses
    #

    Como que no soluciono el problema.

    Visítenme:
    http://www.contigoperu.com.pe (hosting/dominios) | http://www.pachakamaq.com (temática variada) | http://www.mipycs.com (image hosting gratuito) | http://www.contigoperusemanario.org(noticias) | http://www.contigoperuclasificados.com (clasificados gratis) | http://www.cyberdocentes.com (recursos educativos)
  14. fliberty

    5.0
    Antiguedad: Oct 2009
    Mensajes: 1.511

    offline

    Publicado hace 5 meses
    #

    Bueno sali un momento, pero aún no soluciono mi problema; por ahora la función está así:

    function relative_feed_thumbnail($content) {
        global $post, $images, $description;
        $images = get_post_meta($post- >ID, "images", $single = true);
        $description = get_post_meta($post- >ID, "description", $single = true);
    if($images !==''){
        $contenido = '< div style="float: left;" >
            < img src="'
    . bloginfo('url').'/wp-content/uploads/images/'.
            if(strstr($images,',')){
            $matches = explode(',', $images);
            $img_single = $matches[0];
            $img_single = explode(trailingslashit(get_option('siteurl')) . 'wp-content/uploads/images/', $img_single);
            echo ''.$img_single[1]}else{}.'" width="100" alt="" / >
        < /div >
        < div style="text-align: justify;" >'
    .$description.'< /div >';
       }else { }
       return $contenido;
    }
    add_filter('the_excerpt_rss', 'relative_feed_thumbnail');
    add_filter('the_content_feed', 'relative_feed_thumbnail');

    Sigue el problema: syntax error, unexpected T_IF en la línea:
    if(strstr($images,',')){

    Al parecer todo está bien, ya que es la misma función que utilizo para mostrar las imágenes en el home.

    Visítenme:
    http://www.contigoperu.com.pe (hosting/dominios) | http://www.pachakamaq.com (temática variada) | http://www.mipycs.com (image hosting gratuito) | http://www.contigoperusemanario.org(noticias) | http://www.contigoperuclasificados.com (clasificados gratis) | http://www.cyberdocentes.com (recursos educativos)
  15. LGrusin

    Moderador
    Antiguedad: Feb 2011
    Mensajes: 1.801

    offline

    Publicado hace 5 meses
    #

    fliberty de la manera que pones el código no se muestra correctamente en el Foro.

    Puesto que no sale bien es imposible detectar un error. O escriben los códigos entre comillas invertidas como he dicho en infinidad de ocasiones o no hay nada que hacer.

    Ejemplo:

    if ( !is_multisite() ) { ? >
    < div id="login" >< h1 ><a>"
     title="
    < ?php echo apply_filters('login_headertitle', esc_attr__('Powered by WordPress')); ? >" >
    < ?php bloginfo('name'); ? ></a>< /h1 >

    if ( !is_multisite() ) { ?>
    <div id="login"><h1><a href="<?php echo apply_filters('login_headerurl', 'http://wordpress.org/'); ?>"
     title="<?php echo apply_filters('login_headertitle', esc_attr__('Powered by WordPress')); ?>">
    <?php bloginfo('name'); ?></a></h1>

    Aunque no se vea en pantalla el segundo código sale completo y puede copiarse y pegarse perfectamente. Además el primer código no sólo no se muestra correctamente sino que desaparece del cuadro de edición, con lo que queda totalmente destrozado.

    Un saludo

  16. fliberty

    5.0
    Antiguedad: Oct 2009
    Mensajes: 1.511

    offline

    Publicado hace 5 meses
    #

    Haber digamos que la función que utilizo para extraer la URL de la imagen, excluyendo el divider "," es la siguiente:


    <?php $images = get_post_meta($post->ID, "images", true); if (empty($images)) { ?><?php } else{?><?php bloginfo(url)?>/wp-content/uploads/images/<?php
    if ( strstr($images, ,)) {
    $matches = explode(",", $images);
    $img_single = $matches[0];
    $img_single = explode(trailingslashit(get_option(siteurl)) . "wp-content/uploads/images/", $img_single);
    echo $img_single[1];
    } else {
    $img_single2 = $images;
    echo $img_single2;
    }?><?php }?>

    Y la función que utilizo para mostrar custom fields en el feed es la siguiente:


    function cyberdocentes_feed($content) {
    global $post, $images, $description;
    $images = get_post_meta($post->ID, "images", $single = true);
    $description = get_post_meta($post->ID, "description", $single = true);
    if($images !==){
    $contenido = `<div style="text-align: justify">
    .$description.<br />
    .$content.
    </div>`;
    }
    else {
    return $contenido;
    }
    }
    add_filter(the_excerpt_rss, cyberdocentes_feed);
    add_filter(the_content_feed, cyberdocentes_feed);

    Actualmente solo muestra el custom field del text area "description", ya que la función para mostrar la imagen no resulta, y si coloco sólo si hay una sola imagen se muestra la url incluido el divider: "http://www.dominio.com/wp-content/uploads/images/imagen.jpg," y lógicamente la imagen no se mostrará.

    En cuanto a la utilización de shortcodes dentro de los campos personalizados, en este caso el campo "description", lo hice de la siguiente manera:

    <?php if (get_post_meta($post->ID, 'description', true)) echo do_shortcode(get_post_meta($post->ID, 'description', $single = true)); if (empty($description)){ ?>
    <?php } else { ?>
    <?php echo $description; ?>
    <?php } ?>

    Como saben la función do_shortcode nos permite mostrar un shortcode en diferentes partes del theme, sólo hay que saber donde configurarlo.

    Visítenme:
    http://www.contigoperu.com.pe (hosting/dominios) | http://www.pachakamaq.com (temática variada) | http://www.mipycs.com (image hosting gratuito) | http://www.contigoperusemanario.org(noticias) | http://www.contigoperuclasificados.com (clasificados gratis) | http://www.cyberdocentes.com (recursos educativos)
  17. LGrusin

    Moderador
    Antiguedad: Feb 2011
    Mensajes: 1.801

    offline

    Publicado hace 5 meses
    #

    Lo que has puesto es lo mismo que:

    <?php $images = get_post_meta($post->ID, "images", true);
    if (!empty($images)) {
    <?php bloginfo(url)?>/wp-content/uploads/images/
    
     <?php
     if ( strstr($images, ,)) {
     $matches = explode(",", $images);
     $img_single = $matches[0];
     $img_single = explode(trailingslashit(get_option(siteurl)) . "wp-content/uploads/images/", $img_single);
     echo $img_single[1];
     } else {
     $img_single2 = $images;
     echo $img_single2;
     }
    }
    ?>

    Pues ahora que está más ordenado se puede ver algo...

    ¿get_post_meta devuelve la URL de la imagen o sólo el archivo de imagen?

    La función strstr muestra después de la coincidencia. Es decir, strstr($images, ',') muestra a partir de la coma en adelante. En caso de que haya dos nombres de imágenes separados por coma sólo cogería la segunda.

    si pones blog_info te muestra todas las imágenes que haya en /wp-content/uploads/images/ no entiendo el sentido de esa parte.

    Modifica esto y seguimos...

    Un saludo

  18. fliberty

    5.0
    Antiguedad: Oct 2009
    Mensajes: 1.511

    offline

    Publicado hace 5 meses
    #

    Bueno, hice algunas modificaciones a la función de subida de imágenes y a la función que muestra las imágenes subidas. Ahora ya se ve la imagen en el feed.

    Visítenme:
    http://www.contigoperu.com.pe (hosting/dominios) | http://www.pachakamaq.com (temática variada) | http://www.mipycs.com (image hosting gratuito) | http://www.contigoperusemanario.org(noticias) | http://www.contigoperuclasificados.com (clasificados gratis) | http://www.cyberdocentes.com (recursos educativos)

Responder

Debes Identificarte para publicar.

Foro WordPress » WordPress » Programación