IT-Swarm.Net

আপডেট_পোস্ট_মেটা যখন মান শূন্য হয় তখন সংরক্ষণ করা হয় না

update_post_meta ফাংশনে আমার সমস্যা আছে।.
আমার কাছে একটি ব্যবহারকারী জমা দেওয়া মান রয়েছে যা আমি $_POST এর মাধ্যমে পাস করি এবং তারপরে মেটা পোস্টে সংরক্ষণ করি।.

সব ঠিকঠাক চলছে, তবে মানটি '0' হলে পোস্ট মেটা আপডেট হয় না।.

আমার কোড:

$id = absint($_POST['ex_id']);
$key = (string) $_POST['id'];
$value = (string) $_POST['value'];

echo update_post_meta($id, 'wpptabs_' . $key, $value);

ভুল কী হতে পারে তার কারও কি ধারণা আছে?

5
HoGo

এই লাইন দিয়ে শুরু হওয়া update_post_meta()update_metadata কে কল করে:

if ( !$meta_type || !$meta_key )
    return false;

স্ট্রিংয়ের মানগুলি কীভাবে মূল্যায়ন করা হয় তা দেখার জন্য আমি একটি সাধারণ পরীক্ষা (অনেকগুলি কাটা ও পেস্ট সহ) লিখেছি (PHP ম্যানুয়ালটিতে এটি দেখার পরিবর্তে):

<?php

$meta_key = (string) 0;

if ( ! $meta_key )
    echo "0 exits function<br />";

else {
    echo "0 remains in function<br />";
    echo "&nbsp;&nbsp;\$meta_key = $meta_key<br />";
    echo "&nbsp;&nbsp;(integer) \$meta_key = " . (integer) $meta_key . '<br />';
}

echo '<br />';
$meta_key = (string) 0;

if ( ! $meta_key )
    echo "(string) 0 exits function<br />";

else {
    echo "(string) 0 remains in function<br />";
    echo "&nbsp;&nbsp;\$meta_key = $meta_key<br />";
    echo "&nbsp;&nbsp;(integer) \$meta_key = " . (integer) $meta_key . '<br />';
}

echo '<br />';
$meta_key = (string) '0';

if ( ! $meta_key )
    echo "(string) '0' exits function<br />";

else {
    echo "(string) '0' remains in function<br />";
    echo "&nbsp;&nbsp;\$meta_key = $meta_key<br />";
    echo "&nbsp;&nbsp;(integer) \$meta_key = " . (integer) $meta_key . '<br />';
}

echo '<br />';
$meta_key = 0x0;

if ( ! $meta_key )
    echo "0x0 exits function<br />";

else {
    echo "0x0 remains in function<br />";
    echo "&nbsp;&nbsp;\$meta_key = $meta_key<br />";
    echo "&nbsp;&nbsp;(integer) \$meta_key = " . (integer) $meta_key . '<br />';
}

echo '<br />';
$meta_key = (string) 0x0;

if ( ! $meta_key )
    echo "(string) 0x0 exits function<br />";

else {
    echo "(string) 0x0 remains in function<br />";
    echo "&nbsp;&nbsp;\$meta_key = $meta_key<br />";
    echo "&nbsp;&nbsp;(integer) \$meta_key = " . (integer) $meta_key . '<br />';
}

echo '<br />';
$meta_key = '0x0';

if ( ! $meta_key )
    echo "'0x0' exits function<br />";

else {
    echo "'0x0' remains in function<br />";
    echo "&nbsp;&nbsp;\$meta_key = $meta_key<br />";
    echo "&nbsp;&nbsp;(integer) \$meta_key = " . (integer) $meta_key . '<br />';
}

echo '<br />';
$meta_key = (string) '0x0';

if ( ! $meta_key )
    echo "(string) '0x0' exits function<br />";

else {
    echo "(string) '0x0' remains in function<br />";
    echo "&nbsp;&nbsp;\$meta_key = $meta_key<br />";
    echo "&nbsp;&nbsp;(integer) \$meta_key = " . (integer) $meta_key . '<br />';
}

ফলাফল ছিল:

0 exits function

(string) 0 exits function

(string) '0' exits function

0x0 exits function

(string) 0x0 exits function

'0x0' remains in function
  $meta_key = 0x0
  (integer) $meta_key = 0

(string) '0x0' remains in function
  $meta_key = 0x0
  (integer) $meta_key = 0

সুতরাং, 0 এর মান যুক্ত করতে আপনি এটিকে স্ট্রিং '0x0' এ পরিবর্তন করতে পারেন এবং পুনরুদ্ধার করার সময় এটি পূর্ণসংখ্যায় কাস্ট করতে পারেন। 0x0 0 এর জন্য বাইনারি (আমার মনে হয়)।.

3
Charles Clarkson

সমস্যাটি meta.php এর মধ্যে update_metadata() ফাংশনের এই অংশটি করা উচিত যা update_post_meta() কল করে

$result = $wpdb->update( $table, $data, $where );
if ( ! $result )
    return false;

যেহেতু রিটার্নের মান 0 হয় তবে যদি বিবৃতিটি সঠিকভাবে এটি মিথ্যা হিসাবে বিবেচনা করে তবে 0 ডাটাবেসে সংরক্ষণ করা হয়েছে।.

এটি তখনই ঘটে যখন এটি আপডেট হয়। যদি 0 এর মান সহ কোনও নতুন পোস্ট মেটা যুক্ত হয় তবে এটি প্রত্যাশার মতো লাইন আইডি প্রদান করে।.

0
User13342

পিএইচপি তুলনা করার জন্য 0false এর সমতুল্য হিসাবে বিবেচনা করে। কারণ update_post_meta ফাংশন সংরক্ষণের আগে একটি মান পরীক্ষা করে, এটি 0 == false এর কারণে উপস্থিত হয়।.

পোস্ট মেটা সংরক্ষণ করার আগে আপনি এরকম কিছু করতে পারেন, এটি কিছুটা হ্যাকি তবে এটি কাজ করবে:

if ( 0 === $value ) {
    $value = 'zero';
}

তারপরে আপনি যখন নিজের মানগুলি পরে পুনরুদ্ধার করবেন তখন আপনি ঠিক তার বিপরীতটি করুন:

$value = get_post_meta( $post_id, 'meta-key', true );
if ( 'zero' == $value ) {
    $value = 0;
}
0
Simon Blackbourn