ওয়ার্ডপ্রেসের বাইরে ওয়ার্ডপ্রেস এপিআই অ্যাক্সেস করুন (কমান্ড-লাইন পিএইচপি)


13

আমার একটি পিএইচপি স্ক্রিপ্ট রয়েছে যা আমার ক্রোন জব হিসাবে চালানো দরকার। তবে এই স্ক্রিপ্টের ডাব্লু API- এ অ্যাক্সেস প্রয়োজন ( get_pages(), get_post_meta()এবং get_permalink()বিশেষভাবে)। আমি http://codex.wordpress.org/Integrating_WordPress_with_Your_Website এ দেওয়া নির্দেশাবলী অনুসরণ করেছি , কিন্তু ফলসই হয়নি।

কোড:

require_once('../../../wp-blog-header.php');
$args = array(
    'child_of' => 2083
);
$pages = get_pages($args);

তবে আমি php -q this_file.phpকমান্ড-লাইন থেকে চালানোর সময় আমি নিম্নলিখিত আউটপুটটি পাই:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Database Error</title>

</head>
<body>
    <h1>Error establishing a database connection</h1>
</body>
</html>

কারও কি কোন চিন্তা / পরামর্শ আছে?

উত্তর:


17

ওয়ার্ডপ্রেস আশা করে যে এটি কোনও সাধারণ ওয়েব অনুরোধ হিসাবে $ _SERVER ভেরিয়েবল সেটআপ হবে। এছাড়াও, আমি wp-block.php এর পরিবর্তে wp-load.php লোড করার পরামর্শ দেব কারণ আপনার সম্ভবত চালানোর জন্য ডাব্লুপি ক্লাস বা টেম্পলেট লোডার দরকার নেই। কমান্ড লাইন থেকে ডাব্লুপি-র সাথে ইন্টারঅ্যাক্ট করার জন্য যে কোনও স্ক্রিপ্টগুলি আমি সাধারণত শুরু করি তা এখানে:

define('DOING_AJAX', true);
define('WP_USE_THEMES', false);
$_SERVER = array(
    "HTTP_HOST" => "mysite.com",
    "SERVER_NAME" => "mysite.com",
    "REQUEST_URI" => "/",
    "REQUEST_METHOD" => "GET"
);
require_once('current/wp-load.php');

আপডেট 2018:

আজকাল ওয়ার্ডপ্রেসের মোটেও $ _SERVER দরকার হয় না। আপনার যদি কেবল ওয়ার্ডপ্রেস এপিআই ফাংশনগুলি অ্যাক্সেস করতে হয় (উদাহরণস্বরূপ ডাটাবেসে পড়া / লেখার জন্য) আপনার যা প্রয়োজন তা হ'ল:

require_once('current/wp-load.php');

# your code goes here...

ব্যবহার করতে get_pages, তার ডাব্লুপি ক্লাসের দরকার নেই। সুতরাং ডাব্লুপি-ব্লগ-হেডার.পিপি কল করার জন্য সঠিক ফাইল ছিল।
14:44

চেষ্টা ঠিক করছেন হিসাবে আপনি এখানে সঠিক সঙ্গে নির্দিষ্ট কিছু HTTP_HOST, SERVER_NAMEএবং REQUEST_URIwp-blog-header.phpএবং উভয় সঙ্গে চেষ্টা wp-load.php। সমস্ত দৃষ্টান্তে আসল প্রশ্নে বর্ণিত একই ত্রুটি বার্তা। আমি এটি আমার থিম ডিরেক্টরি থেকে চালাচ্ছি - তাতে কি কিছু আসে যায়?
ggutenberg

@ গোল্ডেন্যাপলস, তার এটি লোড হওয়ার প্রয়োজন, তবে এটি চালানোর দরকার নেই, যা ডাব্লুপি-ব্লগ-হেডার.এফপি অতিরিক্ত জিনিস দেয় stuff
সুন্দরবায়্প

2
@ ডসবয়, আপনি কি এটি সার্ভারে চালাচ্ছেন বা ডেভলপমেন্ট কম্পিউটার চালাচ্ছেন ম্যাম্প? যদি আপনি এটি এমন কোনও কম্পিউটারে চালাচ্ছেন যা মাইএসকিএল-র একাধিক ইনস্টলস ইনস্টলড রয়েছে, তবে আপনার পরিবেশটি কমান্ড লাইন থেকে একটি সাধারণ পিএইচপি এবং মাইএসকিএল উদাহরণ ব্যবহার করতে পারে যা সাধারণ http অনুরোধগুলির চেয়ে বেশি।
সুন্দরবায়্প

হুম ... চালাক চিন্তাভাবনা। এটি এমএএমপি চলমান একটি ডি বাক্স। তবে আমার প্রোডাকশন বাক্সে আমার এসএসএইচ অ্যাক্সেস নেই। স্ক্রিপ্টটি কাজ করছে কিনা তা নিশ্চিত করার জন্য কীভাবে আমার ডেভ মেশিনে একটি মাইএসকিউএল উদাহরণ নির্দিষ্ট করবেন?
ggutenberg

4

আপনি wp-cli eval-file কমান্ডটি ব্যবহার করতে পারেন :

@daily /usr/bin/wp --path=/path/to/wp/ eval-file /path/to/that_file.php

এটি প্রথমে ডব্লিউপি পরিবেশকে লোড করবে, তারপরে আপনার ফাইলটি চালাবে।


1

@ ব্যাখ্যাtyboymp- এর গৃহীত উত্তর হ'ল আমি ওয়েবে যে কোনও পিএইচপি স্ক্রিপ্ট থেকে ওয়ার্ডপ্রেস অ্যাক্সেস সম্পর্কে সর্বাধিক সহায়ক এবং অনন্য তথ্য। এটি ডাব্লুপি কোর ৩. core.১ এর সাথে আমার জন্য পুরোপুরি কাজ করেছে, তারপরে 3.9 এটি ভেঙে দিয়েছে।

সমস্যাটি হ'ল wp-load.phpএটি REQUEST_URIএকটি বৈধ পাথের জন্য পরীক্ষার পদ্ধতিটি বদলেছে । তবে ভাগ্যক্রমে এটি পরীক্ষার স্বল্প সংক্রমণ করার জন্য একটি নতুন ফিল্টার যুক্ত করেছে।

সুতরাং 3.9 উত্তর কার্যকারিতা পুনরুদ্ধার করতে, আমি যোগ define('SUNRISE', 'on');করতে wp-config.php, এবং নির্মিত ফাইল wp-content/sunrise.phpএই বিষয়বস্তুতে সঙ্গে

add_filter('pre_get_site_by_path', 'my_pre_get_site_by_path', 10, 5 /*null, $domain, $path, $segments, $paths*/ );
    function my_pre_get_site_by_path($input, $domain, $path, $segments, $paths) {
    if ($path == '/') {
        return get_blog_details(array('domain' => $domain, 'path' => PATH_CURRENT_SITE), false);
    }
    return $input;
}

0

@ সুন্দরবাইম্পের উত্তরের একটি ভিন্নতা হতে পারে:

if(in_array(php_sapi_name(), ['cli', 'cli-server'])) {
    foreach($_SERVER as $key => $val) {
        if(!getenv($key))
             putenv($key.'='.$val);
    }

    if(!getenv('HTTP_HOST'))
        putenv('HTTP_HOST='.gethostname());

    if(!getenv('SERVER_ADDR'))
        putenv('SERVER_ADDR='.gethostbyname(gethostname()));

    if(!getenv('REQUEST_URI'))
        putenv('REQUEST_URI=/');

    if(!getenv('REQUEST_METHOD'))
        putenv('REQUEST_METHOD=GET');
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.