web-dev-qa-db-ja.com

get_term_link()が正しい値を返す - しかし、論理的でないエラーメッセージが乱れる

私はWordpressとget_the_link() - 関数に関する非常に奇妙な問題と、オブジェクトであるがオブジェクトエラーではないと識別されたオブジェクトに関する次の問題、それ自体は機能しています。

最初にget_term_link()を発行します:

通常の数と分類法を尋ねると、うまくいきます:$tax_name = 'products'; print get_term_link(13, $tax_name);

それはURLを返します、しかし私がそれを以下のようにするならば:$tax_id = (int)$navItem['id']; $tax_name = 'products'; print get_term_link($tax_id , $tax_name);

私はエラーメッセージを得ました:

キャッチ可能な致命的エラー:行89の/home/username/www/domainname/wp-content/themes/theme/sidebar-left.phpでクラスWP_Errorのオブジェクトを文字列に変換できませんでした

最後の行は89でした​​。(tax_idのvar_dumpはint(13)でした)

NavItem ['id] var_dumpの前に(int)がないと、文字列(2)になります。

ソースとしてget_term_by()関数を使ってこれを試しました。 $term = get_term_by('id', $navItem['id'], $tax_name); $tax_id = $term->term_id; var_dump($tax_id); $tax_name = 'products'; print get_term_link($tax_id , $tax_name);

追加として新しいエラーメッセージを受け取りました:

Notice:88行目の/home/username/www/domainname/wp-content/themes/theme/sidebar-left.phpで、オブジェクト以外のプロパティを取得しようとしています

この例では88行目が "$ tax_id = $ term-> term_id;"であるため、何が問題ですか。私は(int)を使うことができますが、これはエラーメッセージを変えません。

面白いことに、$ term変数はオブジェクトです。そしてこのエラーメッセージは私が非オブジェクトからプロパティを取得しようとしていることを私に説明します。このオブジェクトを配列に変換し(get_object_vars() - 関数)、配列(name [key])のように配列の値にアクセスすると

次のようなエラーメッセージが表示されます。

get_object_vars()は、パラメータ1がオブジェクトであると想定します。86行目ではnullです。

それらを整数に変換してから文字列に変換しようとしました。 IDの代わりにslugを使用しようとしました。しかし何もうまくいきませんでした。結果はうまくいった!

そうだね!すべての行が正しいlink-url!を返しています。

しかし、私はこのエラーメッセージを受け取ります...そして私はその理由を理解していません。なぜなら...彼らは私にとって全く論理的ではありません。しかし、私はこの問題の非論理的な部分であり、誰かが私がこれを解決/理解するのを手伝ってくれることを願っています。

そして、そうではありません...エラーメッセージを表示/非表示にするのは好きではありません。

1
Sascha

get_term_link()はエラー時に WP_Errorオブジェクトを返します

オブジェクトや配列をprintにすることはできません。そうしないと、あなたが得ているものに似たメッセージを受け取ることになります。代わりにvar_dump()またはprint_r()を使用すると、何が起きているのかがわかります。あなたのエラーは、WP_Errorが関係するオブジェクトであることさえあなたに伝えます。

探している用語が見つからないとエラーになります。

そして、はい、あなたは本番サイトであなたのエラーメッセージを隠すべきです。彼らは明らかにすることができます。 本番サイトでエラーが発生した場合はログに書き込みます。

1
s_ha_dum