मैं अपनी स्टाइलशीट में वर्डप्रेस फ़ंक्शन का उपयोग कैसे कर सकता हूं?


21

मेरे पास मेरी style.phpफाइल इस तरह दिख रही है।

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

यह काम नहीं करता है, लेकिन जब मैं ऐसा करता हूं तो यह काम करता है।

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

क्या समस्या होगी?

यह 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');

यह वास्तव में एडमिन सेक्शन में है।


WordPress को style.php में
FUXIA

मैंने wp_enqueue_scripts () का उपयोग किया;
रोनी

wp_enqueue_style ('my_style', plugin_dir_url ( FILE ) .'Includes / style.php ');
रॉनी

1
मुझे पूरा यकीन है कि आप अपने में इसका इस्तेमाल नहीं करेंगे style.php। यदि शैली फ़ाइल को वर्डप्रेस द्वारा नहीं बुलाया जाता है तो कोई वर्डप्रेस फ़ंक्शन उपलब्ध नहीं है।
FUXIA

जवाबों:


26

वर्डप्रेस फंक्शन तभी उपलब्ध होते हैं, जब वर्डप्रेस लोड होता है। यदि आप style.phpसीधे फोन करते हैं तो आप वर्डप्रेस फ़ंक्शन का उपयोग नहीं कर सकते हैं।

अपने PHP संचालित स्टाइलशीट के लिए वर्डप्रेस को लोड करने का एक सरल तरीका वर्डप्रेस के लिए एक समापन बिंदु जोड़ना है: एक कस्टम, आरक्षित URL जहां आप अपनी टेम्पलेट फ़ाइल लोड करते हैं।

आपको वहाँ पहुँचने के लिए:

  1. के 'init'साथ एक समापन बिंदु पंजीकृत करें add_rewrite_endpoint()। नाम बताइए 'phpstyle'

  2. हुक 'request'करें और सुनिश्चित करें कि सेट होने पर समापन बिंदु चर 'phpstyle'खाली नहीं है। क्रिस्टोफर डेविस के उत्कृष्ट ए (अधिकतर) वर्डप्रेस रीवेट एपीआई को पूरा गाइड पढ़ें यह समझने के लिए कि यहां क्या हो रहा है।

  3. 'template_redirect'डिफ़ॉल्ट टेम्पलेट फ़ाइल के बजाय अपनी फ़ाइल को हुक करें और वितरित करें index.php

चीजों को छोटा रखने के लिए मैंने निम्नलिखित डेमो प्लगइन में एक फ़ंक्शन में सभी तीन सरल चरणों को जोड़ा ।

प्लगइन PHP शैली

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

प्लगइन स्थापित करें, wp-admin/options-permalink.phpएक बार फिर से लिखे नियमों को ताज़ा करने के लिए जाएं , और style.phpअपनी थीम में जोड़ें ।

नमूना 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' );

अब विजिट करें yourdomain/phpstyle/। आउटपुट:

/* WordPress 3.3.2 */

default

लेकिन अगर आप yourdomain/phpstyle/blue/आउटपुट पर जाते हैं:

/* WordPress 3.3.2 */

blue

तो आप एक मूल्य के आधार पर एक फ़ाइल के साथ विभिन्न स्टाइलशीट देने के लिए समापन बिंदु का उपयोग कर सकते हैं get_query_var( 'phpstyle' )

चेतावनी

यह आपकी साइट को धीमा कर देगा। प्रत्येक यात्रा के लिए वर्डप्रेस को दो बार लोड करना पड़ता है । आक्रामक कैशिंग के बिना यह मत करो।


इसे WP में पोर्ट करने के लिए +1। संक्षिप्त विचार: get_query_var( 'phpstyle' ) AND ! defined( 'SHORTINIT' ) AND define( 'SHORTINIT', true )चीजों को गति देने के लिए ... और अगर तब सभी आवश्यक कार्य उपलब्ध हैं ...
kaiser

1

आप आउटपुट को लोड करके ऐसा कर सकते हैं admin-ajax.php, लेकिन इसके लिए एक बेहतर तरीका यह है कि SHORTINITआप वर्डप्रेस निरंतर का उपयोग करें ताकि आप केवल वही कार्य लोड कर सकें जिसकी आपको आवश्यकता है, लेकिन आपको इसे करने के लिए खोजने और लोड wp-load.phpकरने की आवश्यकता होगी :

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

इस बिंदु पर आपको यह सुनिश्चित करने की आवश्यकता होगी कि wp-includesआपके विषय विकल्पों को प्राप्त करने के लिए आपको जो भी अन्य फाइलें आवश्यक हैं, उनमें शामिल हैं - जो आपके द्वारा सहेजे जा रहे हैं और इस प्रकार उन तक पहुंचने के आधार पर अलग-अलग होंगी। (आपको संभवतः इस सूची में और अधिक जोड़ना होगा ताकि आपको घातक त्रुटियां न हों - लेकिन जैसा कि आप जा रहे हैं, घातक त्रुटियां आपको बताएंगी कि आपको किन फ़ाइलों को जोड़ने की आवश्यकता है।) उदा।

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

फिर एक बार जब आपके पास सभी फ़ंक्शन होते हैं, तो आप उन कार्यों का उपयोग करके CSS को आउटपुट कर सकते हैं ... उदा।

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

फिर आप फ़ाइल को सामान्य रूप से समझ सकते हैं, उदाहरण के लिए:

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

मेरी फ़ाइलों में अपना कोड जोड़ते समय, यह अभी भी अपरिभाषित कहता है। यह मेरा कोड है: pastebin.com/BJaUWX1x
J. Doe

आप की जरूरत नहीं है ../../पर wp-load.phpपथ, समारोह है के रूप में आप के लिए यह मिलेगा दिया ... लेकिन जैसे मैंने कहा कि आप को खोजने की जरूरत है और शामिल हैं जो कुछ फ़ाइलें आप की आवश्यकता है कार्यों का उपयोग कर रहे है, जैसे। get_background_imageमें है theme.phpआदि ... के रूप में आप सीएसएस आप और अधिक ताकि आप उन्हें इस पद्धति को प्रभावी ढंग से और मज़बूती से उपयोग करने के लिए प्राप्त करने का तरीका जानने के लिए की आवश्यकता होगी की आवश्यकता हो सकती में जोड़ें।
माजिक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.