Why is a variable empty even though the user has data?
The variable name may not exactly match the system name. Custom attributes always use the c_ prefix and must match the system name exactly (not the display name). Check the attribute catalog in the InOne panel.
What is the difference between nil, blank, and an empty string?
nil: The variable is not set at all.
"": The variable exists but has no content.
blank: Matches both nil and "" in comparisons.
Both nil and "" trigger the default filter. A string containing only whitespace (" ") is not blank.
Why does 0 not trigger default?
default only activates for nil, false, and "". The number 0 is a valid value, so it is returned as-is. If you want to treat 0 as empty, use an explicit if check:
{% if c_total_orders == 0 or c_total_orders == blank %}
No orders yet.
{% else %}
{{ c_total_orders }} orders placed.
{% endif %}Why does 10 | divided_by: 4 return 2 instead of 2.5?
When both values are whole numbers, Liquid performs integer division and discards the decimal. Use 10.0 | divided_by: 4 or 10 | divided_by: 4.0 to get a decimal result.
I used capitalize but the name came out wrong. What happened?
capitalize uppercases the first character and lowercases all others. "ALICE SMITH" becomes "Alice smith". For proper title casing, capitalize each word separately:
{% assign fn = name | capitalize %}
{% assign ln = surname | capitalize %}
{{ fn }} {{ ln }}
→ Alice SmithWhy is the date empty even though the attribute has a value?
time_format fails silently when it cannot parse the input. Check that the date value is in a recognized format (ISO 8601, Unix timestamp, etc.). Formats using dots (15.01.2024) are not supported.
Can we use parentheses to group conditions?
No. Parentheses in if conditions are not supported. Use nested if blocks to achieve logical grouping.
What is the difference between assign and capture?
assign stores a single value or a filtered expression: {% assign x = name | upcase %}
capture stores a rendered block of content that can include tags and multiple lines: {% capture x %}...{% endcapture %}
Use capture when the value you want to store requires logic or multi-line rendering.
Why did the user receive the message after abort_message was fired?
abort_message only prevents delivery when the tag is actually reached during rendering. If it is inside a condition that was not met, the message is sent normally. Double-check your condition logic with a test user.
Can we compare a number stored as a string attribute?
Comparisons with >, <, >=, <= work when the value is numeric. If the attribute was stored as a string, the comparison may not behave as expected. In that case, use == "5" (string comparison) or consult the attribute's data type in the panel.