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.