¿Cómo puedo usar las funciones de WordPress en mi hoja de estilo?

20

Tengo mi archivo style.php con este aspecto.

<?php  header('Content-Type: text/css');?>
#div{
    background:<?php  echo get_option('bgcolor');?>;
}

Esto no funciona, pero cuando hago esto funciona.

<?php  header('Content-Type: text/css');?>
#div{
    background: <?php  echo 'blue';?>;
}

¿Cuál sería el problema?

Este es el mainfile.php

 <?php 

    function test(){
    global get_option('bgcolor');?>

        <input type="text" id="bgcolor" name="post_popup_settings[bgcolor]" value="<?php echo get_option('bgcolor');?> " />
    <?php
}
    add_action('admin_head','test');

Esto está realmente en la sección de administración.

    
pregunta Ronny 08.06.2012 - 17:44

2 respuestas

24

Las funciones de WordPress están disponibles solo si WordPress está cargado. Si llama directamente a su style.php , no puede usar una función de WordPress.

Una forma sencilla de cargar WordPress para su hoja de estilo impulsada por PHP es agregar un punto final a WordPress: una URL reservada y personalizada donde carga su archivo de plantilla.

Para llegar allí tienes que:

  1. Registre un punto final en 'init' con add_rewrite_endpoint() . Llamémoslo 'phpstyle' .

  2. Enganche en 'request' y asegúrese de que la variable de punto final 'phpstyle' no esté vacía si está establecida. Lea la excelente de Christopher Davis Una guía completa (principalmente) de la API de WordPress Rewrite para entender lo que está pasando aquí.

  3. Enganche en 'template_redirect' y entrega tu archivo en lugar de la plantilla predeterminada index.php .

Para abreviar, combiné los tres pasos simples en la función uno en el siguiente complemento de demostración.

Estilo PHP del complemento

<?php # -*- coding: utf-8 -*-
/*
 * Plugin Name: PHP Style
 * Description: Make your theme's 'style.php' available at '/phpstyle/'.
 */
add_action( 'init',              'wpse_54583_php_style' );
add_action( 'template_redirect', 'wpse_54583_php_style' );
add_filter( 'request',           'wpse_54583_php_style' );

function wpse_54583_php_style( $vars = '' )
{
    $hook = current_filter();

    // load 'style.php' from the current theme.
    'template_redirect' === $hook
        && get_query_var( 'phpstyle' )
        && locate_template( 'style.php', TRUE, TRUE )
        && exit;

    // Add a rewrite rule.
    'init' === $hook && add_rewrite_endpoint( 'phpstyle', EP_ROOT );

    // Make sure the variable is not empty.
    'request' === $hook
        && isset ( $vars['phpstyle'] )
        && empty ( $vars['phpstyle'] )
        && $vars['phpstyle'] = 'default';

    return $vars;
}

Instala el complemento, visita wp-admin/options-permalink.php una vez para actualizar las reglas de reescritura y agrega un style.php a tu tema.

Muestra style.php

<?php # -*- coding: utf-8 -*-
header('Content-Type: text/css;charset=utf-8');

print '/* WordPress ' . $GLOBALS['wp_version'] . " */\n\n";

print get_query_var( 'phpstyle' );

Ahora visita yourdomain/phpstyle/ . Salida:

/* WordPress 3.3.2 */

default

Pero si vas a yourdomain/phpstyle/blue/ la salida es:

/* WordPress 3.3.2 */

blue

Por lo tanto, puede usar el punto final para entregar diferentes hojas de estilo con un archivo, dependiendo del valor de get_query_var( 'phpstyle' ) .

Caveat

Esto ralentizará su sitio. WordPress se debe cargar dos veces para cada visita. No lo hagas sin un almacenamiento en caché agresivo.

    
respondido por el fuxia 08.06.2012 - 21:48
1

Puede hacer esto cargando la salida a través de admin-ajax.php , pero un mejor enfoque es usar WordPress SHORTINIT constante para que pueda cargar solo las funciones que necesita, pero tendrá que encontrar y cargar wp-load.php para hacer esto:

// send CSS Header
header("Content-type: text/css; charset: UTF-8");

// faster load by reducing memory with SHORTINIT
define('SHORTINIT', true);

// recursively find WordPress load
function find_require($file,$folder=null) {
    if ($folder === null) {$folder = dirname(__FILE__);}
    $path = $folder.DIRECTORY_SEPARATOR.$file;
    if (file_exists($path)) {require($path); return $folder;}
    else {
        $upfolder = find_require($file,dirname($folder));
        if ($upfolder != '') {return $upfolder;}
    }
}

// load WordPress core (minimal)
$wp_root_path = find_require('wp-load.php');
define('ABSPATH', $wp_root_path);
define('WPINC', 'wp-includes');

En este punto, necesitará asegurarse de incluir cualquier otro archivo wp-includes que necesite para obtener sus opciones de tema, que variarán dependiendo de su forma de ahorrar y, por lo tanto, de acceder a ellas. (Es probable que tenga que agregar más a esta lista para no recibir errores fatales, pero a medida que avanza, los errores fatales le indicarán qué archivos debe agregar).

include(ABSPATH.WPINC.DIRECTORY_SEPARATOR.'version.php');
include(ABSPATH.WPINC.DIRECTORY_SEPARATOR.'general-template.php');
include(ABSPATH.WPINC.DIRECTORY_SEPARATOR.'link-template.php');

Luego, una vez que tenga todas las funciones que necesita, puede generar el CSS utilizando esas funciones ... por ejemplo.

echo 'body {color:' . get_theme_mod('body_color') . ';}';
echo 'body {backgroundcolor:' . get_theme_mod('body_background_color') . ';}';
exit;

Luego puedes poner en cola el archivo como de costumbre, por ejemplo:

wp_enqueue_style('custom-css',trailingslashit(get_template_directory_uri()).'styles.php');
    
respondido por el majick 03.06.2016 - 13:41

Lea otras preguntas en las etiquetas