WordPress işlevlerini stil sayfamda nasıl kullanabilirim?


21

Benim sahip style.phpdosyası bu gibi bakarak.

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

Bu işe yaramıyor, ama bunu yaptığımda işe yarıyor.

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

Sorun ne olurdu

Bu 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');

Bu aslında yönetici bölümünde.


WordPress style.php dosyasında
— fuxia

Wp_enqueue_scripts () kullandım;
— Ronny

wp_enqueue_style ('my_style', plugin_dir_url ( FILE ). 'İçindekiler / style.php');
— Ronny

1
Bunu senin içinde kullanmadığına eminim style.php. Stil dosyası WordPress tarafından çağrılmazsa, WordPress işlevi kullanılamaz.
— fuxia

Yanıtlar:


26

WordPress işlevleri yalnızca WordPress yüklüyse kullanılabilir. style.phpDoğrudan telefonunuzu ararsanız, bir WordPress işlevini kullanamazsınız.

PHP tabanlı stil sayfanız için WordPress'i yüklemenin basit bir yolu, WordPress'e bir son nokta eklemektir: şablon dosyanızı yüklediğiniz özel, ayrılmış bir URL.

Oraya gitmek için yapmanız gerekenler:

  1. Bir uç noktasını Kayıt 'init'ile add_rewrite_endpoint(). Adını verelim 'phpstyle'.

  2. Bağlayın 'request've 'phpstyle'ayarlanmışsa uç nokta değişkeninin boş olmadığından emin olun . Christopher Davis'in mükemmel A (Çoğunlukla) Burada neler olduğunu anlamak için WordPress Yeniden Yazma API'sinin eksiksiz bir rehberini okuyun .

  3. 'template_redirect'Varsayılan şablon dosyası yerine dosyanızı bağlayın ve gönderin index.php.

İşleri kısa tutmak için aşağıdaki üç basit adımı tek bir işlevde aşağıdaki demo eklentisinde birleştirdim.

Eklenti PHP Style

<?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;
}

Eklentiyi yükleyin, wp-admin/options-permalink.phpyeniden yazma kurallarını yenilemek için bir kez ziyaret edin ve style.phptemanıza bir ekleyin .

Numune 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' );

Şimdi ziyaret et yourdomain/phpstyle/. Çıktı:

/* WordPress 3.3.2 */

default

Ancak yourdomain/phpstyle/blue/çıktıya giderseniz :

/* WordPress 3.3.2 */

blue

Böylece uç noktayı, değerine bağlı olarak bir dosyayla farklı stil sayfaları sunmak için kullanabilirsiniz get_query_var( 'phpstyle' ).

Uyarı

Bu sitenizi yavaşlatır. WordPress her ziyaret için iki kez yüklenmelidir . Agresif önbellek olmadan yapmayın.


Bunu WP'ye taşımak için +1. Kısa fikir: get_query_var( 'phpstyle' ) AND ! defined( 'SHORTINIT' ) AND define( 'SHORTINIT', true )işleri hızlandırmak için… ve eğer gerekli tüm fonksiyonlar mevcutsa ...
— kaiser

1

Bunu çıktıyı yükleyerek yapabilirsiniz admin-ajax.php, ancak buna daha iyi bir yaklaşım WordPress SHORTINITsabitini kullanmaktır, böylece tam olarak ihtiyacınız olan işlevleri yükleyebilirsiniz, ancak bunu wp-load.phpyapmak için bulmanız ve yüklemeniz gerekir :

// 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');

Bu noktada olacak lüzum emin olun diğer her türlü kapsayacak şekilde wp-includessizin nasıl kaydediyorsunuz ve böylece bu erişen bağlı olarak değişecektir hangi - Eğer tema seçeneklerini almak gerekir dosyaları. (Büyük olasılıkla bu listeye daha fazla eklemeniz gerekir, böylece ölümcül hatalarla karşılaşmazsınız - ama giderken, ölümcül hatalar size hangi dosyaları eklemeniz gerektiğini söyleyecektir.) Örn.

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

Daha sonra ihtiyacınız olan tüm fonksiyonlara sahip olduğunuzda, bu fonksiyonları kullanarak CSS'yi çıkış yapabilirsiniz ... örn.

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

Ardından dosyayı normal olarak sıkıştırabilirsiniz, örneğin:

wp_enqueue_style('custom-css',trailingslashit(get_template_directory_uri()).'styles.php');

Kodumu dosyalarıma eklerken, hala tanımsız diyor. Bu benim kodum: pastebin.com/BJaUWX1x
— J. Doe

İhtiyacınız olmayan ../../üzerinde wp-load.php, yolun olduğu gibi sizin için bulacaksınız verilen işlevi ... ama dediğim gibi bulmak ihtiyacını yapmak ve dosyaları ne olursa olsun bulunmaktadır sen sen örneğin kullandığınız fonksiyonlara sahip olduğunu gerekir. get_background_imageolduğunu theme.phpsen bunları etkin ve güvenilir bir şekilde bu yöntemi kullanmak bulmak için öğrenmek gerekir böylece daha fazla gerekebilir CSS eklemek olarak ... vb.
— Majick
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.