ইন ফিল্টার বা কর্মে $ পোস্ট পাবেন?


12

দেখে মনে হচ্ছে $ পোস্টটি নির্দিষ্ট সময়ে সম্পাদিত হুকগুলির জন্য কেবল উপলভ্য। আমার একটি "init" হুক রয়েছে যা that পোস্ট-> আইডি ব্যবহার করে ডাটাবেস থেকে কিছু ডেটা টানতে পারে।

এখনও অবধি আমার একমাত্র কাজটি হচ্ছে_ কনটেন্টে অন্য একটি ফিল্টার যুক্ত করা, যা আমার প্রয়োজনীয় তথ্য পেতে $ পোস্ট ব্যবহার করে। দুর্ভাগ্যক্রমে, এটি স্ক্রিনে রিটার্ন মানকেও প্রতিধ্বনিত করে এবং প্রকৃতপক্ষে ফিল্টারের নামক ফাংশনে এটি ফিরিয়ে দিতে ব্যর্থ হয়।

এখানে কোডটি আমার প্রয়োজনীয় ডেটাগুলি বের করে তবে প্রতিধ্বনিত হয় এবং মানটি ফেরত দিতে ব্যর্থ হয়:

add_filter('the_content', 'get_keyword');
function get_keyword()
{
    global $post;
    $keyword = get_post_meta( $post->ID, '_wpg_def_keyword', true );
    return $keyword;
}

আমার কী প্রয়োজন এবং কীভাবে এটি প্লাগিনে পরবর্তী ব্যবহারের জন্য কলিং ফাংশনে ফিরে দেওয়া যায় সে সম্পর্কে কারও কি কোনও পরামর্শ আছে?

সম্পাদনা: সম্ভবত এটি আরও পরিষ্কার করার জন্য, আমার হাতে একটি ফিল্টার চলছে আর ডিবি থেকে বর্তমান পোস্টে তথ্য পুনরুদ্ধার করতে সক্ষম হওয়া দরকার। এটি করতে, এটির জন্য $ পোস্ট-> আইডি অ্যাক্সেস প্রয়োজন। তবে থিমের মধ্যে এটি সম্ভব নয়, তাই আমি কীভাবে আমার প্রয়োজনীয় ফলাফল পেতে পারি?

ধন্যবাদ,

জনাথন

মীমাংসিত:

উত্তরটি সরিয়ে দেয় কেবল url_to_postid এর মতো ব্যবহার করা:

$keyword = get_post_meta(
     url_to_postid( "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'] ),
     '_wpg_def_keyword',
     true
);

এমনকি init থেকে পুরোপুরি কাজ করে।


1
আপনার একটি অ্যাকশন হুক দরকার ফিল্টার হুক নয়, সুযোগে হওয়ার initজন্য খুব তাড়াতাড়ি global $post;। আপনি যা অর্জন করার চেষ্টা করছেন তা যদি আপনি বর্ণনা করেন তবে আরও ভাল সহায়তা করবে।
বেন্টারনেট

অ্যাকশন হুক ঠিক একইভাবে আচরণ করে, আমি উভয়ই চেষ্টা করেছি। আমি জানি, ইনিশ খুব তাড়াতাড়ি, আমি কীভাবে আমার প্রয়োজনীয় ফলাফলটি অর্জন করতে হবে তা নির্ধারণ করার চেষ্টা করছি - যা ডিবি থেকে তথ্য গ্রহণের জন্য ডিআইআর দ্বারা চালিত একটি ফিল্টার যা পুনরুদ্ধারের জন্য পোস্ট আইডি প্রয়োজন।
জোনাথন

আপনার কি সত্যিই উপসর্গটিতে এটি করা দরকার ? পরে কেন হুক হবে না?
রাস্ট

পৃষ্ঠার জন্য আমাকে ডিফল্ট কীওয়ার্ডটি পুনরুদ্ধার করতে হবে, যদি ইতিমধ্যে ইউআরএল-এ কোনও সরবরাহ না করা থাকে। এই কীওয়ার্ডটি ডিবিতে সঞ্চিত রয়েছে এবং অন্য কোনও স্ক্রিপ্ট কার্যকর করার আগে অবশ্যই তা জানা উচিত be আমি যে নমুনা সরবরাহ করেছি তাতে আপনি দেখতে পাচ্ছেন, আমি আমার_পরিষ্কারে প্রয়োজনীয় মূল্য পেতে সক্ষম হয়েছি তবে এটি স্ক্রিনে প্রতিধ্বনিত হয় এবং কলিং ফাংশনে মোটেও ফিরে যায় না। আপনার যদি অন্য কোনও সমাধান থাকে তবে দয়া করে এটির পরামর্শ দিন।
জোনাথন

দয়া করে আপনার সমাধানটিকে একটি উত্তরে সরিয়ে দিন, তবে এটি সাইটের যান্ত্রিকগুলির সাথে সামঞ্জস্যপূর্ণ। এছাড়াও শিরোনামে সমাধান করার দরকার নেই - আপনি উত্তরটি গ্রহণ করতে সক্ষম হবেন এবং আপনার প্রশ্নের উত্তর হিসাবে চিহ্নিত করা হবে।
রাস্তার

উত্তর:


12

উত্তরটি কেবল url_to_postidএই জাতীয় ব্যবহারের জন্য সন্ধান করে :

$keyword = get_post_meta( url_to_postid( "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'] ), '_wpg_def_keyword', true );

এমনকি পুরোপুরি কাজ করে init


2

এটি ওয়ার্ডপ্রেস ৪.7 এও কাজ করে:

$postID = url_to_postid( $_SERVER['REQUEST_URI'] , '_wpg_def_keyword', true ); 

2

গ্রহণযোগ্য উত্তরটি ব্যবহার করতে সমস্যা হয়েছে কারণ এটি পোর্ট এবং মাল্টিসাইট পোর্টগুলির সাথে কাজ করে না । এখানে একটি সমাধান যা প্রতিটি ক্ষেত্রে কাজ করা উচিত:

/**
* Note: This function will only work on SINGULAR posts/pages/post types
*/
function get_early_postid() {
    return url_to_postid((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]");
}

// demo
add_action('init','my_super_early_meta_action');

function my_super_early_meta_action() {
    $keyword = get_post_meta( get_early_postid(), '_wpg_def_keyword', true );
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.